# HG changeset patch # User Martin von Zweigbergk # Date 2017-05-15 07:12:19 # Node ID 27d6956d386b72e674967dbd3014c36f89399904 # Parent 7ada598941d2f879bc33226e7f736228f610b3d0 match: use '' instead of '.' for root directory (API) I think '' is generally a better value for the root directory than '.' is. For example, os.path.join('', 'foo') => 'foo', while os.path.join('.', 'foo') => './foo'. This patch mostly makes it so we use '' internally in match.py. However, it also affects the API in visitdir(), visitchildrenset() and files(). The two former now also accept '' as input. I've updated the callers of these methods. I've also added a deprecation warning for passing '.' (for external callers). The only caller I could find that was affected by files() returning '' instead of '.' was in dirstate.walk(). I've updated that. The next few patches show some workarounds we can remove by using '' instead of '.'. Differential Revision: https://phab.mercurial-scm.org/D6401 diff --git a/hgext/narrow/narrowcommands.py b/hgext/narrow/narrowcommands.py --- a/hgext/narrow/narrowcommands.py +++ b/hgext/narrow/narrowcommands.py @@ -216,7 +216,7 @@ def _narrow(ui, repo, remote, commoninc, todelete.append(f) elif f.startswith('meta/'): dir = f[5:-13] - dirs = ['.'] + sorted(util.dirs({dir})) + [dir] + dirs = [''] + sorted(util.dirs({dir})) + [dir] include = True for d in dirs: visit = newmatch.visitdir(d) diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -1061,7 +1061,7 @@ class cgpacker(object): while tmfnodes: tree, nodes = tmfnodes.popitem() - should_visit = self._matcher.visitdir(tree[:-1] or '.') + should_visit = self._matcher.visitdir(tree[:-1]) if tree and not should_visit: continue @@ -1093,7 +1093,7 @@ class cgpacker(object): fullclnodes=self._fullclnodes, precomputedellipsis=self._precomputedellipsis) - if not self._oldmatcher.visitdir(store.tree[:-1] or '.'): + if not self._oldmatcher.visitdir(store.tree[:-1]): yield tree, deltas else: # 'deltas' is a generator and we need to consume it even if diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -757,10 +757,10 @@ class dirstate(object): del files[i] j += 1 - if not files or '.' in files: - files = ['.'] + if not files or '' in files: + files = [''] # constructing the foldmap is expensive, so don't do it for the - # common case where files is ['.'] + # common case where files is [''] normalize = None results = dict.fromkeys(subrepos) results['.hg'] = None @@ -910,9 +910,7 @@ class dirstate(object): if visitentries == 'this' or visitentries == 'all': visitentries = None skip = None - if nd == '.': - nd = '' - else: + if nd != '': skip = '.hg' try: entries = listdir(join(nd), stat=True, skip=skip) diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -466,9 +466,9 @@ class manifestdict(object): if match(fn): yield fn - # for dirstate.walk, files=['.'] means "walk the whole tree". + # for dirstate.walk, files=[''] means "walk the whole tree". # follow that here, too - fset.discard('.') + fset.discard('') for fn in sorted(fset): if not self.hasdir(fn): @@ -1038,9 +1038,9 @@ class treemanifest(object): fset.remove(fn) yield fn - # for dirstate.walk, files=['.'] means "walk the whole tree". + # for dirstate.walk, files=[''] means "walk the whole tree". # follow that here, too - fset.discard('.') + fset.discard('') for fn in sorted(fset): if not self.hasdir(fn): @@ -1048,7 +1048,7 @@ class treemanifest(object): def _walk(self, match): '''Recursively generates matching file names for walk().''' - visit = match.visitchildrenset(self._dir[:-1] or '.') + visit = match.visitchildrenset(self._dir[:-1]) if not visit: return @@ -1076,7 +1076,7 @@ class treemanifest(object): '''recursively generate a new manifest filtered by the match argument. ''' - visit = match.visitchildrenset(self._dir[:-1] or '.') + visit = match.visitchildrenset(self._dir[:-1]) if visit == 'all': return self.copy() ret = treemanifest(self._dir) @@ -1235,7 +1235,7 @@ class treemanifest(object): return m._dirs.get(d, emptytree)._node # let's skip investigating things that `match` says we do not need. - visit = match.visitchildrenset(self._dir[:-1] or '.') + visit = match.visitchildrenset(self._dir[:-1]) visit = self._loadchildrensetlazy(visit) if visit == 'this' or visit == 'all': visit = None @@ -1254,7 +1254,7 @@ class treemanifest(object): If `matcher` is provided, it only returns subtrees that match. """ - if matcher and not matcher.visitdir(self._dir[:-1] or '.'): + if matcher and not matcher.visitdir(self._dir[:-1]): return if not matcher or matcher(self._dir[:-1]): yield self @@ -1685,7 +1685,7 @@ class manifestlog(object): return self._dirmancache[tree][node] if not self._narrowmatch.always(): - if not self._narrowmatch.visitdir(tree[:-1] or '.'): + if not self._narrowmatch.visitdir(tree[:-1]): return excludeddirmanifestctx(tree, node) if tree: if self._rootstore._treeondisk: @@ -1878,7 +1878,7 @@ class treemanifestctx(object): def _storage(self): narrowmatch = self._manifestlog._narrowmatch if not narrowmatch.always(): - if not narrowmatch.visitdir(self._dir[:-1] or '.'): + if not narrowmatch.visitdir(self._dir[:-1]): return excludedmanifestrevlog(self._dir) return self._manifestlog.getstorage(self._dir) diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -380,7 +380,7 @@ class basematcher(object): the following values (assuming the implementation of visitchildrenset is capable of recognizing this; some implementations are not). - '.' -> {'foo', 'qux'} + '' -> {'foo', 'qux'} 'baz' -> set() 'foo' -> {'bar'} # Ideally this would be 'all', but since the prefix nature of matchers @@ -483,6 +483,14 @@ class predicatematcher(basematcher): or pycompat.byterepr(self.matchfn)) return '' % s +def normalizerootdir(dir, funcname): + if dir == '.': + util.nouideprecwarn("match.%s() no longer accepts " + "'.', use '' instead." % funcname, '5.1') + return '' + return dir + + class patternmatcher(basematcher): """Matches a set of (kind, pat, source) against a 'root' directory. @@ -507,7 +515,7 @@ class patternmatcher(basematcher): True >>> m.files() - ['.', 'foo/a', 'b', '.'] + ['', 'foo/a', 'b', ''] >>> m.exact(b'foo/a') True >>> m.exact(b'b') @@ -525,12 +533,13 @@ class patternmatcher(basematcher): @propertycache def _dirs(self): - return set(util.dirs(self._fileset)) | {'.'} + return set(util.dirs(self._fileset)) | {''} def visitdir(self, dir): + dir = normalizerootdir(dir, 'visitdir') if self._prefix and dir in self._fileset: return 'all' - return ('.' in self._fileset or + return ('' in self._fileset or dir in self._fileset or dir in self._dirs or any(parentdir in self._fileset @@ -564,7 +573,7 @@ class _dirchildren(object): addpath(f) def addpath(self, path): - if path == '.': + if path == '': return dirs = self._dirs findsplitdirs = _dirchildren._findsplitdirs @@ -580,14 +589,14 @@ class _dirchildren(object): # - produces a (dirname, basename) tuple, not just 'dirname' # - includes root dir # Unlike manifest._splittopdir, this does not suffix `dirname` with a - # slash, and produces '.' for the root instead of ''. + # slash. oldpos = len(path) pos = path.rfind('/') while pos != -1: yield path[:pos], path[pos + 1:oldpos] oldpos = pos pos = path.rfind('/', 0, pos) - yield '.', path[:oldpos] + yield '', path[:oldpos] def get(self, path): return self._dirs.get(path, set()) @@ -609,9 +618,10 @@ class includematcher(basematcher): self._parents = set(parents) def visitdir(self, dir): + dir = normalizerootdir(dir, 'visitdir') if self._prefix and dir in self._roots: return 'all' - return ('.' in self._roots or + return ('' in self._roots or dir in self._roots or dir in self._dirs or dir in self._parents or @@ -635,7 +645,7 @@ class includematcher(basematcher): return 'all' # Note: this does *not* include the 'dir in self._parents' case from # visitdir, that's handled below. - if ('.' in self._roots or + if ('' in self._roots or dir in self._roots or dir in self._dirs or any(parentdir in self._roots @@ -683,22 +693,25 @@ class exactmatcher(basematcher): @propertycache def _dirs(self): - return set(util.dirs(self._fileset)) | {'.'} + return set(util.dirs(self._fileset)) | {''} def visitdir(self, dir): + dir = normalizerootdir(dir, 'visitdir') return dir in self._dirs def visitchildrenset(self, dir): + dir = normalizerootdir(dir, 'visitchildrenset') + if not self._fileset or dir not in self._dirs: return set() - candidates = self._fileset | self._dirs - {'.'} - if dir != '.': + candidates = self._fileset | self._dirs - {''} + if dir != '': d = dir + '/' candidates = set(c[len(d):] for c in candidates if c.startswith(d)) # self._dirs includes all of the directories, recursively, so if - # we're attempting to match foo/bar/baz.txt, it'll have '.', 'foo', + # we're attempting to match foo/bar/baz.txt, it'll have '', 'foo', # 'foo/bar' in it. Thus we can safely ignore a candidate that has a # '/' in it, indicating a it's for a subdir-of-a-subdir; the # immediate subdir will be in there without a slash. @@ -772,7 +785,7 @@ class differencematcher(basematcher): # Possible values for m1: set(...), set() # Possible values for m2: 'this', set(...) # We ignore m2's set results. They're possibly incorrect: - # m1 = path:dir/subdir, m2=rootfilesin:dir, visitchildrenset('.'): + # m1 = path:dir/subdir, m2=rootfilesin:dir, visitchildrenset(''): # m1 returns {'dir'}, m2 returns {'dir'}, if we subtracted we'd # return set(), which is *not* correct, we still need to visit 'dir'! return m1_set @@ -918,14 +931,16 @@ class subdirmatcher(basematcher): return self._matcher.matchfn(self._path + "/" + f) def visitdir(self, dir): - if dir == '.': + dir = normalizerootdir(dir, 'visitdir') + if dir == '': dir = self._path else: dir = self._path + "/" + dir return self._matcher.visitdir(dir) def visitchildrenset(self, dir): - if dir == '.': + dir = normalizerootdir(dir, 'visitchildrenset') + if dir == '': dir = self._path else: dir = self._path + "/" + dir @@ -994,18 +1009,18 @@ class prefixdirmatcher(basematcher): @propertycache def _pathdirs(self): - return set(util.finddirs(self._path)) | {'.'} + return set(util.finddirs(self._path)) | {''} def visitdir(self, dir): if dir == self._path: - return self._matcher.visitdir('.') + return self._matcher.visitdir('') if dir.startswith(self._pathprefix): return self._matcher.visitdir(dir[len(self._pathprefix):]) return dir in self._pathdirs def visitchildrenset(self, dir): if dir == self._path: - return self._matcher.visitchildrenset('.') + return self._matcher.visitchildrenset('') if dir.startswith(self._pathprefix): return self._matcher.visitchildrenset(dir[len(self._pathprefix):]) if dir in self._pathdirs: @@ -1197,7 +1212,7 @@ def _regex(kind, pat, globsuffix): 'not a regex pattern: %s:%s' % (kind, pat) ) - if not pat: + if not pat and kind in ('glob', 'relpath'): return '' if kind == 're': return pat @@ -1341,13 +1356,17 @@ def _patternrootsanddirs(kindpats): if '[' in p or '{' in p or '*' in p or '?' in p: break root.append(p) - r.append('/'.join(root) or '.') + r.append('/'.join(root)) elif kind in ('relpath', 'path'): - r.append(pat or '.') + if pat == '.': + pat = '' + r.append(pat) elif kind in ('rootfilesin',): - d.append(pat or '.') + if pat == '.': + pat = '' + d.append(pat) else: # relglob, re, relre - r.append('.') + r.append('') return r, d def _roots(kindpats): @@ -1367,18 +1386,18 @@ def _rootsdirsandparents(kindpats): >>> _rootsdirsandparents( ... [(b'glob', b'g/h/*', b''), (b'glob', b'g/h', b''), ... (b'glob', b'g*', b'')]) - (['g/h', 'g/h', '.'], [], ['g', '.']) + (['g/h', 'g/h', ''], [], ['g', '']) >>> _rootsdirsandparents( ... [(b'rootfilesin', b'g/h', b''), (b'rootfilesin', b'', b'')]) - ([], ['g/h', '.'], ['g', '.']) + ([], ['g/h', ''], ['g', '']) >>> _rootsdirsandparents( ... [(b'relpath', b'r', b''), (b'path', b'p/p', b''), ... (b'path', b'', b'')]) - (['r', 'p/p', '.'], [], ['p', '.']) + (['r', 'p/p', ''], [], ['p', '']) >>> _rootsdirsandparents( ... [(b'relglob', b'rg*', b''), (b're', b're/', b''), ... (b'relre', b'rr', b'')]) - (['.', '.', '.'], [], ['.']) + (['', '', ''], [], ['']) ''' r, d = _patternrootsanddirs(kindpats) @@ -1388,7 +1407,7 @@ def _rootsdirsandparents(kindpats): p.extend(util.dirs(d)) p.extend(util.dirs(r)) # util.dirs() does not include the root directory, so add it manually - p.append('.') + p.append('') # FIXME: all uses of this function convert these to sets, do so before # returning. diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -40,7 +40,7 @@ def _matchtrackedpath(path, matcher): if path.startswith('data/'): return matcher(path[len('data/'):-len('.i')]) elif path.startswith('meta/'): - return matcher.visitdir(path[len('meta/'):-len('/00manifest.i')] or '.') + return matcher.visitdir(path[len('meta/'):-len('/00manifest.i')]) raise error.ProgrammingError("cannot decode path %s" % path) diff --git a/relnotes/next b/relnotes/next --- a/relnotes/next +++ b/relnotes/next @@ -29,3 +29,6 @@ == Internal API Changes == * Matchers are no longer iterable. Use `match.files()` instead. + + * `match.visitdir()` and `match.visitchildrenset()` now expect the + empty string instead of '.' to indicate the root directory. diff --git a/tests/test-match.py b/tests/test-match.py --- a/tests/test-match.py +++ b/tests/test-match.py @@ -13,36 +13,36 @@ class BaseMatcherTests(unittest.TestCase def testVisitdir(self): m = matchmod.basematcher() - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) def testVisitchildrenset(self): m = matchmod.basematcher() - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'dir'), b'this') class AlwaysMatcherTests(unittest.TestCase): def testVisitdir(self): m = matchmod.alwaysmatcher() - self.assertEqual(m.visitdir(b'.'), b'all') + self.assertEqual(m.visitdir(b''), b'all') self.assertEqual(m.visitdir(b'dir'), b'all') def testVisitchildrenset(self): m = matchmod.alwaysmatcher() - self.assertEqual(m.visitchildrenset(b'.'), b'all') + self.assertEqual(m.visitchildrenset(b''), b'all') self.assertEqual(m.visitchildrenset(b'dir'), b'all') class NeverMatcherTests(unittest.TestCase): def testVisitdir(self): m = matchmod.nevermatcher() - self.assertFalse(m.visitdir(b'.')) + self.assertFalse(m.visitdir(b'')) self.assertFalse(m.visitdir(b'dir')) def testVisitchildrenset(self): m = matchmod.nevermatcher() - self.assertEqual(m.visitchildrenset(b'.'), set()) + self.assertEqual(m.visitchildrenset(b''), set()) self.assertEqual(m.visitchildrenset(b'dir'), set()) class PredicateMatcherTests(unittest.TestCase): @@ -51,12 +51,12 @@ class PredicateMatcherTests(unittest.Tes def testVisitdir(self): m = matchmod.predicatematcher(lambda *a: False) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) def testVisitchildrenset(self): m = matchmod.predicatematcher(lambda *a: False) - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'dir'), b'this') class PatternMatcherTests(unittest.TestCase): @@ -64,7 +64,7 @@ class PatternMatcherTests(unittest.TestC def testVisitdirPrefix(self): m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertEqual(m.visitdir(b'dir/subdir'), b'all') # OPT: This should probably be 'all' if its parent is? @@ -74,7 +74,7 @@ class PatternMatcherTests(unittest.TestC def testVisitchildrensetPrefix(self): m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'dir'), b'this') self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') # OPT: This should probably be 'all' if its parent is? @@ -84,7 +84,7 @@ class PatternMatcherTests(unittest.TestC def testVisitdirRootfilesin(self): m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertFalse(m.visitdir(b'dir/subdir/x')) self.assertFalse(m.visitdir(b'folder')) # FIXME: These should probably be True. @@ -94,7 +94,7 @@ class PatternMatcherTests(unittest.TestC def testVisitchildrensetRootfilesin(self): m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) self.assertEqual(m.visitchildrenset(b'folder'), set()) # FIXME: These should probably be {'subdir'} and 'this', respectively, @@ -105,7 +105,7 @@ class PatternMatcherTests(unittest.TestC def testVisitdirGlob(self): m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) assert isinstance(m, matchmod.patternmatcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertFalse(m.visitdir(b'folder')) # OPT: these should probably be False. @@ -115,7 +115,7 @@ class PatternMatcherTests(unittest.TestC def testVisitchildrensetGlob(self): m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) assert isinstance(m, matchmod.patternmatcher) - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'folder'), set()) self.assertEqual(m.visitchildrenset(b'dir'), b'this') # OPT: these should probably be set(). @@ -127,7 +127,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitdirPrefix(self): m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) assert isinstance(m, matchmod.includematcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertEqual(m.visitdir(b'dir/subdir'), b'all') # OPT: This should probably be 'all' if its parent is? @@ -137,7 +137,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitchildrensetPrefix(self): m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) assert isinstance(m, matchmod.includematcher) - self.assertEqual(m.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') # OPT: This should probably be 'all' if its parent is? @@ -147,7 +147,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitdirRootfilesin(self): m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.includematcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertTrue(m.visitdir(b'dir/subdir')) self.assertFalse(m.visitdir(b'dir/subdir/x')) @@ -156,7 +156,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitchildrensetRootfilesin(self): m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.includematcher) - self.assertEqual(m.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'this') self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) @@ -165,7 +165,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitdirGlob(self): m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) assert isinstance(m, matchmod.includematcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertFalse(m.visitdir(b'folder')) # OPT: these should probably be False. @@ -175,7 +175,7 @@ class IncludeMatcherTests(unittest.TestC def testVisitchildrensetGlob(self): m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) assert isinstance(m, matchmod.includematcher) - self.assertEqual(m.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'folder'), set()) self.assertEqual(m.visitchildrenset(b'dir'), b'this') # OPT: these should probably be set(). @@ -187,7 +187,7 @@ class ExactMatcherTests(unittest.TestCas def testVisitdir(self): m = matchmod.exact(files=[b'dir/subdir/foo.txt']) assert isinstance(m, matchmod.exactmatcher) - self.assertTrue(m.visitdir(b'.')) + self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) self.assertTrue(m.visitdir(b'dir/subdir')) self.assertFalse(m.visitdir(b'dir/subdir/foo.txt')) @@ -198,7 +198,7 @@ class ExactMatcherTests(unittest.TestCas def testVisitchildrenset(self): m = matchmod.exact(files=[b'dir/subdir/foo.txt']) assert isinstance(m, matchmod.exactmatcher) - self.assertEqual(m.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(m.visitchildrenset(b'dir/subdir'), {b'foo.txt'}) self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) @@ -212,7 +212,7 @@ class ExactMatcherTests(unittest.TestCas # no file in a/b/c b'a/b/c/d/file4.txt']) assert isinstance(m, matchmod.exactmatcher) - self.assertEqual(m.visitchildrenset(b'.'), {b'a', b'rootfile.txt'}) + self.assertEqual(m.visitchildrenset(b''), {b'a', b'rootfile.txt'}) self.assertEqual(m.visitchildrenset(b'a'), {b'b', b'file1.txt'}) self.assertEqual(m.visitchildrenset(b'a/b'), {b'c', b'file2.txt'}) self.assertEqual(m.visitchildrenset(b'a/b/c'), {b'd'}) @@ -227,7 +227,7 @@ class DifferenceMatcherTests(unittest.Te m2 = matchmod.alwaysmatcher() dm = matchmod.differencematcher(m1, m2) # dm should be equivalent to a nevermatcher. - self.assertFalse(dm.visitdir(b'.')) + self.assertFalse(dm.visitdir(b'')) self.assertFalse(dm.visitdir(b'dir')) self.assertFalse(dm.visitdir(b'dir/subdir')) self.assertFalse(dm.visitdir(b'dir/subdir/z')) @@ -240,7 +240,7 @@ class DifferenceMatcherTests(unittest.Te m2 = matchmod.alwaysmatcher() dm = matchmod.differencematcher(m1, m2) # dm should be equivalent to a nevermatcher. - self.assertEqual(dm.visitchildrenset(b'.'), set()) + self.assertEqual(dm.visitchildrenset(b''), set()) self.assertEqual(dm.visitchildrenset(b'dir'), set()) self.assertEqual(dm.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(dm.visitchildrenset(b'dir/subdir/z'), set()) @@ -258,7 +258,7 @@ class DifferenceMatcherTests(unittest.Te # assertTrue does NOT verify that it's a bool, just that it's truthy. # While we may want to eventually make these return 'all', they should # not currently do so. - self.assertEqual(dm.visitdir(b'.'), b'all') + self.assertEqual(dm.visitdir(b''), b'all') self.assertEqual(dm.visitdir(b'dir'), b'all') self.assertEqual(dm.visitdir(b'dir/subdir'), b'all') self.assertEqual(dm.visitdir(b'dir/subdir/z'), b'all') @@ -271,7 +271,7 @@ class DifferenceMatcherTests(unittest.Te m2 = matchmod.nevermatcher() dm = matchmod.differencematcher(m1, m2) # dm should be equivalent to a alwaysmatcher. - self.assertEqual(dm.visitchildrenset(b'.'), b'all') + self.assertEqual(dm.visitchildrenset(b''), b'all') self.assertEqual(dm.visitchildrenset(b'dir'), b'all') self.assertEqual(dm.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(dm.visitchildrenset(b'dir/subdir/z'), b'all') @@ -283,7 +283,7 @@ class DifferenceMatcherTests(unittest.Te m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) dm = matchmod.differencematcher(m1, m2) - self.assertEqual(dm.visitdir(b'.'), True) + self.assertEqual(dm.visitdir(b''), True) self.assertEqual(dm.visitdir(b'dir'), True) self.assertFalse(dm.visitdir(b'dir/subdir')) # OPT: We should probably return False for these; we don't because @@ -298,7 +298,7 @@ class DifferenceMatcherTests(unittest.Te m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) dm = matchmod.differencematcher(m1, m2) - self.assertEqual(dm.visitchildrenset(b'.'), b'this') + self.assertEqual(dm.visitchildrenset(b''), b'this') self.assertEqual(dm.visitchildrenset(b'dir'), b'this') self.assertEqual(dm.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(dm.visitchildrenset(b'dir/foo'), b'all') @@ -315,7 +315,7 @@ class DifferenceMatcherTests(unittest.Te m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) dm = matchmod.differencematcher(m1, m2) - self.assertEqual(dm.visitdir(b'.'), True) + self.assertEqual(dm.visitdir(b''), True) self.assertEqual(dm.visitdir(b'dir'), True) self.assertEqual(dm.visitdir(b'dir/subdir'), b'all') self.assertFalse(dm.visitdir(b'dir/foo')) @@ -330,7 +330,7 @@ class DifferenceMatcherTests(unittest.Te m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) dm = matchmod.differencematcher(m1, m2) - self.assertEqual(dm.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(dm.visitchildrenset(b''), {b'dir'}) self.assertEqual(dm.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(dm.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(dm.visitchildrenset(b'dir/foo'), set()) @@ -348,7 +348,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.alwaysmatcher() im = matchmod.intersectmatchers(m1, m2) # im should be equivalent to a alwaysmatcher. - self.assertEqual(im.visitdir(b'.'), b'all') + self.assertEqual(im.visitdir(b''), b'all') self.assertEqual(im.visitdir(b'dir'), b'all') self.assertEqual(im.visitdir(b'dir/subdir'), b'all') self.assertEqual(im.visitdir(b'dir/subdir/z'), b'all') @@ -361,7 +361,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.alwaysmatcher() im = matchmod.intersectmatchers(m1, m2) # im should be equivalent to a alwaysmatcher. - self.assertEqual(im.visitchildrenset(b'.'), b'all') + self.assertEqual(im.visitchildrenset(b''), b'all') self.assertEqual(im.visitchildrenset(b'dir'), b'all') self.assertEqual(im.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(im.visitchildrenset(b'dir/subdir/z'), b'all') @@ -374,7 +374,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.nevermatcher() im = matchmod.intersectmatchers(m1, m2) # im should be equivalent to a nevermatcher. - self.assertFalse(im.visitdir(b'.')) + self.assertFalse(im.visitdir(b'')) self.assertFalse(im.visitdir(b'dir')) self.assertFalse(im.visitdir(b'dir/subdir')) self.assertFalse(im.visitdir(b'dir/subdir/z')) @@ -387,7 +387,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.nevermatcher() im = matchmod.intersectmatchers(m1, m2) # im should be equivalent to a nevermqtcher. - self.assertEqual(im.visitchildrenset(b'.'), set()) + self.assertEqual(im.visitchildrenset(b''), set()) self.assertEqual(im.visitchildrenset(b'dir'), set()) self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(im.visitchildrenset(b'dir/subdir/z'), set()) @@ -399,7 +399,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitdir(b'.'), True) + self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) self.assertEqual(im.visitdir(b'dir/subdir'), b'all') self.assertFalse(im.visitdir(b'dir/foo')) @@ -414,7 +414,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(im.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) @@ -429,7 +429,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitdir(b'.'), True) + self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) self.assertFalse(im.visitdir(b'dir/subdir')) self.assertFalse(im.visitdir(b'dir/foo')) @@ -441,7 +441,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), b'this') self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) @@ -456,7 +456,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.match(b'', b'', include=[b'path:folder']) im = matchmod.intersectmatchers(m1, m2) # FIXME: is True correct here? - self.assertEqual(im.visitdir(b'.'), True) + self.assertEqual(im.visitdir(b''), True) self.assertFalse(im.visitdir(b'dir')) self.assertFalse(im.visitdir(b'dir/subdir')) self.assertFalse(im.visitdir(b'dir/foo')) @@ -469,7 +469,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.match(b'', b'', include=[b'path:folder']) im = matchmod.intersectmatchers(m1, m2) # FIXME: is set() correct here? - self.assertEqual(im.visitchildrenset(b'.'), set()) + self.assertEqual(im.visitchildrenset(b''), set()) self.assertEqual(im.visitchildrenset(b'dir'), set()) self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) @@ -483,7 +483,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitdir(b'.'), True) + self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) self.assertEqual(im.visitdir(b'dir/subdir'), True) self.assertFalse(im.visitdir(b'dir/foo')) @@ -496,7 +496,7 @@ class IntersectionMatcherTests(unittest. m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) - self.assertEqual(im.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(im.visitchildrenset(b'dir/subdir'), {b'x'}) self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) @@ -512,7 +512,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) im = matchmod.intersectmatchers(m1, m2) # OPT: these next three could probably be False as well. - self.assertEqual(im.visitdir(b'.'), True) + self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) self.assertEqual(im.visitdir(b'dir/subdir'), True) self.assertFalse(im.visitdir(b'dir/foo')) @@ -525,7 +525,7 @@ class IntersectionMatcherTests(unittest. m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) im = matchmod.intersectmatchers(m1, m2) # OPT: these next two could probably be set() as well. - self.assertEqual(im.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) @@ -540,7 +540,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.alwaysmatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitdir(b'.'), b'all') + self.assertEqual(um.visitdir(b''), b'all') self.assertEqual(um.visitdir(b'dir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir/z'), b'all') @@ -553,7 +553,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.alwaysmatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitchildrenset(b'.'), b'all') + self.assertEqual(um.visitchildrenset(b''), b'all') self.assertEqual(um.visitchildrenset(b'dir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir/z'), b'all') @@ -566,7 +566,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.alwaysmatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitdir(b'.'), b'all') + self.assertEqual(um.visitdir(b''), b'all') self.assertEqual(um.visitdir(b'dir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir/z'), b'all') @@ -579,7 +579,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.alwaysmatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitchildrenset(b'.'), b'all') + self.assertEqual(um.visitchildrenset(b''), b'all') self.assertEqual(um.visitchildrenset(b'dir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir/z'), b'all') @@ -592,7 +592,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.nevermatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitdir(b'.'), b'all') + self.assertEqual(um.visitdir(b''), b'all') self.assertEqual(um.visitdir(b'dir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir/z'), b'all') @@ -605,7 +605,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.nevermatcher() um = matchmod.unionmatcher([m1, m2]) # um should be equivalent to a alwaysmatcher. - self.assertEqual(um.visitchildrenset(b'.'), b'all') + self.assertEqual(um.visitchildrenset(b''), b'all') self.assertEqual(um.visitchildrenset(b'dir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir/z'), b'all') @@ -617,7 +617,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitdir(b'.'), b'all') + self.assertEqual(um.visitdir(b''), b'all') self.assertEqual(um.visitdir(b'dir'), b'all') self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertEqual(um.visitdir(b'dir/foo'), b'all') @@ -629,7 +629,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.alwaysmatcher() m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitchildrenset(b'.'), b'all') + self.assertEqual(um.visitchildrenset(b''), b'all') self.assertEqual(um.visitchildrenset(b'dir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/foo'), b'all') @@ -643,7 +643,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitdir(b'.'), True) + self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertFalse(um.visitdir(b'dir/foo')) @@ -656,7 +656,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), b'this') self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) @@ -671,7 +671,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'path:folder']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitdir(b'.'), True) + self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertFalse(um.visitdir(b'dir/foo')) @@ -684,7 +684,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) m2 = matchmod.match(b'', b'', include=[b'path:folder']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitchildrenset(b'.'), {b'folder', b'dir'}) + self.assertEqual(um.visitchildrenset(b''), {b'folder', b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) @@ -699,7 +699,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitdir(b'.'), True) + self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) self.assertEqual(um.visitdir(b'dir/subdir'), b'all') self.assertFalse(um.visitdir(b'dir/foo')) @@ -712,7 +712,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) @@ -728,7 +728,7 @@ class UnionMatcherTests(unittest.TestCas m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) um = matchmod.unionmatcher([m1, m2]) # OPT: these next three could probably be False as well. - self.assertEqual(um.visitdir(b'.'), True) + self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) self.assertEqual(um.visitdir(b'dir/subdir'), True) self.assertFalse(um.visitdir(b'dir/foo')) @@ -740,7 +740,7 @@ class UnionMatcherTests(unittest.TestCas m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) um = matchmod.unionmatcher([m1, m2]) - self.assertEqual(um.visitchildrenset(b'.'), {b'dir'}) + self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) self.assertEqual(um.visitchildrenset(b'dir/subdir'), {b'x', b'z'}) self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) @@ -754,7 +754,7 @@ class SubdirMatcherTests(unittest.TestCa m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) sm = matchmod.subdirmatcher(b'dir', m) - self.assertEqual(sm.visitdir(b'.'), True) + self.assertEqual(sm.visitdir(b''), True) self.assertEqual(sm.visitdir(b'subdir'), b'all') # OPT: These next two should probably be 'all' not True. self.assertEqual(sm.visitdir(b'subdir/x'), True) @@ -765,7 +765,7 @@ class SubdirMatcherTests(unittest.TestCa m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) sm = matchmod.subdirmatcher(b'dir', m) - self.assertEqual(sm.visitchildrenset(b'.'), {b'subdir'}) + self.assertEqual(sm.visitchildrenset(b''), {b'subdir'}) self.assertEqual(sm.visitchildrenset(b'subdir'), b'all') # OPT: These next two should probably be 'all' not 'this'. self.assertEqual(sm.visitchildrenset(b'subdir/x'), b'this') @@ -795,12 +795,12 @@ class PrefixdirMatcherTests(unittest.Tes self.assertEqual(bool(pm(b'd/e/b.txt')), False) self.assertEqual(bool(pm(b'd/e/f/b.txt')), True) - self.assertEqual(m.visitdir(b'.'), True) + self.assertEqual(m.visitdir(b''), True) self.assertEqual(m.visitdir(b'e'), True) self.assertEqual(m.visitdir(b'e/f'), True) self.assertEqual(m.visitdir(b'e/f/g'), False) - self.assertEqual(pm.visitdir(b'.'), True) + self.assertEqual(pm.visitdir(b''), True) self.assertEqual(pm.visitdir(b'd'), True) self.assertEqual(pm.visitdir(b'd/e'), True) self.assertEqual(pm.visitdir(b'd/e/f'), True) @@ -814,7 +814,7 @@ class PrefixdirMatcherTests(unittest.Tes # OPT: visitchildrenset could possibly return {'e'} and {'f'} for these # next two, respectively; patternmatcher does not have this # optimization. - self.assertEqual(m.visitchildrenset(b'.'), b'this') + self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'e'), b'this') self.assertEqual(m.visitchildrenset(b'e/f'), b'this') self.assertEqual(m.visitchildrenset(b'e/f/g'), set()) @@ -822,7 +822,7 @@ class PrefixdirMatcherTests(unittest.Tes # OPT: visitchildrenset could possibly return {'d'}, {'e'}, and {'f'} # for these next three, respectively; patternmatcher does not have this # optimization. - self.assertEqual(pm.visitchildrenset(b'.'), b'this') + self.assertEqual(pm.visitchildrenset(b''), b'this') self.assertEqual(pm.visitchildrenset(b'd'), b'this') self.assertEqual(pm.visitchildrenset(b'd/e'), b'this') self.assertEqual(pm.visitchildrenset(b'd/e/f'), b'this')