diff options
author | Joey Hess <joey@kitenet.net> | 2013-10-23 13:13:40 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-10-23 13:19:37 -0400 |
commit | 9ed8dd6be036e79e3ec7f5781b9f7b8864e1bc0e (patch) | |
tree | ba2d9f0ea9fe3eed88ac9ab0aa5e2133e14d13fa /Command/Repair.hs | |
parent | b77b0848ee28093b63e3ab0d1ea494e430ffe58b (diff) |
minor
Diffstat (limited to 'Command/Repair.hs')
-rw-r--r-- | Command/Repair.hs | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/Command/Repair.hs b/Command/Repair.hs index b95934268..8808ef9de 100644 --- a/Command/Repair.hs +++ b/Command/Repair.hs @@ -13,6 +13,7 @@ import qualified Annex import qualified Git.Repair import qualified Annex.Branch import Git.Fsck (MissingObjects) +import Git.Types def :: [Command] def = [noCommit $ dontCheck repoExists $ @@ -26,9 +27,10 @@ start = next $ next $ runRepair =<< Annex.getState Annex.force runRepair :: Bool -> Annex Bool runRepair forced = do - (ok, stillmissing) <- inRepo $ Git.Repair.runRepair forced + (ok, stillmissing, modifiedbranches) <- inRepo $ + Git.Repair.runRepair forced when ok $ - repairAnnexBranch stillmissing + repairAnnexBranch stillmissing modifiedbranches return ok {- After git repository repair, the .git/annex/index file could @@ -36,23 +38,31 @@ runRepair forced = do - its own. Since this index file is not used to stage things - for long durations of time, it can safely be deleted if it is broken. - - - Otherwise, commit the index file to the git-annex branch. + - Otherwise, if the git-annex branch was modified by the repair, + - commit the index file to the git-annex branch. - This way, if the git-annex branch got rewound to an old version by - the repository repair, or was completely deleted, this will get it back - to a good state. Note that in the unlikely case where the git-annex - - branch is ok, and has new changes from elsewhere not yet reflected in - - the index, this does properly merge those into the index before - - committing. + - branch was rewound to a state that, had new changes from elsewhere not + - yet reflected in the index, this does properly merge those into the + - index before committing. -} -repairAnnexBranch :: MissingObjects -> Annex () -repairAnnexBranch missing = ifM okindex - ( do - Annex.Branch.forceCommit "committing index after git repository repair" - liftIO $ putStrLn "Successfully recovered the git-annex branch using .git/annex/index" - , do - inRepo $ nukeFile . gitAnnexIndex - liftIO $ putStrLn "Had to delete the .git/annex/index file as it was corrupt. It would be a very good idea to run: git annex fsck --fast" - ) +repairAnnexBranch :: MissingObjects -> [Branch] -> Annex () +repairAnnexBranch missing modifiedbranches + | Annex.Branch.fullname `elem` modifiedbranches = ifM okindex + ( commitindex + , do + nukeindex + liftIO $ putStrLn "Had to delete the .git/annex/index file as it was corrupt. Since the git-annex branch is not up-to-date anymore. It would be a very good idea to run: git annex fsck --fast" + ) + | otherwise = ifM okindex + ( noop + , nukeindex + ) where okindex = Annex.Branch.withIndex $ inRepo $ Git.Repair.checkIndex missing + commitindex = do + Annex.Branch.forceCommit "committing index after git repository repair" + liftIO $ putStrLn "Successfully recovered the git-annex branch using .git/annex/index" + nukeindex = inRepo $ nukeFile . gitAnnexIndex |