aboutsummaryrefslogtreecommitdiff
path: root/Git/Fsck.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-10-22 14:39:45 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-10-22 14:49:41 -0400
commitb9186e3c2097cf8c94403b38c9dbe6ed382d82b0 (patch)
tree77fe35280a9c999f2bb74939f6ef334ab64a9f48 /Git/Fsck.hs
parent708745e1e23725f0e90a4fa4f01b863edbf844d4 (diff)
make git fsck batch-capable
Diffstat (limited to 'Git/Fsck.hs')
-rw-r--r--Git/Fsck.hs17
1 files changed, 13 insertions, 4 deletions
diff --git a/Git/Fsck.hs b/Git/Fsck.hs
index 5fdc73385..3872c6b04 100644
--- a/Git/Fsck.hs
+++ b/Git/Fsck.hs
@@ -16,6 +16,7 @@ import Git
import Git.Command
import Git.Sha
import Git.CatFile
+import Utility.Batch
import qualified Data.Set as S
@@ -31,17 +32,25 @@ type MissingObjects = S.Set Sha
- to be a git sha. Not all such shas are of broken objects, so ask git
- to try to cat the object, and see if it fails.
-}
-findBroken :: Repo -> IO (Maybe MissingObjects)
-findBroken r = do
- (output, fsckok) <- processTranscript "git" (toCommand $ fsckParams r) Nothing
+findBroken :: Bool -> Repo -> IO (Maybe MissingObjects)
+findBroken batchmode r = do
+ (output, fsckok) <- processTranscript command' (toCommand params') Nothing
let objs = parseFsckOutput output
badobjs <- findMissing objs r
if S.null badobjs && not fsckok
then return Nothing
else return $ Just badobjs
+ where
+ (command, params) = ("git", fsckParams r)
+ (command', params')
+ | batchmode = toBatchCommand (command, params)
+ | otherwise = (command, params)
{- Finds objects that are missing from the git repsitory, or are corrupt.
- - Note that catting a corrupt object will cause cat-file to crash. -}
+ -
+ - Note that catting a corrupt object will cause cat-file to crash;
+ - this is detected and it's restarted.
+ -}
findMissing :: [Sha] -> Repo -> IO MissingObjects
findMissing objs r = go objs [] =<< start
where