diff options
Diffstat (limited to 'Command/FromKey.hs')
-rw-r--r-- | Command/FromKey.hs | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Command/FromKey.hs b/Command/FromKey.hs index ebc0e6f6e..584d913fc 100644 --- a/Command/FromKey.hs +++ b/Command/FromKey.hs @@ -1,6 +1,6 @@ {- git-annex command - - - Copyright 2010 Joey Hess <id@joeyh.name> + - Copyright 2010, 2015 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} @@ -15,6 +15,9 @@ import qualified Annex.Queue import Annex.Content import Types.Key import qualified Annex +import qualified Backend.URL + +import Network.URI cmd :: [Command] cmd = [notDirect $ notBareRepo $ @@ -28,7 +31,7 @@ seek ps = do start :: Bool -> [String] -> CommandStart start force (keyname:file:[]) = do - let key = fromMaybe (error "bad key") $ file2key keyname + let key = mkKey keyname unless force $ do inbackend <- inAnnex key unless inbackend $ error $ @@ -45,12 +48,19 @@ massAdd = go True =<< map (separate (== ' ')) . lines <$> liftIO getContents where go status [] = next $ return status go status ((keyname,f):rest) | not (null keyname) && not (null f) = do - let key = fromMaybe (error $ "bad key " ++ keyname) $ file2key keyname + let key = mkKey keyname 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." +mkKey :: String -> Key +mkKey s = case file2key s of + Just k -> k + Nothing -> case parseURI s of + Just _u -> Backend.URL.fromUrl s Nothing + Nothing -> error $ "bad key " ++ s + perform :: Key -> FilePath -> CommandPerform perform key file = do ok <- perform' key file |