101 listsubrepos=False, badfn=None): |
101 listsubrepos=False, badfn=None): |
102 matchers = [] |
102 matchers = [] |
103 fms, kindpats = _expandsets(root, cwd, kindpats, ctx=ctx, |
103 fms, kindpats = _expandsets(root, cwd, kindpats, ctx=ctx, |
104 listsubrepos=listsubrepos, badfn=badfn) |
104 listsubrepos=listsubrepos, badfn=badfn) |
105 if kindpats: |
105 if kindpats: |
106 m = matchercls(root, cwd, kindpats, listsubrepos=listsubrepos, |
106 m = matchercls(root, cwd, kindpats, badfn=badfn) |
107 badfn=badfn) |
|
108 matchers.append(m) |
107 matchers.append(m) |
109 if fms: |
108 if fms: |
110 matchers.extend(fms) |
109 matchers.extend(fms) |
111 if not matchers: |
110 if not matchers: |
112 return nevermatcher(root, cwd, badfn=badfn) |
111 return nevermatcher(root, cwd, badfn=badfn) |
435 or pycompat.byterepr(self.matchfn)) |
434 or pycompat.byterepr(self.matchfn)) |
436 return '<predicatenmatcher pred=%s>' % s |
435 return '<predicatenmatcher pred=%s>' % s |
437 |
436 |
438 class patternmatcher(basematcher): |
437 class patternmatcher(basematcher): |
439 |
438 |
440 def __init__(self, root, cwd, kindpats, listsubrepos=False, badfn=None): |
439 def __init__(self, root, cwd, kindpats, badfn=None): |
441 super(patternmatcher, self).__init__(root, cwd, badfn) |
440 super(patternmatcher, self).__init__(root, cwd, badfn) |
442 |
441 |
443 self._files = _explicitfiles(kindpats) |
442 self._files = _explicitfiles(kindpats) |
444 self._prefix = _prefix(kindpats) |
443 self._prefix = _prefix(kindpats) |
445 self._pats, self.matchfn = _buildmatch(kindpats, '$', listsubrepos, |
444 self._pats, self.matchfn = _buildmatch(kindpats, '$', root) |
446 root) |
|
447 |
445 |
448 @propertycache |
446 @propertycache |
449 def _dirs(self): |
447 def _dirs(self): |
450 return set(util.dirs(self._fileset)) | {'.'} |
448 return set(util.dirs(self._fileset)) | {'.'} |
451 |
449 |
514 def get(self, path): |
512 def get(self, path): |
515 return self._dirs.get(path, set()) |
513 return self._dirs.get(path, set()) |
516 |
514 |
517 class includematcher(basematcher): |
515 class includematcher(basematcher): |
518 |
516 |
519 def __init__(self, root, cwd, kindpats, listsubrepos=False, badfn=None): |
517 def __init__(self, root, cwd, kindpats, badfn=None): |
520 super(includematcher, self).__init__(root, cwd, badfn) |
518 super(includematcher, self).__init__(root, cwd, badfn) |
521 |
519 |
522 self._pats, self.matchfn = _buildmatch(kindpats, '(?:/|$)', |
520 self._pats, self.matchfn = _buildmatch(kindpats, '(?:/|$)', root) |
523 listsubrepos, root) |
|
524 self._prefix = _prefix(kindpats) |
521 self._prefix = _prefix(kindpats) |
525 roots, dirs, parents = _rootsdirsandparents(kindpats) |
522 roots, dirs, parents = _rootsdirsandparents(kindpats) |
526 # roots are directories which are recursively included. |
523 # roots are directories which are recursively included. |
527 self._roots = set(roots) |
524 self._roots = set(roots) |
528 # dirs are directories which are non-recursively included. |
525 # dirs are directories which are non-recursively included. |
1103 return '.*' + pat |
1100 return '.*' + pat |
1104 if kind in ('glob', 'rootglob'): |
1101 if kind in ('glob', 'rootglob'): |
1105 return _globre(pat) + globsuffix |
1102 return _globre(pat) + globsuffix |
1106 raise error.ProgrammingError('not a regex pattern: %s:%s' % (kind, pat)) |
1103 raise error.ProgrammingError('not a regex pattern: %s:%s' % (kind, pat)) |
1107 |
1104 |
1108 def _buildmatch(kindpats, globsuffix, listsubrepos, root): |
1105 def _buildmatch(kindpats, globsuffix, root): |
1109 '''Return regexp string and a matcher function for kindpats. |
1106 '''Return regexp string and a matcher function for kindpats. |
1110 globsuffix is appended to the regexp of globs.''' |
1107 globsuffix is appended to the regexp of globs.''' |
1111 matchfuncs = [] |
1108 matchfuncs = [] |
1112 |
1109 |
1113 subincludes, kindpats = _expandsubinclude(kindpats, root) |
1110 subincludes, kindpats = _expandsubinclude(kindpats, root) |