git-annex/Command/DropKey.hs
Joey Hess aebcc395ff use types to enforce that removeAnnex can only be called inside lockContent
This fixed one bug where it needed to be and wasn't (in Assistant.Unused).
And also found one place where lockContent was used unnecessarily (by
drop --from remote).

A few other places like uninit probably don't really need to lockContent,
but it doesn't hurt to do call it anyway.

This commit was sponsored by David Wagner.
2014-08-20 20:13:47 -04:00

38 lines
923 B
Haskell

{- git-annex command
-
- Copyright 2010 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.DropKey where
import Common.Annex
import Command
import qualified Annex
import Logs.Location
import Annex.Content
def :: [Command]
def = [noCommit $ command "dropkey" (paramRepeating paramKey) seek
SectionPlumbing "drops annexed content for specified keys"]
seek :: CommandSeek
seek = withKeys start
start :: Key -> CommandStart
start key = stopUnless (inAnnex key) $ do
unlessM (Annex.getState Annex.force) $
error "dropkey can cause data loss; use --force if you're sure you want to do this"
showStart' "dropkey" key Nothing
next $ perform key
perform :: Key -> CommandPerform
perform key = lockContent key $ \contentlock -> do
removeAnnex contentlock
next $ cleanup key
cleanup :: Key -> CommandCleanup
cleanup key = do
logStatus key InfoMissing
return True