equal
deleted
inserted
replaced
545 self.matchfn |
545 self.matchfn |
546 ) |
546 ) |
547 return b'<predicatenmatcher pred=%s>' % s |
547 return b'<predicatenmatcher pred=%s>' % s |
548 |
548 |
549 |
549 |
550 def normalizerootdir(dir, funcname): |
|
551 if dir == b'.': |
|
552 util.nouideprecwarn( |
|
553 b"match.%s() no longer accepts '.', use '' instead." % funcname, |
|
554 b'5.1', |
|
555 ) |
|
556 return b'' |
|
557 return dir |
|
558 |
|
559 |
|
560 class patternmatcher(basematcher): |
550 class patternmatcher(basematcher): |
561 """Matches a set of (kind, pat, source) against a 'root' directory. |
551 """Matches a set of (kind, pat, source) against a 'root' directory. |
562 |
552 |
563 >>> kindpats = [ |
553 >>> kindpats = [ |
564 ... (b're', br'.*\.c$', b''), |
554 ... (b're', br'.*\.c$', b''), |
600 @propertycache |
590 @propertycache |
601 def _dirs(self): |
591 def _dirs(self): |
602 return set(pathutil.dirs(self._fileset)) |
592 return set(pathutil.dirs(self._fileset)) |
603 |
593 |
604 def visitdir(self, dir): |
594 def visitdir(self, dir): |
605 dir = normalizerootdir(dir, b'visitdir') |
|
606 if self._prefix and dir in self._fileset: |
595 if self._prefix and dir in self._fileset: |
607 return b'all' |
596 return b'all' |
608 return ( |
597 return ( |
609 dir in self._fileset |
598 dir in self._fileset |
610 or dir in self._dirs |
599 or dir in self._dirs |
684 # parents are directories which are non-recursively included because |
673 # parents are directories which are non-recursively included because |
685 # they are needed to get to items in _dirs or _roots. |
674 # they are needed to get to items in _dirs or _roots. |
686 self._parents = parents |
675 self._parents = parents |
687 |
676 |
688 def visitdir(self, dir): |
677 def visitdir(self, dir): |
689 dir = normalizerootdir(dir, b'visitdir') |
|
690 if self._prefix and dir in self._roots: |
678 if self._prefix and dir in self._roots: |
691 return b'all' |
679 return b'all' |
692 return ( |
680 return ( |
693 dir in self._roots |
681 dir in self._roots |
694 or dir in self._dirs |
682 or dir in self._dirs |
765 @propertycache |
753 @propertycache |
766 def _dirs(self): |
754 def _dirs(self): |
767 return set(pathutil.dirs(self._fileset)) |
755 return set(pathutil.dirs(self._fileset)) |
768 |
756 |
769 def visitdir(self, dir): |
757 def visitdir(self, dir): |
770 dir = normalizerootdir(dir, b'visitdir') |
|
771 return dir in self._dirs |
758 return dir in self._dirs |
772 |
759 |
773 def visitchildrenset(self, dir): |
760 def visitchildrenset(self, dir): |
774 dir = normalizerootdir(dir, b'visitchildrenset') |
|
775 |
|
776 if not self._fileset or dir not in self._dirs: |
761 if not self._fileset or dir not in self._dirs: |
777 return set() |
762 return set() |
778 |
763 |
779 candidates = self._fileset | self._dirs - {b''} |
764 candidates = self._fileset | self._dirs - {b''} |
780 if dir != b'': |
765 if dir != b'': |
1007 # from the inputs. Instead, we override matchfn() and visitdir() to |
992 # from the inputs. Instead, we override matchfn() and visitdir() to |
1008 # call the original matcher with the subdirectory path prepended. |
993 # call the original matcher with the subdirectory path prepended. |
1009 return self._matcher.matchfn(self._path + b"/" + f) |
994 return self._matcher.matchfn(self._path + b"/" + f) |
1010 |
995 |
1011 def visitdir(self, dir): |
996 def visitdir(self, dir): |
1012 dir = normalizerootdir(dir, b'visitdir') |
|
1013 if dir == b'': |
997 if dir == b'': |
1014 dir = self._path |
998 dir = self._path |
1015 else: |
999 else: |
1016 dir = self._path + b"/" + dir |
1000 dir = self._path + b"/" + dir |
1017 return self._matcher.visitdir(dir) |
1001 return self._matcher.visitdir(dir) |
1018 |
1002 |
1019 def visitchildrenset(self, dir): |
1003 def visitchildrenset(self, dir): |
1020 dir = normalizerootdir(dir, b'visitchildrenset') |
|
1021 if dir == b'': |
1004 if dir == b'': |
1022 dir = self._path |
1005 dir = self._path |
1023 else: |
1006 else: |
1024 dir = self._path + b"/" + dir |
1007 dir = self._path + b"/" + dir |
1025 return self._matcher.visitchildrenset(dir) |
1008 return self._matcher.visitchildrenset(dir) |