localrepo: fix variable binding in handling of old filters
authorMads Kiilerich <mads@kiilerich.com>
Sun, 13 Oct 2019 02:05:19 +0200
changeset 43202 8864aa96f1f6
parent 43201 6ceb3721e203
child 43203 d38f9117ee15
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.
mercurial/localrepo.py
--- 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