D5868: largefiles: use wrappedfunction() for "normal files match" in overridecopy()
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Tue Feb 5 23:55:11 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5868
AFFECTED FILES
hgext/largefiles/overrides.py
CHANGE DETAILS
diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -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.
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list