more completely solve catKey memory leak
Done using a mode witness, which ensures it's fixed everywhere. Fixing catFileKey was a bear, because git cat-file does not provide a nice way to query for the mode of a file and there is no other efficient way to do it. Oh, for libgit2.. Note that I am looking at tree objects from HEAD, rather than the index. Because I cat-file cannot show a tree object for the index. So this fix is technically incomplete. The only cases where it matters are: 1. A new large file has been directly staged in git, but not committed. 2. A file that was committed to HEAD as a symlink has been staged directly in the index. This could be fixed a lot better using libgit2.
This commit is contained in:
parent
f26c996dc6
commit
006cf7976f
10 changed files with 71 additions and 27 deletions
|
@ -78,7 +78,7 @@ perform = do
|
|||
return Nothing
|
||||
| otherwise ->
|
||||
maybe noop (fromdirect f)
|
||||
=<< catKey sha
|
||||
=<< catKey sha mode
|
||||
_ -> noop
|
||||
go _ = noop
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import qualified Git.Ref
|
|||
import Annex.CatFile
|
||||
import Annex.Content.Direct
|
||||
import Git.Sha
|
||||
import Git.FileMode
|
||||
|
||||
def :: [Command]
|
||||
def = [command "pre-commit" paramPaths seek SectionPlumbing
|
||||
|
@ -48,8 +47,8 @@ startDirect _ = next $ do
|
|||
withkey (Git.DiffTree.srcsha diff) (Git.DiffTree.srcmode diff) removeAssociatedFile
|
||||
withkey (Git.DiffTree.dstsha diff) (Git.DiffTree.dstmode diff) addAssociatedFile
|
||||
where
|
||||
withkey sha mode a = when (sha /= nullSha && isSymLink mode) $ do
|
||||
k <- catKey sha
|
||||
withkey sha mode a = when (sha /= nullSha) $ do
|
||||
k <- catKey sha mode
|
||||
case k of
|
||||
Nothing -> noop
|
||||
Just key -> void $ a key (Git.DiffTree.file diff)
|
||||
|
|
|
@ -29,6 +29,7 @@ import qualified Remote.Git
|
|||
import Types.Key
|
||||
import Config
|
||||
import Annex.ReplaceFile
|
||||
import Git.FileMode
|
||||
|
||||
import Data.Hash.MD5
|
||||
|
||||
|
@ -321,7 +322,7 @@ resolveMerge' u
|
|||
case msha of
|
||||
Nothing -> a Nothing
|
||||
Just sha -> do
|
||||
key <- catKey sha
|
||||
key <- catKey sha symLinkMode
|
||||
maybe (return False) (a . Just) key
|
||||
|
||||
{- The filename to use when resolving a conflicted merge of a file,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue