@@ -16,8 +16,8 @@ import Control.Monad
16import qualified Data.Text as T
16import qualified Data.Text as T
17import GHC.Generics
17import GHC.Generics
18import Data.Binary
18import Data.Binary
20import Data.Either (lefts, rights)
19import Data.Either (lefts, rights)
22--operators which manipulate a transaction graph
22--operators which manipulate a transaction graph
23data TransactionGraphOperator = JumpToHead HeadName |
23data TransactionGraphOperator = JumpToHead HeadName |
@@ -263,7 +263,9 @@ createMergeTransaction newUUID (SelectedBranchMergeStrategy selectedBranch) grap
263 selectedTrans <- validateHeadName selectedBranch graph t2
263 selectedTrans <- validateHeadName selectedBranch graph t2
264 pure $ Transaction newUUID (MergeTransactionInfo (transactionUUID trans1) (transactionUUID trans2) S.empty) (transactionContext selectedTrans)
264 pure $ Transaction newUUID (MergeTransactionInfo (transactionUUID trans1) (transactionUUID trans2) S.empty) (transactionContext selectedTrans)
266−--createMergeTransaction newUUID UnionMergeStrategy graph t2 = undefined
266+createMergeTransaction newUUID UnionMergeStrategy graph t2 = undefined
268+createMergeTransaction newUUID (UnionPreferMergeStrategy preferHead) graph t2 = undefined
268-- | Returns the correct Transaction for the branch name in the graph and ensures that it is one of the two transaction arguments in the tuple.
270-- | Returns the correct Transaction for the branch name in the graph and ensures that it is one of the two transaction arguments in the tuple.
269validateHeadName :: HeadName -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
271validateHeadName :: HeadName -> TransactionGraph -> (Transaction, Transaction) -> Either MergeError Transaction
@@ -334,12 +336,6 @@ mergeTransactions newUUID parentUUID mergeStrategy (headNameA, headNameB) graph
334 transB <- transactionForHeadErr headNameB
336 transB <- transactionForHeadErr headNameB
335 let transAid = transactionUUID transA
337 let transAid = transactionUUID transA
336 transBid = transactionUUID transB
338 transBid = transactionUUID transB
337− headNameToDelete <- if parentUUID == transAid then
339− else if parentUUID == transBid then
342− Left (MergeTransactionError (DisconnectedTransactionNotAMergeHeadError parentUUID))
344 disconParent <- transactionForUUID parentUUID graph
340 disconParent <- transactionForUUID parentUUID graph
345 let subHeads = M.filterWithKey (\k _ -> elem k [headNameA, headNameB]) (transactionHeadsForGraph graph)
341 let subHeads = M.filterWithKey (\k _ -> elem k [headNameA, headNameB]) (transactionHeadsForGraph graph)
@@ -352,8 +348,7 @@ mergeTransactions newUUID parentUUID mergeStrategy (headNameA, headNameB) graph
352 Just headName -> do
348 Just headName -> do
353 -- why create a merge transaction and then only use the context?
349 -- why create a merge transaction and then only use the context?
354 (newTrans, newGraph) <- addTransactionToGraph headName parentUUID newUUID (transactionContext mergedTrans) graph
350 (newTrans, newGraph) <- addTransactionToGraph headName parentUUID newUUID (transactionContext mergedTrans) graph
355− let newGraph' = TransactionGraph newHeads (transactionsForGraph newGraph)
356− newHeads = M.delete headNameToDelete (transactionHeadsForGraph newGraph)
351+ let newGraph' = TransactionGraph (transactionHeadsForGraph newGraph) (transactionsForGraph newGraph)
357 newDiscon = newDisconnectedTransaction newUUID (transactionContext newTrans)
352 newDiscon = newDisconnectedTransaction newUUID (transactionContext newTrans)
358 pure (newDiscon, newGraph')
353 pure (newDiscon, newGraph')