summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-03-06 12:45:57 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-03-06 12:45:57 -0400
commit9c80035727bddc2af69fb9cab41dbf965fe496ec (patch)
tree3492b796b6ebd993d678a8dc6a7fe8195cd4dc95
parent24f3781fcaa7e99e4eaf1cb1b5771c6091717799 (diff)
dropkey: Add --batch.
-rw-r--r--Command/DropKey.hs39
-rw-r--r--debian/changelog1
-rw-r--r--doc/git-annex-dropkey.mdwn7
3 files changed, 37 insertions, 10 deletions
diff --git a/Command/DropKey.hs b/Command/DropKey.hs
index 60d7d5fc7..71993acbb 100644
--- a/Command/DropKey.hs
+++ b/Command/DropKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <id@joeyh.name>
+ - Copyright 2010,2016 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,26 +13,45 @@ import Logs.Location
import Annex.Content
cmd :: Command
-cmd = noCommit $
+cmd = noCommit $
command "dropkey" SectionPlumbing
"drops annexed content for specified keys"
(paramRepeating paramKey)
- (withParams seek)
+ (seek <$$> optParser)
-seek :: CmdParams -> CommandSeek
-seek = withKeys start
+data DropKeyOptions = DropKeyOptions
+ { toDrop :: [String]
+ , batchOption :: BatchMode
+ }
-start :: Key -> CommandStart
-start key = stopUnless (inAnnex key) $ do
+optParser :: CmdParamsDesc -> Parser DropKeyOptions
+optParser desc = DropKeyOptions
+ <$> cmdParams desc
+ <*> parseBatchOption
+
+seek :: DropKeyOptions -> CommandSeek
+seek o = do
unlessM (Annex.getState Annex.force) $
error "dropkey can cause data loss; use --force if you're sure you want to do this"
+ withKeys start (toDrop o)
+ case batchOption o of
+ Batch -> batchInput parsekey $ batchCommandAction . start
+ NoBatch -> noop
+ where
+ parsekey = maybe (Left "bad key") Right . file2key
+
+start :: Key -> CommandStart
+start key = do
showStart' "dropkey" key Nothing
next $ perform key
perform :: Key -> CommandPerform
-perform key = lockContentForRemoval key $ \contentlock -> do
- removeAnnex contentlock
- next $ cleanup key
+perform key = ifM (inAnnex key)
+ ( lockContentForRemoval key $ \contentlock -> do
+ removeAnnex contentlock
+ next $ cleanup key
+ , next $ return True
+ )
cleanup :: Key -> CommandCleanup
cleanup key = do
diff --git a/debian/changelog b/debian/changelog
index 9bd61260f..59ac9a51b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,7 @@ git-annex (6.20160230) UNRELEASED; urgency=medium
Thanks, Klaus Ethgen.
* Added dependencies on haskell mountpoints and disk-free-space
libraries, removing FFI code from git-annex.
+ * dropkey: Add --batch.
-- Joey Hess <id@joeyh.name> Mon, 29 Feb 2016 13:00:30 -0400
diff --git a/doc/git-annex-dropkey.mdwn b/doc/git-annex-dropkey.mdwn
index 0db29f900..03f03ec4e 100644
--- a/doc/git-annex-dropkey.mdwn
+++ b/doc/git-annex-dropkey.mdwn
@@ -17,6 +17,13 @@ to have a file in the git repository pointing at them.
Warning: This command does not check that enough other copies of the content
exist; using it can easily result in data loss.
+# OPTIONS
+
+* `--batch`
+
+ Enables batch mode, in which lines containing keys to drop are read from
+ stdin.
+
# SEE ALSO
[[git-annex]](1)