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.
--- a/hgext/largefiles/lfutil.py Sat Aug 08 14:50:03 2015 -0700
+++ b/hgext/largefiles/lfutil.py Wed Aug 12 12:26:39 2015 -0400
@@ -247,6 +247,8 @@
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
--- a/tests/test-histedit-fold.t Sat Aug 08 14:50:03 2015 -0700
+++ b/tests/test-histedit-fold.t Wed Aug 12 12:26:39 2015 -0400
@@ -505,4 +505,8 @@
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 ..