diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-03-06 12:45:57 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-03-06 12:45:57 -0400 |
commit | 9c80035727bddc2af69fb9cab41dbf965fe496ec (patch) | |
tree | 3492b796b6ebd993d678a8dc6a7fe8195cd4dc95 /Command | |
parent | 24f3781fcaa7e99e4eaf1cb1b5771c6091717799 (diff) |
dropkey: Add --batch.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/DropKey.hs | 39 |
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 |