From 3cab695e89afa40bba04e5b0e2de45bda1501e6c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 21 Nov 2013 20:23:07 -0400 Subject: make sure index file is writable in pre-repair --- Git/Repair.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Git/Repair.hs b/Git/Repair.hs index 2fe9f38..dafdd3f 100644 --- a/Git/Repair.hs +++ b/Git/Repair.hs @@ -15,7 +15,6 @@ module Git.Repair ( removeTrackingBranches, checkIndex, missingIndex, - nukeIndex, emptyGoodCommits, ) where @@ -368,7 +367,7 @@ rewriteIndex missing r | otherwise = do (bad, good, cleanup) <- partitionIndex missing r unless (null bad) $ do - nukeIndex r + nukeFile (indexFile r) UpdateIndex.streamUpdateIndex r =<< (catMaybes <$> mapM reinject good) void cleanup @@ -380,8 +379,8 @@ rewriteIndex missing r UpdateIndex.stageFile sha blobtype file r reinject _ = return Nothing -nukeIndex :: Repo -> IO () -nukeIndex r = nukeFile (localGitDir r "index") +indexFile :: Repo -> FilePath +indexFile r = localGitDir r "index" newtype GoodCommits = GoodCommits (S.Set Sha) @@ -423,6 +422,9 @@ preRepair g = do nukeFile headfile writeFile headfile "ref: refs/heads/master" explodePackedRefsFile g + unless (repoIsLocalBare g) $ do + let f = indexFile g + void $ tryIO $ allowWrite f where headfile = localGitDir g "HEAD" validhead s = "ref: refs/" `isPrefixOf` s || isJust (extractSha s) @@ -517,7 +519,7 @@ runRepair' fsckresult forced referencerepo g = do return (True, stillmissing, modifiedbranches) corruptedindex = do - nukeIndex g + nukeFile (indexFile g) -- The corrupted index can prevent fsck from finding other -- problems, so re-run repair. fsckresult' <- findBroken False g -- cgit v1.2.3