minor
This commit is contained in:
parent
435ea52f3c
commit
1ab2ad86c7
3 changed files with 87 additions and 67 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue