2010-11-02 23:04:24 +00:00
|
|
|
{- git-annex command
|
|
|
|
-
|
2016-03-06 16:45:57 +00:00
|
|
|
- Copyright 2010,2016 Joey Hess <id@joeyh.name>
|
2010-11-02 23:04:24 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Command.DropKey where
|
|
|
|
|
|
|
|
import Command
|
|
|
|
import qualified Annex
|
2011-10-15 20:21:08 +00:00
|
|
|
import Logs.Location
|
2011-10-04 04:40:47 +00:00
|
|
|
import Annex.Content
|
2010-11-02 23:04:24 +00:00
|
|
|
|
2015-07-08 16:33:27 +00:00
|
|
|
cmd :: Command
|
2016-03-06 16:58:36 +00:00
|
|
|
cmd = noCommit $ withGlobalOptions [jsonOption] $
|
2015-07-08 19:08:02 +00:00
|
|
|
command "dropkey" SectionPlumbing
|
|
|
|
"drops annexed content for specified keys"
|
|
|
|
(paramRepeating paramKey)
|
2016-03-06 16:45:57 +00:00
|
|
|
(seek <$$> optParser)
|
2010-12-30 19:06:26 +00:00
|
|
|
|
2016-03-06 16:45:57 +00:00
|
|
|
data DropKeyOptions = DropKeyOptions
|
|
|
|
{ toDrop :: [String]
|
|
|
|
, batchOption :: BatchMode
|
|
|
|
}
|
2010-11-11 22:54:52 +00:00
|
|
|
|
2016-03-06 16:45:57 +00:00
|
|
|
optParser :: CmdParamsDesc -> Parser DropKeyOptions
|
|
|
|
optParser desc = DropKeyOptions
|
|
|
|
<$> cmdParams desc
|
|
|
|
<*> parseBatchOption
|
|
|
|
|
|
|
|
seek :: DropKeyOptions -> CommandSeek
|
|
|
|
seek o = do
|
2011-12-09 16:23:45 +00:00
|
|
|
unlessM (Annex.getState Annex.force) $
|
|
|
|
error "dropkey can cause data loss; use --force if you're sure you want to do this"
|
2016-03-06 16:45:57 +00:00
|
|
|
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
|
2016-07-20 19:22:55 +00:00
|
|
|
showStart' "dropkey" key (mkActionItem key)
|
2011-12-09 16:23:45 +00:00
|
|
|
next $ perform key
|
2010-11-02 23:04:24 +00:00
|
|
|
|
2010-12-30 18:19:16 +00:00
|
|
|
perform :: Key -> CommandPerform
|
2016-03-06 16:45:57 +00:00
|
|
|
perform key = ifM (inAnnex key)
|
|
|
|
( lockContentForRemoval key $ \contentlock -> do
|
|
|
|
removeAnnex contentlock
|
|
|
|
next $ cleanup key
|
|
|
|
, next $ return True
|
|
|
|
)
|
2010-11-02 23:04:24 +00:00
|
|
|
|
2010-12-30 18:19:16 +00:00
|
|
|
cleanup :: Key -> CommandCleanup
|
2010-11-02 23:04:24 +00:00
|
|
|
cleanup key = do
|
2011-07-01 19:24:07 +00:00
|
|
|
logStatus key InfoMissing
|
2010-11-02 23:04:24 +00:00
|
|
|
return True
|