diff options
-rw-r--r-- | CmdLine/GitAnnex.hs | 1 | ||||
-rw-r--r-- | Command/FromKey.hs | 2 | ||||
-rw-r--r-- | Command/RegisterUrl.hs | 55 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/git-annex.mdwn | 11 |
5 files changed, 69 insertions, 1 deletions
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs index f794f8127..789c2d20a 100644 --- a/CmdLine/GitAnnex.hs +++ b/CmdLine/GitAnnex.hs @@ -24,6 +24,7 @@ import qualified Command.Get import qualified Command.LookupKey import qualified Command.ExamineKey import qualified Command.FromKey +import qualified Command.RegisterUrl import qualified Command.DropKey import qualified Command.TransferKey import qualified Command.TransferKeys diff --git a/Command/FromKey.hs b/Command/FromKey.hs index d18fa16cc..10484b840 100644 --- a/Command/FromKey.hs +++ b/Command/FromKey.hs @@ -49,7 +49,7 @@ massAdd = go True =<< map words . lines <$> liftIO getContents ok <- perform' key f let !status' = status && ok go status' rest - go status (_:rest) = error "Expected pairs of key and file on stdin, but got something else." + go _ _ = error "Expected pairs of key and file on stdin, but got something else." perform :: Key -> FilePath -> CommandPerform perform key file = do diff --git a/Command/RegisterUrl.hs b/Command/RegisterUrl.hs new file mode 100644 index 000000000..3ff1becc9 --- /dev/null +++ b/Command/RegisterUrl.hs @@ -0,0 +1,55 @@ +{- git-annex command + - + - Copyright 2015 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Command.RegisterUrl where + +import Common.Annex +import Command +import Types.Key +import Logs.Web +import Annex.UUID + +cmd :: [Command] +cmd = [notDirect $ notBareRepo $ + command "registerurl" (paramPair paramKey paramUrl) seek + SectionPlumbing "registers an url for a key"] + +seek :: CommandSeek +seek = withWords start + +start :: [String] -> CommandStart +start (keyname:url:[]) = do + let key = fromMaybe (error "bad key") $ file2key keyname + showStart "registerurl" url + next $ perform key url +start [] = do + showStart "registerurl" "stdin" + next massAdd +start _ = error "specify a key and an url" + +massAdd :: CommandPerform +massAdd = go True =<< map words . lines <$> liftIO getContents + where + go status [] = next $ return status + go status ([keyname,u]:rest) = do + let key = fromMaybe (error $ "bad key " ++ keyname) $ file2key keyname + ok <- perform' key u + let !status' = status && ok + go status' rest + go _ _ = error "Expected pairs of key and url on stdin, but got something else." + +perform :: Key -> URLString -> CommandPerform +perform key url = do + ok <- perform' key url + next $ return ok + +perform' :: Key -> URLString -> Annex Bool +perform' key url = do + setUrlPresent webUUID key url + return True diff --git a/debian/changelog b/debian/changelog index 22e7cd6fc..d26360ede 100644 --- a/debian/changelog +++ b/debian/changelog @@ -37,6 +37,7 @@ git-annex (5.2015022) UNRELEASED; urgency=medium doesn't exist or git config fails for some reason. * fromkey --force: Skip test that the key has its content in the annex. * fromkey: Add stdin mode. + * registerurl: New plumbing command for mass-adding urls to keys. -- Joey Hess <id@joeyh.name> Thu, 19 Feb 2015 14:16:03 -0400 diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 3af9bbb8c..c33633e03 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -964,6 +964,17 @@ subdirectories). instead read from stdin. Any number of lines can be provided in this mode, each containing a key and filename, sepearated by whitespace. +* `registerurl [key url]` + + This plumbing-level command can be used to register urls where a + key can be downloaded from. + + No verification is performed of the url's contents. + + If the key and url are not 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 url, sepearated by whitespace. + * `dropkey [key ...]` This plumbing-level command drops the annexed data for the specified |