339 class patternmatcher(basematcher): |
339 class patternmatcher(basematcher): |
340 |
340 |
341 def __init__(self, root, cwd, normalize, patterns, default='glob', |
341 def __init__(self, root, cwd, normalize, patterns, default='glob', |
342 auditor=None, ctx=None, listsubrepos=False, warn=None, |
342 auditor=None, ctx=None, listsubrepos=False, warn=None, |
343 badfn=None): |
343 badfn=None): |
344 super(patternmatcher, self).__init__(root, cwd, badfn, |
344 super(patternmatcher, self).__init__(root, cwd, badfn) |
345 relativeuipath=bool(patterns)) |
345 |
346 |
346 kindpats = normalize(patterns, default, root, cwd, auditor, warn) |
347 self._anypats = False |
347 if not _kindpatsalwaysmatch(kindpats): |
348 self._always = False |
348 self._files = _explicitfiles(kindpats) |
349 self.patternspat = None |
349 self._anypats = _anypats(kindpats) |
350 |
350 self.patternspat, pm = _buildmatch(ctx, kindpats, '$', |
351 matchfns = [] |
351 listsubrepos, root) |
352 if patterns: |
352 self._always = False |
353 kindpats = normalize(patterns, default, root, cwd, auditor, warn) |
353 self.matchfn = pm |
354 if not _kindpatsalwaysmatch(kindpats): |
354 else: |
355 self._files = _explicitfiles(kindpats) |
355 self._anypats = False |
356 self._anypats = self._anypats or _anypats(kindpats) |
356 self.patternspat = None |
357 self.patternspat, pm = _buildmatch(ctx, kindpats, '$', |
|
358 listsubrepos, root) |
|
359 matchfns.append(pm) |
|
360 |
|
361 if not matchfns: |
|
362 m = util.always |
|
363 self._always = True |
357 self._always = True |
364 elif len(matchfns) == 1: |
358 self.matchfn = lambda f: True |
365 m = matchfns[0] |
|
366 else: |
|
367 def m(f): |
|
368 for matchfn in matchfns: |
|
369 if not matchfn(f): |
|
370 return False |
|
371 return True |
|
372 |
|
373 self.matchfn = m |
|
374 |
359 |
375 @propertycache |
360 @propertycache |
376 def _dirs(self): |
361 def _dirs(self): |
377 return set(util.dirs(self._fileset)) | {'.'} |
362 return set(util.dirs(self._fileset)) | {'.'} |
378 |
363 |