2module TutorialD.Interpreter.TransactionGraphOperator where
3import TutorialD.Interpreter.Base
4import Text.Megaparsec.Text
6import ProjectM36.TransactionGraph hiding (autoMergeToHead)
7import ProjectM36.Client
11data ConvenienceTransactionGraphOperator = AutoMergeToHead MergeStrategy HeadName
14convenienceTransactionGraphOpP :: Parser ConvenienceTransactionGraphOperator
15convenienceTransactionGraphOpP = autoMergeToHeadP
17autoMergeToHeadP :: Parser ConvenienceTransactionGraphOperator
19 reserved ":automergetohead"
20 AutoMergeToHead <$> mergeTransactionStrategyP <*> identifier
22jumpToHeadP :: Parser TransactionGraphOperator
24 reservedOp ":jumphead"
25 JumpToHead <$> identifier
27jumpToTransactionP :: Parser TransactionGraphOperator
28jumpToTransactionP = do
30 JumpToTransaction <$> uuidP
32walkBackToTimeP :: Parser TransactionGraphOperator
34 reservedOp ":walkbacktotime"
35 WalkBackToTime <$> utcTimeP
37branchTransactionP :: Parser TransactionGraphOperator
38branchTransactionP = do
42deleteBranchP :: Parser TransactionGraphOperator
44 reserved ":deletebranch"
45 DeleteBranch <$> identifier
47commitTransactionP :: Parser TransactionGraphOperator
48commitTransactionP = do
52rollbackTransactionP :: Parser TransactionGraphOperator
53rollbackTransactionP = do
54 reservedOp ":rollback"
57showGraphP :: Parser ROTransactionGraphOperator
59 reservedOp ":showgraph"
62mergeTransactionStrategyP :: Parser MergeStrategy
63mergeTransactionStrategyP = (reserved "union" $> UnionMergeStrategy) <|>
65 reserved "selectedbranch"
66 SelectedBranchMergeStrategy <$> identifier) <|>
68 reserved "unionpreferbranch"
69 UnionPreferMergeStrategy <$> identifier)
71mergeTransactionsP :: Parser TransactionGraphOperator
72mergeTransactionsP = do
73 reservedOp ":mergetrans"
74 MergeTransactions <$> mergeTransactionStrategyP <*> identifier <*> identifier
76transactionGraphOpP :: Parser TransactionGraphOperator
79 <|> jumpToTransactionP
81 <|> branchTransactionP
83 <|> commitTransactionP
84 <|> rollbackTransactionP
85 <|> mergeTransactionsP
87roTransactionGraphOpP :: Parser ROTransactionGraphOperator
88roTransactionGraphOpP = showGraphP
93-- for interpreter-specific operations
94interpretOps :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> String -> (DisconnectedTransaction, TransactionGraph, TutorialDOperatorResult)
95interpretOps newUUID trans@(DisconnectedTransaction _ context) transGraph instring = case parse interpreterOps "" instring of
96 Left _ -> (trans, transGraph, NoActionResult)
97 Right ops -> case ops of
98 Left contextOp -> (trans, transGraph, (evalContextOp context contextOp))
99 Right graphOp -> case evalGraphOp newUUID trans transGraph graphOp of
100 Left err -> (trans, transGraph, DisplayErrorResult $ T.pack (show err))
101 Right (newDiscon, newGraph, result) -> (newDiscon, newGraph, result)
104evalROGraphOp :: SessionId -> Connection -> ROTransactionGraphOperator -> IO (Either RelationalError Relation)
105evalROGraphOp sessionId conn ShowGraph = transactionGraphAsRelation sessionId conn
107evalConvenienceGraphOp :: SessionId -> Connection -> ConvenienceTransactionGraphOperator -> IO (Either RelationalError ())
108evalConvenienceGraphOp sessionId conn (AutoMergeToHead strat head') = autoMergeToHead sessionId conn strat head'
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list