diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-05-22 22:41:36 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-05-22 22:41:36 -0400 |
commit | 280b59024768689feed03db4e7069e12f9605825 (patch) | |
tree | 2350b2747d669d44ebaafdb2b7fefe5b550b558b /Command/FromKey.hs | |
parent | 0c2026f3d4109e810b050090b44bb406b6a11954 (diff) |
fromkey, registerurl: Allow urls to be specified instead of keys, and generate URL keys.
This is especially useful because the caller doesn't need to generate valid
url keys, which involves some escaping of characters, and may involve
taking a md5sum of the url if it's too long.
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 |