Fix space leak in fsck and drop commands.

The space leak was somehow caused by this line:

	absfiles <- mapM absPath files

I confess, I don't quite understand why this caused bad buffering,
but apparently the whole pipeline from git-ls-files backed up at that
point.

Happily, rewriting the code to only get the cwd once and use a pure
function to calculate absfiles clears it up, and should be a little more
efficient in syscalls too.
This commit is contained in:
Joey Hess 2011-03-22 20:31:22 -04:00
parent 5d75919561
commit c1dc407941
4 changed files with 12 additions and 5 deletions

View file

@ -449,9 +449,9 @@ checkAttr repo attr files = do
-- top of the repo). But we're passed files relative to the current
-- directory. Convert to absolute, and then convert the filenames
-- in its output back to relative.
absfiles <- mapM absPath files
(_, s) <- pipeBoth "git" (toCommand params) $ join "\0" absfiles
cwd <- getCurrentDirectory
let absfiles = map (absPathFrom cwd) files
(_, s) <- pipeBoth "git" (toCommand params) $ join "\0" absfiles
return $ map (topair $ cwd++"/") $ lines s
where
params = gitCommandLine repo [Param "check-attr", Param attr, Params "-z --stdin"]