git-annex fromkey now takes multiple pairs of keys and filenames

It also still reads from stdin when none are specified.
This commit is contained in:
Daniel Brooks 2016-12-05 09:59:20 -05:00
parent e0be5b354a
commit 24317be646
2 changed files with 14 additions and 9 deletions

View file

@ -20,16 +20,18 @@ import Network.URI
cmd :: Command
cmd = notDirect $ notBareRepo $
command "fromkey" SectionPlumbing "adds a file using a specific key"
(paramPair paramKey paramPath)
(paramRepeating (paramPair paramKey paramPath))
(withParams seek)
seek :: CmdParams -> CommandSeek
seek [] = do
withNothing startMass []
seek ps = do
force <- Annex.getState Annex.force
withWords (start force) ps
withPairs (start force) ps
start :: Bool -> [String] -> CommandStart
start force (keyname:file:[]) = do
start :: Bool -> (String, FilePath) -> CommandStart
start force (keyname, file) = do
let key = mkKey keyname
unless force $ do
inbackend <- inAnnex key
@ -37,10 +39,11 @@ start force (keyname:file:[]) = do
"key ("++ keyname ++") is not present in backend (use --force to override this sanity check)"
showStart "fromkey" file
next $ perform key file
start _ [] = do
startMass :: CommandStart
startMass = do
showStart "fromkey" "stdin"
next massAdd
start _ _ = giveup "specify a key and a dest file"
massAdd :: CommandPerform
massAdd = go True =<< map (separate (== ' ')) . lines <$> liftIO getContents

View file

@ -4,14 +4,16 @@ git-annex fromkey - adds a file using a specific key
# SYNOPSIS
git annex fromkey `[key file]`
git annex fromkey `[key file ...]`
# DESCRIPTION
This plumbing-level command can be used to manually set up a file
in the git repository to link to a specified key.
If the key and file are not specified on the command line, they are
Multiple pairs of file and key can be given in a single command line.
If no key and file pair are specified on the command line, they are
instead read from stdin. Any number of lines can be provided in this
mode, each containing a key and filename, separated by a single space.