summaryrefslogtreecommitdiff
path: root/Types/ActionItem.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2016-08-03 12:37:12 -0400
committerJoey Hess <joeyh@joeyh.name>2016-08-03 12:37:12 -0400
commit1a0e2c990183cda9e63a82503f3ce4fe0f35c314 (patch)
tree576f278dff952156d5cef4f80c9c51902e001fb8 /Types/ActionItem.hs
parent0fc85c45b5a6ee0523cc4d0d77e485249726bbf9 (diff)
get, move, copy, mirror: Added --failed switch which retries failed copies/moves
Note that get --from foo --failed will get things that a previous get --from bar tried and failed to get, etc. I considered making --failed only retry transfers from the same remote, but it was easier, and seems more useful, to not have the same remote requirement. Noisy due to some refactoring into Types/
Diffstat (limited to 'Types/ActionItem.hs')
-rw-r--r--Types/ActionItem.hs54
1 files changed, 54 insertions, 0 deletions
diff --git a/Types/ActionItem.hs b/Types/ActionItem.hs
new file mode 100644
index 0000000000..a0097e45a8
--- /dev/null
+++ b/Types/ActionItem.hs
@@ -0,0 +1,54 @@
+{- items that a command can act on
+ -
+ - Copyright 2016 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+
+module Types.ActionItem where
+
+import Types.Key
+import Types.Transfer
+import Git.FilePath
+
+import Data.Maybe
+
+data ActionItem
+ = ActionItemAssociatedFile AssociatedFile
+ | ActionItemKey
+ | ActionItemBranchFilePath BranchFilePath
+ | ActionItemFailedTransfer Transfer TransferInfo
+
+class MkActionItem t where
+ mkActionItem :: t -> ActionItem
+
+instance MkActionItem AssociatedFile where
+ mkActionItem = ActionItemAssociatedFile
+
+instance MkActionItem Key where
+ mkActionItem _ = ActionItemKey
+
+instance MkActionItem BranchFilePath where
+ mkActionItem = ActionItemBranchFilePath
+
+instance MkActionItem (Transfer, TransferInfo) where
+ mkActionItem = uncurry ActionItemFailedTransfer
+
+actionItemDesc :: ActionItem -> Key -> String
+actionItemDesc (ActionItemAssociatedFile (Just f)) _ = f
+actionItemDesc (ActionItemAssociatedFile Nothing) k = key2file k
+actionItemDesc ActionItemKey k = key2file k
+actionItemDesc (ActionItemBranchFilePath bfp) _ = descBranchFilePath bfp
+actionItemDesc (ActionItemFailedTransfer _ i) k =
+ fromMaybe (key2file k) (associatedFile i)
+
+actionItemWorkTreeFile :: ActionItem -> Maybe FilePath
+actionItemWorkTreeFile (ActionItemAssociatedFile af) = af
+actionItemWorkTreeFile _ = Nothing
+
+actionItemTransferDirection :: ActionItem -> Maybe Direction
+actionItemTransferDirection (ActionItemFailedTransfer t _) = Just $
+ transferDirection t
+actionItemTransferDirection _ = Nothing