rekey: Added --batch mode.
Would have liked to make the Parser parse the file and key pairs, but it seems that optparse-applicative is unable to handle eg: many ((,) <$> argument <*> argument) This commit was sponsored by Thomas Hochstein on Patreon.
This commit is contained in:
parent
e65c31e56b
commit
82d01f5619
4 changed files with 37 additions and 7 deletions
|
@ -13,6 +13,7 @@ git-annex (6.20161119) UNRELEASED; urgency=medium
|
||||||
* rmurl: Added --batch mode.
|
* rmurl: Added --batch mode.
|
||||||
* fromkey: Accept multiple pairs of files and keys.
|
* fromkey: Accept multiple pairs of files and keys.
|
||||||
Thanks, Daniel Brooks.
|
Thanks, Daniel Brooks.
|
||||||
|
* rekey: Added --batch mode.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Mon, 21 Nov 2016 11:27:50 -0400
|
-- Joey Hess <id@joeyh.name> Mon, 21 Nov 2016 11:27:50 -0400
|
||||||
|
|
||||||
|
|
|
@ -25,15 +25,39 @@ cmd = notDirect $
|
||||||
command "rekey" SectionPlumbing
|
command "rekey" SectionPlumbing
|
||||||
"change keys used for files"
|
"change keys used for files"
|
||||||
(paramRepeating $ paramPair paramPath paramKey)
|
(paramRepeating $ paramPair paramPath paramKey)
|
||||||
(withParams seek)
|
(seek <$$> optParser)
|
||||||
|
|
||||||
seek :: CmdParams -> CommandSeek
|
data ReKeyOptions = ReKeyOptions
|
||||||
seek = withPairs start
|
{ reKeyThese :: CmdParams
|
||||||
|
, batchOption :: BatchMode
|
||||||
|
}
|
||||||
|
|
||||||
start :: (FilePath, String) -> CommandStart
|
optParser :: CmdParamsDesc -> Parser ReKeyOptions
|
||||||
start (file, keyname) = ifAnnexed file go stop
|
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
|
where
|
||||||
newkey = fromMaybe (giveup "bad key") $ file2key keyname
|
|
||||||
go oldkey
|
go oldkey
|
||||||
| oldkey == newkey = stop
|
| oldkey == newkey = stop
|
||||||
| otherwise = do
|
| otherwise = do
|
||||||
|
|
|
@ -10,7 +10,6 @@ module Command.RmUrl where
|
||||||
import Command
|
import Command
|
||||||
import Logs.Web
|
import Logs.Web
|
||||||
import qualified Remote
|
import qualified Remote
|
||||||
import CmdLine.Batch
|
|
||||||
|
|
||||||
cmd :: Command
|
cmd :: Command
|
||||||
cmd = notBareRepo $
|
cmd = notBareRepo $
|
||||||
|
|
|
@ -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.
|
Allow rekeying of even files whose content is not currently available.
|
||||||
Use with caution.
|
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
|
# SEE ALSO
|
||||||
|
|
||||||
[[git-annex]](1)
|
[[git-annex]](1)
|
||||||
|
|
Loading…
Add table
Reference in a new issue