largefiles: use wrappedfunction() for match() override in overridecopy()
authorMartin von Zweigbergk <martinvonz@google.com>
Tue, 05 Feb 2019 14:42:13 -0800
changeset 41580 9f11759fc5f5
parent 41579 028bb170e74d
child 41581 d9fd2f74d683
largefiles: use wrappedfunction() for match() override in overridecopy() This reduced the time that the override is in place, but I that it's correct this way (only for the duration of the orig() call). Differential Revision: https://phab.mercurial-scm.org/D5867
hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py	Tue Feb 05 14:29:37 2019 -0800
+++ b/hgext/largefiles/overrides.py	Tue Feb 05 14:42:13 2019 -0800
@@ -652,7 +652,7 @@
         wlock = repo.wlock()
 
         manifest = repo[None].manifest()
-        def overridematch(ctx, pats=(), opts=None, globbed=False,
+        def overridematch(orig, ctx, pats=(), opts=None, globbed=False,
                 default='relpath', badfn=None):
             if opts is None:
                 opts = {}
@@ -664,7 +664,7 @@
                     newpats.append(pat.replace(lfutil.shortname, ''))
                 else:
                     newpats.append(pat)
-            match = oldmatch(ctx, newpats, opts, globbed, default, badfn=badfn)
+            match = orig(ctx, newpats, opts, globbed, default, badfn=badfn)
             m = copy.copy(match)
             lfile = lambda f: lfutil.standin(f) in manifest
             m._files = [lfutil.standin(f) for f in m._files if lfile(f)]
@@ -678,7 +678,6 @@
                         None)
             m.matchfn = matchfn
             return m
-        oldmatch = installmatchfn(overridematch)
         listpats = []
         for pat in pats:
             if matchmod.patkind(pat) is not None:
@@ -696,7 +695,8 @@
                                   _('destination largefile already exists'))
             copiedfiles.append((src, dest))
             orig(src, dest, *args, **kwargs)
-        with extensions.wrappedfunction(util, 'copyfile', overridecopyfile):
+        with extensions.wrappedfunction(util, 'copyfile', overridecopyfile), \
+             extensions.wrappedfunction(scmutil, 'match', overridematch):
             result += orig(ui, repo, listpats, opts, rename)
 
         lfdirstate = lfutil.openlfdirstate(ui, repo)
@@ -727,7 +727,6 @@
         else:
             nolfiles = True
     finally:
-        restorematchfn()
         wlock.release()
 
     if nolfiles and nonormalfiles: