e1ac299ad0
This avoids all the complication about redundant work discussed in the previous try at fixing this. At the expense of needing each command that could have the problem to be patched to simply wrap the action in onlyActionOn once the key is known. But there do not seem to be many such commands. onlyActionOn' should not be used with a CommandStart (or CommandPerform), although the types do allow it. onlyActionOn handles running the whole CommandStart chain. I couldn't immediately see a way to avoid mistken use of onlyActionOn'. This commit was supported by the NSF-funded DataLad project.
52 lines
1.6 KiB
Haskell
52 lines
1.6 KiB
Haskell
{- 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 Key
|
|
import Types.Transfer
|
|
import Git.FilePath
|
|
|
|
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 (AssociatedFile (Just f))) _ = f
|
|
actionItemDesc (ActionItemAssociatedFile (AssociatedFile Nothing)) k = key2file k
|
|
actionItemDesc ActionItemKey k = key2file k
|
|
actionItemDesc (ActionItemBranchFilePath bfp) _ = descBranchFilePath bfp
|
|
actionItemDesc (ActionItemFailedTransfer _ i) k =
|
|
actionItemDesc (ActionItemAssociatedFile (associatedFile i)) k
|
|
|
|
actionItemWorkTreeFile :: ActionItem -> Maybe FilePath
|
|
actionItemWorkTreeFile (ActionItemAssociatedFile (AssociatedFile af)) = af
|
|
actionItemWorkTreeFile _ = Nothing
|
|
|
|
actionItemTransferDirection :: ActionItem -> Maybe Direction
|
|
actionItemTransferDirection (ActionItemFailedTransfer t _) = Just $
|
|
transferDirection t
|
|
actionItemTransferDirection _ = Nothing
|