From b24bb6b435ddc91510163c7b22db2ba52703724c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 15 Mar 2015 14:07:43 -0400 Subject: [PATCH] fromkey: Add stdin mode. --- Command/FromKey.hs | 25 +++++++++++++++++++++---- debian/changelog | 1 + doc/git-annex.mdwn | 6 +++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Command/FromKey.hs b/Command/FromKey.hs index 7176d97a5e..d18fa16ccc 100644 --- a/Command/FromKey.hs +++ b/Command/FromKey.hs @@ -5,6 +5,8 @@ - Licensed under the GNU GPL version 3 or higher. -} +{-# LANGUAGE BangPatterns #-} + module Command.FromKey where import Common.Annex @@ -33,16 +35,31 @@ start force (keyname:file:[]) = do "key ("++ keyname ++") is not present in backend (use --force to override this sanity check)" showStart "fromkey" file next $ perform key file +start _ [] = do + showStart "fromkey" "stdin" + next massAdd start _ _ = error "specify a key and a dest file" +massAdd :: CommandPerform +massAdd = go True =<< map words . lines <$> liftIO getContents + where + go status [] = next $ return status + go status ([keyname,f]:rest) = do + let key = fromMaybe (error $ "bad key " ++ keyname) $ file2key keyname + 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." + perform :: Key -> FilePath -> CommandPerform perform key file = do + ok <- perform' key file + next $ return ok + +perform' :: Key -> FilePath -> Annex Bool +perform' key file = do link <- calcRepo $ gitAnnexLink file key liftIO $ createDirectoryIfMissing True (parentDir file) liftIO $ createSymbolicLink link file - next $ cleanup file - -cleanup :: FilePath -> CommandCleanup -cleanup file = do Annex.Queue.addCommand "add" [Param "--"] [file] return True diff --git a/debian/changelog b/debian/changelog index d238a32bfd..22e7cd6fcd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -36,6 +36,7 @@ git-annex (5.2015022) UNRELEASED; urgency=medium * git-annex-shell: Improve error message when the specified repository 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. -- Joey Hess Thu, 19 Feb 2015 14:16:03 -0400 diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 254e0883b0..3af9bbb8c1 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -952,7 +952,7 @@ subdirectories). git annex examinekey --format='.git/annex/objects/${hashdirmixed}${key}/${key}' -* `fromkey key file` +* `fromkey [key file]` This plumbing-level command can be used to manually set up a file in the git repository to link to a specified key. @@ -960,6 +960,10 @@ subdirectories). Normally, the annex needs to already contain the content object for the key. To override this, use --force. + If the key and file 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 filename, sepearated by whitespace. + * `dropkey [key ...]` This plumbing-level command drops the annexed data for the specified