##// END OF EJS Templates
match: move matchers from sparse into core...
Gregory Szorc -
r33319:3c84591e default
parent child Browse files
Show More
@@ -352,8 +352,8 b' def _setupdirstate(ui):'
352
352
353 sparsematch = repo.sparsematch()
353 sparsematch = repo.sparsematch()
354 if self.sparsematch != sparsematch or self.origignore != origignore:
354 if self.sparsematch != sparsematch or self.origignore != origignore:
355 self.func = unionmatcher([origignore,
355 self.func = matchmod.unionmatcher([
356 negatematcher(sparsematch)])
356 origignore, matchmod.negatematcher(sparsematch)])
357 self.sparsematch = sparsematch
357 self.sparsematch = sparsematch
358 self.origignore = origignore
358 self.origignore = origignore
359 return self.func
359 return self.func
@@ -448,7 +448,8 b' def _wraprepo(ui, repo):'
448 include=includes, exclude=excludes,
448 include=includes, exclude=excludes,
449 default='relpath')
449 default='relpath')
450 if subdirs:
450 if subdirs:
451 matcher = forceincludematcher(matcher, subdirs)
451 matcher = matchmod.forceincludematcher(matcher,
452 subdirs)
452 matchers.append(matcher)
453 matchers.append(matcher)
453 except IOError:
454 except IOError:
454 pass
455 pass
@@ -459,11 +460,11 b' def _wraprepo(ui, repo):'
459 elif len(matchers) == 1:
460 elif len(matchers) == 1:
460 result = matchers[0]
461 result = matchers[0]
461 else:
462 else:
462 result = unionmatcher(matchers)
463 result = matchmod.unionmatcher(matchers)
463
464
464 if kwargs.get('includetemp', True):
465 if kwargs.get('includetemp', True):
465 tempincludes = sparse.readtemporaryincludes(self)
466 tempincludes = sparse.readtemporaryincludes(self)
466 result = forceincludematcher(result, tempincludes)
467 result = matchmod.forceincludematcher(result, tempincludes)
467
468
468 self._sparsematchercache[key] = result
469 self._sparsematchercache[key] = result
469
470
@@ -861,83 +862,3 b' def _verbose_output(ui, opts, profilecou'
861 dropped)
862 dropped)
862 fm.condwrite(ui.verbose, 'files_conflicting',
863 fm.condwrite(ui.verbose, 'files_conflicting',
863 'Files conflicting: %d\n', lookup)
864 'Files conflicting: %d\n', lookup)
864
865 class forceincludematcher(object):
866 """A matcher that returns true for any of the forced includes before testing
867 against the actual matcher."""
868 def __init__(self, matcher, includes):
869 self._matcher = matcher
870 self._includes = includes
871
872 def __call__(self, value):
873 return value in self._includes or self._matcher(value)
874
875 def always(self):
876 return False
877
878 def files(self):
879 return []
880
881 def isexact(self):
882 return False
883
884 def anypats(self):
885 return True
886
887 def prefix(self):
888 return False
889
890 def __repr__(self):
891 return ('<forceincludematcher matcher=%r, includes=%r>' %
892 (self._matcher, sorted(self._includes)))
893
894 class unionmatcher(object):
895 """A matcher that is the union of several matchers."""
896 def __init__(self, matchers):
897 self._matchers = matchers
898
899 def __call__(self, value):
900 for match in self._matchers:
901 if match(value):
902 return True
903 return False
904
905 def always(self):
906 return False
907
908 def files(self):
909 return []
910
911 def isexact(self):
912 return False
913
914 def anypats(self):
915 return True
916
917 def prefix(self):
918 return False
919
920 def __repr__(self):
921 return ('<unionmatcher matchers=%r>' % self._matchers)
922
923 class negatematcher(object):
924 def __init__(self, matcher):
925 self._matcher = matcher
926
927 def __call__(self, value):
928 return not self._matcher(value)
929
930 def always(self):
931 return False
932
933 def files(self):
934 return []
935
936 def isexact(self):
937 return False
938
939 def anypats(self):
940 return True
941
942 def __repr__(self):
943 return ('<negatematcher matcher=%r>' % self._matcher)
@@ -641,6 +641,59 b' class subdirmatcher(basematcher):'
641 return ('<subdirmatcher path=%r, matcher=%r>' %
641 return ('<subdirmatcher path=%r, matcher=%r>' %
642 (self._path, self._matcher))
642 (self._path, self._matcher))
643
643
644 class forceincludematcher(basematcher):
645 """A matcher that returns true for any of the forced includes before testing
646 against the actual matcher."""
647 def __init__(self, matcher, includes):
648 self._matcher = matcher
649 self._includes = includes
650
651 def __call__(self, value):
652 return value in self._includes or self._matcher(value)
653
654 def anypats(self):
655 return True
656
657 def prefix(self):
658 return False
659
660 def __repr__(self):
661 return ('<forceincludematcher matcher=%r, includes=%r>' %
662 (self._matcher, sorted(self._includes)))
663
664 class unionmatcher(basematcher):
665 """A matcher that is the union of several matchers."""
666 def __init__(self, matchers):
667 self._matchers = matchers
668
669 def __call__(self, value):
670 for match in self._matchers:
671 if match(value):
672 return True
673 return False
674
675 def anypats(self):
676 return True
677
678 def prefix(self):
679 return False
680
681 def __repr__(self):
682 return ('<unionmatcher matchers=%r>' % self._matchers)
683
684 class negatematcher(basematcher):
685 def __init__(self, matcher):
686 self._matcher = matcher
687
688 def __call__(self, value):
689 return not self._matcher(value)
690
691 def anypats(self):
692 return True
693
694 def __repr__(self):
695 return ('<negatematcher matcher=%r>' % self._matcher)
696
644 def patkind(pattern, default=None):
697 def patkind(pattern, default=None):
645 '''If pattern is 'kind:pat' with a known kind, return kind.'''
698 '''If pattern is 'kind:pat' with a known kind, return kind.'''
646 return _patsplit(pattern, default)[0]
699 return _patsplit(pattern, default)[0]
General Comments 0
You need to be logged in to leave comments. Login now