localrepo: fix variable binding in handling of old filters
The lambda was referencing oldfn in outer scope without binding the current
value. If oldfn function were reassigned before use, wrong filters could be
used.
Fixed by having oldfn as named parameter default value of the lambda.
--- a/mercurial/localrepo.py Sun Oct 13 14:40:00 2019 +0200
+++ b/mercurial/localrepo.py Sun Oct 13 02:05:19 2019 +0200
@@ -1907,7 +1907,7 @@
# Wrap old filters not supporting keyword arguments
if not pycompat.getargspec(fn)[2]:
oldfn = fn
- fn = lambda s, c, **kwargs: oldfn(s, c)
+ fn = lambda s, c, oldfn=oldfn, **kwargs: oldfn(s, c)
fn.__name__ = 'compat-' + oldfn.__name__
l.append((mf, fn, params))
self._filterpats[filter] = l