summaryrefslogtreecommitdiff
path: root/Command.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Command.hs')
-rw-r--r--Command.hs17
1 files changed, 12 insertions, 5 deletions
diff --git a/Command.hs b/Command.hs
index 386efafde..e7ce335c7 100644
--- a/Command.hs
+++ b/Command.hs
@@ -18,6 +18,7 @@ module Command (
ifAnnexed,
notBareRepo,
isBareRepo,
+ numCopies,
autoCopies,
module ReExported
) where
@@ -34,6 +35,7 @@ import Checks as ReExported
import Usage as ReExported
import Logs.Trust
import Config
+import Annex.CheckAttr
{- Generates a normal command -}
command :: String -> String -> [CommandSeek] -> String -> Command
@@ -98,17 +100,22 @@ notBareRepo a = do
isBareRepo :: Annex Bool
isBareRepo = fromRepo Git.repoIsLocalBare
+numCopies :: FilePath -> Annex (Maybe Int)
+numCopies file = readish <$> checkAttr "annex.numcopies" file
+
{- Used for commands that have an auto mode that checks the number of known
- copies of a key.
-
- In auto mode, first checks that the number of known
- copies of the key is > or < than the numcopies setting, before running
- the action. -}
-autoCopies :: Key -> (Int -> Int -> Bool) -> Maybe Int -> CommandStart -> CommandStart
-autoCopies key vs numcopiesattr a = Annex.getState Annex.auto >>= auto
+autoCopies :: FilePath -> Key -> (Int -> Int -> Bool) -> (Maybe Int -> CommandStart) -> CommandStart
+autoCopies file key vs a = do
+ numcopiesattr <- numCopies file
+ Annex.getState Annex.auto >>= auto numcopiesattr
where
- auto False = a
- auto True = do
+ auto numcopiesattr False = a numcopiesattr
+ auto numcopiesattr True = do
needed <- getNumCopies numcopiesattr
(_, have) <- trustPartition UnTrusted =<< Remote.keyLocations key
- if length have `vs` needed then a else stop
+ if length have `vs` needed then a numcopiesattr else stop