From a29ec4336c45000635aae179ae64123b9e78a9b0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 15 Mar 2015 14:37:33 -0400 Subject: registerurl: New plumbing command for mass-adding urls to keys. --- Command/FromKey.hs | 2 +- Command/RegisterUrl.hs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 Command/RegisterUrl.hs (limited to 'Command') 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 + - + - 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 -- cgit v1.2.3