# HG changeset patch # User Matt Harbison # Date 2015-08-12 16:26:39 # Node ID ba80894330903ac6101b0f0d5e1acd2170fb4ffc # Parent d815a5997576f0ef730e1df2d43c68970643c46b largefiles: ensure lfutil.getstandinmatcher() only matches standins Previously, simply having the largefiles extension loaded without any largefiles added would crash when amending with -I. The problem was with no files in the matcher, the pattern list of files joined with 'standindir' was empty, and scmutil.match() would match everything. In lfutil.composestandinmatcher(), the match function is used to test if the file is a standin, and after getting a false positive, proceeds to call lfutil.splitstandin(). This returns None because it isn't a standin, which blows up when passed to rmatcher.matchfn(). Manually overriding _always in getstandinmatcher() probably isn't necessary anymore, but we leave well enough alone on stable. This regressed in ab618e52788a. diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -247,6 +247,8 @@ def getstandinmatcher(repo, rmatcher=Non if rmatcher and not rmatcher.always(): pats = [os.path.join(standindir, pat) for pat in rmatcher.files()] + if not pats: + pats = [standindir] match = scmutil.match(repo[None], pats, badfn=badfn) # if pats is empty, it would incorrectly always match, so clear _always match._always = False diff --git a/tests/test-histedit-fold.t b/tests/test-histedit-fold.t --- a/tests/test-histedit-fold.t +++ b/tests/test-histedit-fold.t @@ -505,4 +505,8 @@ into the hook command. 1:9599899f62c0 a 0:79b99e9c8e49 b + $ echo "foo" > amended.txt + $ hg add amended.txt + $ hg ci -q --config extensions.largefiles= --amend -I amended.txt + $ cd ..