summaryrefslogtreecommitdiff
path: root/Command/FromKey.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Command/FromKey.hs')
-rw-r--r--Command/FromKey.hs22
1 files changed, 12 insertions, 10 deletions
diff --git a/Command/FromKey.hs b/Command/FromKey.hs
index 36cc1d31f..c1e3a7965 100644
--- a/Command/FromKey.hs
+++ b/Command/FromKey.hs
@@ -20,30 +20,32 @@ 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 [] = 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
- unless inbackend $ error $
+ unless inbackend $ giveup $
"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 _ _ = error "specify a key and a dest file"
massAdd :: CommandPerform
-massAdd = go True =<< map (separate (== ' ')) . lines <$> liftIO getContents
+massAdd = go True =<< map (separate (== ' ')) <$> batchLines
where
go status [] = next $ return status
go status ((keyname,f):rest) | not (null keyname) && not (null f) = do
@@ -51,7 +53,7 @@ massAdd = go True =<< map (separate (== ' ')) . lines <$> liftIO getContents
ok <- perform' key f
let !status' = status && ok
go status' rest
- go _ _ = error "Expected pairs of key and file on stdin, but got something else."
+ go _ _ = giveup "Expected pairs of key and file on stdin, but got something else."
-- From user input to a Key.
-- User can input either a serialized key, or an url.
@@ -66,7 +68,7 @@ mkKey s = case parseURI s of
Backend.URL.fromUrl s Nothing
_ -> case file2key s of
Just k -> k
- Nothing -> error $ "bad key/url " ++ s
+ Nothing -> giveup $ "bad key/url " ++ s
perform :: Key -> FilePath -> CommandPerform
perform key file = do