[PATCH 17 of 17] match: remove special-casing of always-matching patterns in patternmatcher
Martin von Zweigbergk
martinvonz at google.com
Thu May 25 14:24:58 EDT 2017
# HG changeset patch
# User Martin von Zweigbergk <martinvonz at google.com>
# Date 1495224975 25200
# Fri May 19 13:16:15 2017 -0700
# Node ID 5a2d63a7aee98d9ac6f216eca60e4017a3d38a07
# Parent ec486afeb2c980d6a5959a27159fc8e629f33dd2
match: remove special-casing of always-matching patterns in patternmatcher
Note that we need to teach alwaysmatcher to use relative paths now in
cases like "hg files .." from inside mercurial/, because while it
still matches everything, paths should be printed relative to the
working directory.
diff --git a/mercurial/match.py b/mercurial/match.py
--- a/mercurial/match.py
+++ b/mercurial/match.py
@@ -146,8 +146,11 @@
m = exactmatcher(root, cwd, patterns, badfn)
elif patterns:
kindpats = normalize(patterns, default, root, cwd, auditor, warn)
- m = patternmatcher(root, cwd, kindpats, ctx=ctx,
- listsubrepos=listsubrepos, badfn=badfn)
+ if _kindpatsalwaysmatch(kindpats):
+ m = alwaysmatcher(root, cwd, badfn, relativeuipath=True)
+ else:
+ m = patternmatcher(root, cwd, kindpats, ctx=ctx,
+ listsubrepos=listsubrepos, badfn=badfn)
else:
# It's a little strange that no patterns means to match everything.
# Consider changing this to match nothing (probably adding a
@@ -318,11 +321,11 @@
class alwaysmatcher(basematcher):
- def __init__(self, root, cwd, badfn=None):
+ def __init__(self, root, cwd, badfn=None, relativeuipath=False):
super(alwaysmatcher, self).__init__(root, cwd, badfn)
-
- def uipath(self, f):
- return self.abs(f)
+ self.uipath = self.abs
+ if relativeuipath:
+ self.uipath = self.rel
def always(self):
return True
@@ -342,26 +345,17 @@
badfn=None):
super(patternmatcher, self).__init__(root, cwd, badfn)
- if not _kindpatsalwaysmatch(kindpats):
- self._files = _explicitfiles(kindpats)
- self._anypats = _anypats(kindpats)
- self.patternspat, pm = _buildmatch(ctx, kindpats, '$',
- listsubrepos, root)
- self._always = False
- self.matchfn = pm
- else:
- self._anypats = False
- self.patternspat = None
- self._always = True
- self.matchfn = lambda f: True
+ self._files = _explicitfiles(kindpats)
+ self._anypats = _anypats(kindpats)
+ self.patternspat, pm = _buildmatch(ctx, kindpats, '$', listsubrepos,
+ root)
+ self.matchfn = pm
@propertycache
def _dirs(self):
return set(util.dirs(self._fileset)) | {'.'}
def visitdir(self, dir):
- if self.always():
- return 'all'
if self.prefix() and dir in self._fileset:
return 'all'
return ('.' in self._fileset or
@@ -373,9 +367,6 @@
def anypats(self):
return self._anypats
- def always(self):
- return self._always
-
def __repr__(self):
return ('<patternmatcher patterns=%r>' % self.patternspat)
More information about the Mercurial-devel
mailing list