# HG changeset patch # User Martin von Zweigbergk # Date 1549405511 28800 # Node ID d9fd2f74d683d29d65fd52ce681e1bad724138d7 # Parent 9f11759fc5f5dc954feb6ec9c31f2d45eb4e50c2 largefiles: use wrappedfunction() for "normal files match" in overridecopy() Differential Revision: https://phab.mercurial-scm.org/D5868 diff -r 9f11759fc5f5 -r d9fd2f74d683 hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Tue Feb 05 14:42:13 2019 -0800 +++ b/hgext/largefiles/overrides.py Tue Feb 05 14:25:11 2019 -0800 @@ -78,16 +78,6 @@ m.matchfn = lambda f: notlfile(f) and origmatchfn(f) return m -def installnormalfilesmatchfn(manifest): - '''installmatchfn with a matchfn that ignores all largefiles''' - def overridematch(ctx, pats=(), opts=None, globbed=False, - default='relpath', badfn=None): - if opts is None: - opts = {} - match = oldmatch(ctx, pats, opts, globbed, default, badfn=badfn) - return composenormalfilematcher(match, manifest) - oldmatch = installmatchfn(overridematch) - def installmatchfn(f): '''monkey patch the scmutil module with a custom match function. Warning: it is monkey patching the _module_ on runtime! Not thread safe!''' @@ -616,17 +606,22 @@ # match largefiles and run it again. nonormalfiles = False nolfiles = False - installnormalfilesmatchfn(repo[None].manifest()) - try: - result = orig(ui, repo, pats, opts, rename) - except error.Abort as e: - if pycompat.bytestr(e) != _('no files to copy'): - raise e - else: - nonormalfiles = True - result = 0 - finally: - restorematchfn() + manifest = repo[None].manifest() + def normalfilesmatchfn(orig, ctx, pats=(), opts=None, globbed=False, + default='relpath', badfn=None): + if opts is None: + opts = {} + match = orig(ctx, pats, opts, globbed, default, badfn=badfn) + return composenormalfilematcher(match, manifest) + with extensions.wrappedfunction(scmutil, 'match', normalfilesmatchfn): + try: + result = orig(ui, repo, pats, opts, rename) + except error.Abort as e: + if pycompat.bytestr(e) != _('no files to copy'): + raise e + else: + nonormalfiles = True + result = 0 # The first rename can cause our current working directory to be removed. # In that case there is nothing left to copy/rename so just quit.