2module TutorialD.Interpreter.TransactionGraphOperator where
3import TutorialD.Interpreter.Base
4import ProjectM36.TransactionGraph hiding (autoMergeToHead)
5import ProjectM36.Client
9data ConvenienceTransactionGraphOperator = AutoMergeToHead MergeStrategy HeadName
12convenienceTransactionGraphOpP :: Parser ConvenienceTransactionGraphOperator
13convenienceTransactionGraphOpP = autoMergeToHeadP
15autoMergeToHeadP :: Parser ConvenienceTransactionGraphOperator
17 reserved ":automergetohead"
18 AutoMergeToHead <$> mergeTransactionStrategyP <*> identifier
20jumpToHeadP :: Parser TransactionGraphOperator
22 reservedOp ":jumphead"
23 JumpToHead <$> identifier
25jumpToTransactionP :: Parser TransactionGraphOperator
26jumpToTransactionP = do
28 JumpToTransaction <$> uuidP
30walkBackToTimeP :: Parser TransactionGraphOperator
32 reservedOp ":walkbacktotime"
33 WalkBackToTime <$> utcTimeP
35branchTransactionP :: Parser TransactionGraphOperator
36branchTransactionP = do
40deleteBranchP :: Parser TransactionGraphOperator
42 reserved ":deletebranch"
43 DeleteBranch <$> identifier
45commitTransactionP :: Parser TransactionGraphOperator
46commitTransactionP = do
50rollbackTransactionP :: Parser TransactionGraphOperator
51rollbackTransactionP = do
52 reservedOp ":rollback"
55showGraphP :: Parser ROTransactionGraphOperator
57 reservedOp ":showgraph"
60mergeTransactionStrategyP :: Parser MergeStrategy
61mergeTransactionStrategyP = (reserved "union" $> UnionMergeStrategy) <|>
63 reserved "selectedbranch"
64 SelectedBranchMergeStrategy <$> identifier) <|>
66 reserved "unionpreferbranch"
67 UnionPreferMergeStrategy <$> identifier)
69mergeTransactionsP :: Parser TransactionGraphOperator
70mergeTransactionsP = do
71 reservedOp ":mergetrans"
72 MergeTransactions <$> mergeTransactionStrategyP <*> identifier <*> identifier
74transactionGraphOpP :: Parser TransactionGraphOperator
77 <|> jumpToTransactionP
79 <|> branchTransactionP
81 <|> commitTransactionP
82 <|> rollbackTransactionP
83 <|> mergeTransactionsP
85roTransactionGraphOpP :: Parser ROTransactionGraphOperator
86roTransactionGraphOpP = showGraphP
91-- for interpreter-specific operations
92interpretOps :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> String -> (DisconnectedTransaction, TransactionGraph, TutorialDOperatorResult)
93interpretOps newUUID trans@(DisconnectedTransaction _ context) transGraph instring = case parse interpreterOps "" instring of
94 Left _ -> (trans, transGraph, NoActionResult)
95 Right ops -> case ops of
96 Left contextOp -> (trans, transGraph, (evalContextOp context contextOp))
97 Right graphOp -> case evalGraphOp newUUID trans transGraph graphOp of
98 Left err -> (trans, transGraph, DisplayErrorResult $ T.pack (show err))
99 Right (newDiscon, newGraph, result) -> (newDiscon, newGraph, result)
102evalROGraphOp :: SessionId -> Connection -> ROTransactionGraphOperator -> IO (Either RelationalError Relation)
103evalROGraphOp sessionId conn ShowGraph = transactionGraphAsRelation sessionId conn
105evalConvenienceGraphOp :: SessionId -> Connection -> ConvenienceTransactionGraphOperator -> IO (Either RelationalError ())
106evalConvenienceGraphOp 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