summaryrefslogtreecommitdiff
path: root/Command/FromKey.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-05-22 22:41:36 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-05-22 22:41:36 -0400
commit280b59024768689feed03db4e7069e12f9605825 (patch)
tree2350b2747d669d44ebaafdb2b7fefe5b550b558b /Command/FromKey.hs
parent0c2026f3d4109e810b050090b44bb406b6a11954 (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.hs16
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