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:
parent
5d75919561
commit
c1dc407941
4 changed files with 12 additions and 5 deletions
|
@ -132,8 +132,7 @@ withAttrFilesInGit :: String -> CommandSeekAttrFiles
|
|||
withAttrFilesInGit attr a params = do
|
||||
repo <- Annex.gitRepo
|
||||
files <- liftIO $ runPreserveOrder (Git.inRepo repo) params
|
||||
files' <- filterFiles files
|
||||
liftM (map a) $ liftIO $ Git.checkAttr repo attr files'
|
||||
liftM (map a) $ liftIO $ Git.checkAttr repo attr files
|
||||
withBackendFilesInGit :: CommandSeekBackendFiles
|
||||
withBackendFilesInGit a params = do
|
||||
repo <- Annex.gitRepo
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -12,6 +12,7 @@ module Utility (
|
|||
readFileStrict,
|
||||
parentDir,
|
||||
absPath,
|
||||
absPathFrom,
|
||||
relPathCwdToDir,
|
||||
relPathDirToDir,
|
||||
boolSystem,
|
||||
|
@ -165,8 +166,14 @@ dirContains a b = a == b || a' == b' || (a'++"/") `isPrefixOf` b'
|
|||
absPath :: FilePath -> IO FilePath
|
||||
absPath file = do
|
||||
cwd <- getCurrentDirectory
|
||||
return $ absPathFrom cwd file
|
||||
|
||||
{- Converts a filename into a normalized, absolute path
|
||||
- from the specified cwd. -}
|
||||
absPathFrom :: FilePath -> FilePath -> FilePath
|
||||
absPathFrom cwd file =
|
||||
case absNormPath cwd file of
|
||||
Just f -> return f
|
||||
Just f -> f
|
||||
Nothing -> error $ "unable to normalize " ++ file
|
||||
|
||||
{- Constructs a relative path from the CWD to a directory.
|
||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -12,6 +12,7 @@ git-annex (0.20110321) UNRELEASED; urgency=low
|
|||
* fsck: In fast mode, avoid checking checksums.
|
||||
* unused: In fast mode, just show all existing temp files as unused,
|
||||
and avoid expensive scan for other unused content.
|
||||
* Fix space leak in fsck and drop commands.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Tue, 22 Mar 2011 16:52:00 -0400
|
||||
|
||||
|
|
Loading…
Reference in a new issue