summaryrefslogtreecommitdiff
path: root/Command/DropKey.hs
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 /Command/DropKey.hs
parent24f3781fcaa7e99e4eaf1cb1b5771c6091717799 (diff)
dropkey: Add --batch.
Diffstat (limited to 'Command/DropKey.hs')
-rw-r--r--Command/DropKey.hs39
1 files changed, 29 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