
Wrote nice pure transition calculator, and ugly code to stage its results into the git-annex branch. Also had to split up several Log modules that Annex.Branch needed to use, but that themselves used Annex.Branch. The transition calculator is limited to looking at and changing one file at a time. While this made the implementation relatively easy, it precludes transitions that do stuff like deleting old url log files for keys that are being removed because they are no longer present anywhere.
52 lines
1.4 KiB
Haskell
52 lines
1.4 KiB
Haskell
{- git-annex command
|
|
-
|
|
- Copyright 2013 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
module Command.Forget where
|
|
|
|
import Common.Annex
|
|
import Command
|
|
import qualified Annex.Branch as Branch
|
|
import Logs.Transitions
|
|
import qualified Annex
|
|
import qualified Option
|
|
|
|
import Data.Time.Clock.POSIX
|
|
|
|
def :: [Command]
|
|
def = [withOptions forgetOptions $ command "forget" paramNothing seek
|
|
SectionMaintenance "prune git-annex branch history"]
|
|
|
|
forgetOptions :: [Option]
|
|
forgetOptions = [dropDeadOption]
|
|
|
|
dropDeadOption :: Option
|
|
dropDeadOption = Option.flag [] "drop-dead" "drop references to dead repositories"
|
|
|
|
seek :: [CommandSeek]
|
|
seek = [withFlag dropDeadOption $ \dropdead ->
|
|
withNothing $ start dropdead]
|
|
|
|
start :: Bool -> CommandStart
|
|
start dropdead = do
|
|
showStart "forget" "git-annex"
|
|
now <- liftIO getPOSIXTime
|
|
let basets = addTransition now ForgetGitHistory noTransitions
|
|
let ts = if dropdead
|
|
then addTransition now ForgetDeadRemotes basets
|
|
else basets
|
|
next $ perform ts =<< Annex.getState Annex.force
|
|
|
|
perform :: Transitions -> Bool -> CommandPerform
|
|
perform ts True = do
|
|
recordTransitions Branch.change ts
|
|
-- get branch committed before contining with the transition
|
|
Branch.update
|
|
void $ Branch.performTransitions ts True
|
|
next $ return True
|
|
perform _ False = do
|
|
showLongNote "To forget git-annex branch history, you must specify --force. This deletes metadata!"
|
|
stop
|