518a51a8a0
And annex.largefiles and annex.addunlocked. Also git-annex matchexpression --explain explains why its input expression matches or fails to match. When there is no limit, avoid explaining why the lack of limit matches. This is also done when no preferred content expression is set, although in a few cases it defaults to a non-empty matcher, which will be explained. Sponsored-by: Dartmouth College's DANDI project
115 lines
4 KiB
Haskell
115 lines
4 KiB
Haskell
{- items that a command can act on
|
|
-
|
|
- Copyright 2016-2023 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
|
|
|
|
module Types.ActionItem (
|
|
module Types.ActionItem,
|
|
StringContainingQuotedPath(..),
|
|
) where
|
|
|
|
import Key
|
|
import Types.Transfer
|
|
import Types.UUID
|
|
import Types.FileMatcher
|
|
import Git.FilePath
|
|
import Git.Quote (StringContainingQuotedPath(..))
|
|
import Utility.FileSystemEncoding
|
|
|
|
data ActionItem
|
|
= ActionItemAssociatedFile AssociatedFile Key
|
|
| ActionItemKey Key
|
|
| ActionItemBranchFilePath BranchFilePath Key
|
|
| ActionItemFailedTransfer Transfer TransferInfo
|
|
| ActionItemTreeFile RawFilePath
|
|
| ActionItemUUID UUID StringContainingQuotedPath
|
|
-- ^ UUID with a description or name of the repository
|
|
| ActionItemOther (Maybe StringContainingQuotedPath)
|
|
| OnlyActionOn Key ActionItem
|
|
-- ^ Use to avoid more than one thread concurrently processing the
|
|
-- same Key.
|
|
deriving (Show, Eq)
|
|
|
|
class MkActionItem t where
|
|
mkActionItem :: t -> ActionItem
|
|
|
|
instance MkActionItem ActionItem where
|
|
mkActionItem = id
|
|
|
|
instance MkActionItem (AssociatedFile, Key) where
|
|
mkActionItem = uncurry ActionItemAssociatedFile
|
|
|
|
instance MkActionItem (Key, AssociatedFile) where
|
|
mkActionItem = uncurry $ flip ActionItemAssociatedFile
|
|
|
|
instance MkActionItem (Key, RawFilePath) where
|
|
mkActionItem (key, file) = ActionItemAssociatedFile (AssociatedFile (Just file)) key
|
|
|
|
instance MkActionItem (RawFilePath, Key) where
|
|
mkActionItem (file, key) = mkActionItem (key, file)
|
|
|
|
instance MkActionItem Key where
|
|
mkActionItem = ActionItemKey
|
|
|
|
instance MkActionItem (BranchFilePath, Key) where
|
|
mkActionItem = uncurry ActionItemBranchFilePath
|
|
|
|
instance MkActionItem (Transfer, TransferInfo) where
|
|
mkActionItem = uncurry ActionItemFailedTransfer
|
|
|
|
instance MkActionItem MatchInfo where
|
|
mkActionItem (MatchingFile i) = ActionItemTreeFile (matchFile i)
|
|
mkActionItem (MatchingInfo i) = case providedFilePath i of
|
|
Just f -> ActionItemTreeFile f
|
|
Nothing -> case providedKey i of
|
|
Just k -> ActionItemKey k
|
|
Nothing -> ActionItemOther Nothing
|
|
mkActionItem (MatchingUserInfo _) = ActionItemOther Nothing
|
|
|
|
actionItemDesc :: ActionItem -> StringContainingQuotedPath
|
|
actionItemDesc (ActionItemAssociatedFile (AssociatedFile (Just f)) _) =
|
|
QuotedPath f
|
|
actionItemDesc (ActionItemAssociatedFile (AssociatedFile Nothing) k) =
|
|
UnquotedByteString (serializeKey' k)
|
|
actionItemDesc (ActionItemKey k) =
|
|
UnquotedByteString (serializeKey' k)
|
|
actionItemDesc (ActionItemBranchFilePath bfp _) =
|
|
descBranchFilePath bfp
|
|
actionItemDesc (ActionItemFailedTransfer t i) = actionItemDesc $
|
|
ActionItemAssociatedFile (associatedFile i) (transferKey t)
|
|
actionItemDesc (ActionItemTreeFile f) = QuotedPath f
|
|
actionItemDesc (ActionItemUUID _ desc) = desc
|
|
actionItemDesc (ActionItemOther Nothing) = mempty
|
|
actionItemDesc (ActionItemOther (Just v)) = v
|
|
actionItemDesc (OnlyActionOn _ ai) = actionItemDesc ai
|
|
|
|
actionItemKey :: ActionItem -> Maybe Key
|
|
actionItemKey (ActionItemAssociatedFile _ k) = Just k
|
|
actionItemKey (ActionItemKey k) = Just k
|
|
actionItemKey (ActionItemBranchFilePath _ k) = Just k
|
|
actionItemKey (ActionItemFailedTransfer t _) = Just (transferKey t)
|
|
actionItemKey (ActionItemTreeFile _) = Nothing
|
|
actionItemKey (ActionItemUUID _ _) = Nothing
|
|
actionItemKey (ActionItemOther _) = Nothing
|
|
actionItemKey (OnlyActionOn _ ai) = actionItemKey ai
|
|
|
|
actionItemFile :: ActionItem -> Maybe RawFilePath
|
|
actionItemFile (ActionItemAssociatedFile (AssociatedFile af) _) = af
|
|
actionItemFile (ActionItemTreeFile f) = Just f
|
|
actionItemFile (ActionItemUUID _ _) = Nothing
|
|
actionItemFile (OnlyActionOn _ ai) = actionItemFile ai
|
|
actionItemFile _ = Nothing
|
|
|
|
actionItemUUID :: ActionItem -> Maybe UUID
|
|
actionItemUUID (ActionItemUUID uuid _) = Just uuid
|
|
actionItemUUID _ = Nothing
|
|
|
|
actionItemTransferDirection :: ActionItem -> Maybe Direction
|
|
actionItemTransferDirection (ActionItemFailedTransfer t _) = Just $
|
|
transferDirection t
|
|
actionItemTransferDirection (OnlyActionOn _ ai) = actionItemTransferDirection ai
|
|
actionItemTransferDirection _ = Nothing
|