Submitter | via Mercurial-devel |
---|---|
Date | July 11, 2017, 4:44 p.m. |
Message ID | <2800fa259f4e1c23dc9c.1499791468@martinvonz.svl.corp.google.com> |
Download | mbox | patch |
Permalink | /patch/22237/ |
State | Accepted |
Headers | show |
Comments
On Tue, 11 Jul 2017 09:44:28 -0700, Martin von Zweigbergk via Mercurial-devel wrote: > # HG changeset patch > # User Martin von Zweigbergk <martinvonz@google.com> > # Date 1499791352 25200 > # Tue Jul 11 09:42:32 2017 -0700 > # Node ID 2800fa259f4e1c23dc9c9605ed02f4d734dd1761 > # Parent 32331f54930cebd2baf953506971953a588491b4 > match: inverse _anypats(), making it _prefix() Queued, thanks. > -def _anypats(kindpats): > +def _prefix(kindpats): > + '''Whether all the patterns match a prefix (i.e. recursively)''' > for kind, pat, source in kindpats: > - if kind in ('glob', 're', 'relglob', 'relre', 'set', 'rootfilesin'): > - return True > + if kind not in ('path', 'relpath'): > + return False So previously, 'subinclude' wasn't taken as anypats, which was wrong. Correct me if I'm wrong.
On Thu, Jul 13, 2017 at 9:04 AM, Yuya Nishihara <yuya@tcha.org> wrote: > On Tue, 11 Jul 2017 09:44:28 -0700, Martin von Zweigbergk via Mercurial-devel wrote: >> # HG changeset patch >> # User Martin von Zweigbergk <martinvonz@google.com> >> # Date 1499791352 25200 >> # Tue Jul 11 09:42:32 2017 -0700 >> # Node ID 2800fa259f4e1c23dc9c9605ed02f4d734dd1761 >> # Parent 32331f54930cebd2baf953506971953a588491b4 >> match: inverse _anypats(), making it _prefix() > > Queued, thanks. > >> -def _anypats(kindpats): >> +def _prefix(kindpats): >> + '''Whether all the patterns match a prefix (i.e. recursively)''' >> for kind, pat, source in kindpats: >> - if kind in ('glob', 're', 'relglob', 'relre', 'set', 'rootfilesin'): >> - return True >> + if kind not in ('path', 'relpath'): >> + return False > > So previously, 'subinclude' wasn't taken as anypats, which was wrong. Correct > me if I'm wrong. Oh, sorry, I didn't even think about that. But yes, you're correct. I didn't mean to sneak in a bug fix in this patch, but now that's it's done, I guess it's not worth splitting it up.
Patch
diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -373,7 +373,7 @@ super(patternmatcher, self).__init__(root, cwd, badfn) self._files = _explicitfiles(kindpats) - self._anypats = _anypats(kindpats) + self._prefix = _prefix(kindpats) self._pats, self.matchfn = _buildmatch(ctx, kindpats, '$', listsubrepos, root) @@ -382,7 +382,7 @@ return set(util.dirs(self._fileset)) | {'.'} def visitdir(self, dir): - if self.prefix() and dir in self._fileset: + if self._prefix and dir in self._fileset: return 'all' return ('.' in self._fileset or dir in self._fileset or @@ -391,7 +391,7 @@ for parentdir in util.finddirs(dir))) def prefix(self): - return not self._anypats + return self._prefix def __repr__(self): return ('<patternmatcher patterns=%r>' % self._pats) @@ -404,7 +404,7 @@ self._pats, self.matchfn = _buildmatch(ctx, kindpats, '(?:/|$)', listsubrepos, root) - self._anypats = _anypats(kindpats) + self._prefix = _prefix(kindpats) roots, dirs = _rootsanddirs(kindpats) # roots are directories which are recursively included. self._roots = set(roots) @@ -412,8 +412,7 @@ self._dirs = set(dirs) def visitdir(self, dir): - if not self._anypats and dir in self._roots: - # The condition above is essentially self.prefix() for includes + if self._prefix and dir in self._roots: return 'all' return ('.' in self._roots or dir in self._roots or @@ -948,10 +947,12 @@ filable = [kp for kp in kindpats if kp[0] not in ('rootfilesin',)] return _roots(filable) -def _anypats(kindpats): +def _prefix(kindpats): + '''Whether all the patterns match a prefix (i.e. recursively)''' for kind, pat, source in kindpats: - if kind in ('glob', 're', 'relglob', 'relre', 'set', 'rootfilesin'): - return True + if kind not in ('path', 'relpath'): + return False + return True _commentre = None