diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | Command/ReKey.hs | 36 | ||||
-rw-r--r-- | Command/RmUrl.hs | 1 | ||||
-rw-r--r-- | doc/git-annex-rekey.mdwn | 6 |
4 files changed, 37 insertions, 7 deletions
@@ -13,6 +13,7 @@ git-annex (6.20161119) UNRELEASED; urgency=medium * rmurl: Added --batch mode. * fromkey: Accept multiple pairs of files and keys. Thanks, Daniel Brooks. + * rekey: Added --batch mode. -- Joey Hess <id@joeyh.name> Mon, 21 Nov 2016 11:27:50 -0400 diff --git a/Command/ReKey.hs b/Command/ReKey.hs index 33734ebe7..4ddbd68b6 100644 --- a/Command/ReKey.hs +++ b/Command/ReKey.hs @@ -25,15 +25,39 @@ cmd = notDirect $ command "rekey" SectionPlumbing "change keys used for files" (paramRepeating $ paramPair paramPath paramKey) - (withParams seek) + (seek <$$> optParser) -seek :: CmdParams -> CommandSeek -seek = withPairs start +data ReKeyOptions = ReKeyOptions + { reKeyThese :: CmdParams + , batchOption :: BatchMode + } -start :: (FilePath, String) -> CommandStart -start (file, keyname) = ifAnnexed file go stop +optParser :: CmdParamsDesc -> Parser ReKeyOptions +optParser desc = ReKeyOptions + <$> cmdParams desc + <*> parseBatchOption + +-- Split on the last space, since a FilePath can contain whitespace, +-- but a Key very rarely does. +batchParser :: String -> Either String (FilePath, Key) +batchParser s = case separate (== ' ') (reverse s) of + (rk, rf) + | null rk || null rf -> Left "Expected: \"file key\"" + | otherwise -> case file2key (reverse rk) of + Nothing -> Left "bad key" + Just k -> Right (reverse rf, k) + +seek :: ReKeyOptions -> CommandSeek +seek o = case batchOption o of + Batch -> batchInput batchParser (batchCommandAction . start) + NoBatch -> withPairs (start . parsekey) (reKeyThese o) + where + parsekey (file, skey) = + (file, fromMaybe (giveup "bad key") (file2key skey)) + +start :: (FilePath, Key) -> CommandStart +start (file, newkey) = ifAnnexed file go stop where - newkey = fromMaybe (giveup "bad key") $ file2key keyname go oldkey | oldkey == newkey = stop | otherwise = do diff --git a/Command/RmUrl.hs b/Command/RmUrl.hs index 0f33d66b2..1a547a71e 100644 --- a/Command/RmUrl.hs +++ b/Command/RmUrl.hs @@ -10,7 +10,6 @@ module Command.RmUrl where import Command import Logs.Web import qualified Remote -import CmdLine.Batch cmd :: Command cmd = notBareRepo $ diff --git a/doc/git-annex-rekey.mdwn b/doc/git-annex-rekey.mdwn index 4ec0b49e8..ce5e43d41 100644 --- a/doc/git-annex-rekey.mdwn +++ b/doc/git-annex-rekey.mdwn @@ -20,6 +20,12 @@ Multiple pairs of file and key can be given in a single command line. Allow rekeying of even files whose content is not currently available. Use with caution. +* `--batch` + + Enables batch mode, in which lines are read from stdin. + Each line should contain the file, and the new key to use for that file, + separated by a single space. + # SEE ALSO [[git-annex]](1) |