Mercurial > hg
changeset 41581:d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Differential Revision: https://phab.mercurial-scm.org/D5868
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 05 Feb 2019 14:25:11 -0800 |
parents | 9f11759fc5f5 |
children | 7b2580e0dbbd |
files | hgext/largefiles/overrides.py |
diffstat | 1 files changed, 16 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- 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.