Mercurial > hg
comparison mercurial/match.py @ 32504:2ba4d3b74ba8
match: remove support for includes from patternmatcher
Includes (and excludes) are now delegated to the includematcher.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 19 May 2017 11:44:05 -0700 |
parents | 361808a2b0b8 |
children | 37ea47a50875 |
comparison
equal
deleted
inserted
replaced
32503:361808a2b0b8 | 32504:2ba4d3b74ba8 |
---|---|
143 return kindpats | 143 return kindpats |
144 | 144 |
145 if exact: | 145 if exact: |
146 m = exactmatcher(root, cwd, patterns, badfn) | 146 m = exactmatcher(root, cwd, patterns, badfn) |
147 else: | 147 else: |
148 m = patternmatcher(root, cwd, normalize, patterns, include=None, | 148 m = patternmatcher(root, cwd, normalize, patterns, default=default, |
149 default=default, auditor=auditor, ctx=ctx, | 149 auditor=auditor, ctx=ctx, listsubrepos=listsubrepos, |
150 listsubrepos=listsubrepos, warn=warn, badfn=badfn) | 150 warn=warn, badfn=badfn) |
151 if include: | 151 if include: |
152 im = includematcher(root, cwd, normalize, include, auditor=auditor, | 152 im = includematcher(root, cwd, normalize, include, auditor=auditor, |
153 ctx=ctx, listsubrepos=listsubrepos, warn=warn, | 153 ctx=ctx, listsubrepos=listsubrepos, warn=warn, |
154 badfn=None) | 154 badfn=None) |
155 m = intersectmatchers(m, im) | 155 m = intersectmatchers(m, im) |
311 def prefix(self): | 311 def prefix(self): |
312 return not self.always() and not self.isexact() and not self.anypats() | 312 return not self.always() and not self.isexact() and not self.anypats() |
313 | 313 |
314 class patternmatcher(basematcher): | 314 class patternmatcher(basematcher): |
315 | 315 |
316 def __init__(self, root, cwd, normalize, patterns, include=None, | 316 def __init__(self, root, cwd, normalize, patterns, default='glob', |
317 default='glob', auditor=None, ctx=None, | 317 auditor=None, ctx=None, listsubrepos=False, warn=None, |
318 listsubrepos=False, warn=None, badfn=None): | 318 badfn=None): |
319 super(patternmatcher, self).__init__(root, cwd, badfn, | 319 super(patternmatcher, self).__init__(root, cwd, badfn, |
320 relativeuipath=bool(include or | 320 relativeuipath=bool(patterns)) |
321 patterns)) | 321 |
322 if include is None: | 322 self._anypats = False |
323 include = [] | |
324 | |
325 self._anypats = bool(include) | |
326 self._anyincludepats = False | |
327 self._always = False | 323 self._always = False |
328 self.patternspat = None | 324 self.patternspat = None |
329 self.includepat = None | |
330 | |
331 # roots are directories which are recursively included. | |
332 self._includeroots = set() | |
333 # dirs are directories which are non-recursively included. | |
334 self._includedirs = set() | |
335 | 325 |
336 matchfns = [] | 326 matchfns = [] |
337 if include: | |
338 kindpats = normalize(include, 'glob', root, cwd, auditor, warn) | |
339 self.includepat, im = _buildmatch(ctx, kindpats, '(?:/|$)', | |
340 listsubrepos, root) | |
341 self._anyincludepats = _anypats(kindpats) | |
342 roots, dirs = _rootsanddirs(kindpats) | |
343 self._includeroots.update(roots) | |
344 self._includedirs.update(dirs) | |
345 matchfns.append(im) | |
346 if patterns: | 327 if patterns: |
347 kindpats = normalize(patterns, default, root, cwd, auditor, warn) | 328 kindpats = normalize(patterns, default, root, cwd, auditor, warn) |
348 if not _kindpatsalwaysmatch(kindpats): | 329 if not _kindpatsalwaysmatch(kindpats): |
349 self._files = _explicitfiles(kindpats) | 330 self._files = _explicitfiles(kindpats) |
350 self._anypats = self._anypats or _anypats(kindpats) | 331 self._anypats = self._anypats or _anypats(kindpats) |
371 return set(util.dirs(self._fileset)) | {'.'} | 352 return set(util.dirs(self._fileset)) | {'.'} |
372 | 353 |
373 def visitdir(self, dir): | 354 def visitdir(self, dir): |
374 if self.prefix() and dir in self._fileset: | 355 if self.prefix() and dir in self._fileset: |
375 return 'all' | 356 return 'all' |
376 if self._includeroots or self._includedirs: | |
377 if (not self._anyincludepats and | |
378 dir in self._includeroots): | |
379 # The condition above is essentially self.prefix() for includes | |
380 return 'all' | |
381 if ('.' not in self._includeroots and | |
382 dir not in self._includeroots and | |
383 dir not in self._includedirs and | |
384 not any(parent in self._includeroots | |
385 for parent in util.finddirs(dir))): | |
386 return False | |
387 return (not self._fileset or | 357 return (not self._fileset or |
388 '.' in self._fileset or | 358 '.' in self._fileset or |
389 dir in self._fileset or | 359 dir in self._fileset or |
390 dir in self._dirs or | 360 dir in self._dirs or |
391 any(parentdir in self._fileset | 361 any(parentdir in self._fileset |
396 | 366 |
397 def always(self): | 367 def always(self): |
398 return self._always | 368 return self._always |
399 | 369 |
400 def __repr__(self): | 370 def __repr__(self): |
401 return ('<patternmatcher patterns=%r, includes=%r>' % | 371 return ('<patternmatcher patterns=%r>' % self.patternspat) |
402 (self.patternspat, self.includepat)) | |
403 | 372 |
404 class includematcher(basematcher): | 373 class includematcher(basematcher): |
405 | 374 |
406 def __init__(self, root, cwd, normalize, include, auditor=None, ctx=None, | 375 def __init__(self, root, cwd, normalize, include, auditor=None, ctx=None, |
407 listsubrepos=False, warn=None, badfn=None): | 376 listsubrepos=False, warn=None, badfn=None): |