Mercurial > hg
changeset 43949:8b1a9ba375e5
match: make sure `root` argument is always an absolute path (API)
The `root` argument should already be an absolute path, but we had
tests that passed a relative path. This patch fixes up the tests and
adds an assertion.
This assumes that `os.path.isabs('/repo')` will be `True` on all
platforms we care to run tests on. Augie tested for me that it does
work on Windows, so that's good enough for me.
Differential Revision: https://phab.mercurial-scm.org/D7649
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 13 Dec 2019 11:21:31 -0800 |
parents | 9595b6a9f0d5 |
children | 5685ce2ea3bf |
files | mercurial/match.py tests/test-manifest.py tests/test-match.py |
diffstat | 3 files changed, 86 insertions(+), 76 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/match.py Fri Dec 06 20:29:02 2019 -0500 +++ b/mercurial/match.py Fri Dec 13 11:21:31 2019 -0800 @@ -183,34 +183,34 @@ '<something>' - a pattern of the specified default type Usually a patternmatcher is returned: - >>> match(b'foo', b'.', [b're:.*\.c$', b'path:foo/a', b'*.py']) + >>> match(b'/foo', b'.', [b're:.*\.c$', b'path:foo/a', b'*.py']) <patternmatcher patterns='.*\\.c$|foo/a(?:/|$)|[^/]*\\.py$'> Combining 'patterns' with 'include' (resp. 'exclude') gives an intersectionmatcher (resp. a differencematcher): - >>> type(match(b'foo', b'.', [b're:.*\.c$'], include=[b'path:lib'])) + >>> type(match(b'/foo', b'.', [b're:.*\.c$'], include=[b'path:lib'])) <class 'mercurial.match.intersectionmatcher'> - >>> type(match(b'foo', b'.', [b're:.*\.c$'], exclude=[b'path:build'])) + >>> type(match(b'/foo', b'.', [b're:.*\.c$'], exclude=[b'path:build'])) <class 'mercurial.match.differencematcher'> Notice that, if 'patterns' is empty, an alwaysmatcher is returned: - >>> match(b'foo', b'.', []) + >>> match(b'/foo', b'.', []) <alwaysmatcher> The 'default' argument determines which kind of pattern is assumed if a pattern has no prefix: - >>> match(b'foo', b'.', [b'.*\.c$'], default=b're') + >>> match(b'/foo', b'.', [b'.*\.c$'], default=b're') <patternmatcher patterns='.*\\.c$'> - >>> match(b'foo', b'.', [b'main.py'], default=b'relpath') + >>> match(b'/foo', b'.', [b'main.py'], default=b'relpath') <patternmatcher patterns='main\\.py(?:/|$)'> - >>> match(b'foo', b'.', [b'main.py'], default=b're') + >>> match(b'/foo', b'.', [b'main.py'], default=b're') <patternmatcher patterns='main.py'> The primary use of matchers is to check whether a value (usually a file name) matches againset one of the patterns given at initialization. There are two ways of doing this check. - >>> m = match(b'foo', b'', [b're:.*\.c$', b'relpath:a']) + >>> m = match(b'/foo', b'', [b're:.*\.c$', b'relpath:a']) 1. Calling the matcher with a file name returns True if any pattern matches that file name: @@ -228,6 +228,7 @@ >>> m.exact(b'main.c') False """ + assert os.path.isabs(root) normalize = _donormalize if icasefs: dirstate = ctx.repo().dirstate @@ -940,7 +941,7 @@ The paths are remapped to remove/insert the path as needed: >>> from . import pycompat - >>> m1 = match(b'root', b'', [b'a.txt', b'sub/b.txt']) + >>> m1 = match(b'/root', b'', [b'a.txt', b'sub/b.txt']) >>> m2 = subdirmatcher(b'sub', m1) >>> m2(b'a.txt') False @@ -1024,7 +1025,7 @@ The prefix path should usually be the relative path from the root of this matcher to the root of the wrapped matcher. - >>> m1 = match(util.localpath(b'root/d/e'), b'f', [b'../a.txt', b'b.txt']) + >>> m1 = match(util.localpath(b'/root/d/e'), b'f', [b'../a.txt', b'b.txt'], auditor=lambda name: None) >>> m2 = prefixdirmatcher(b'd/e', m1) >>> m2(b'a.txt') False
--- a/tests/test-manifest.py Fri Dec 06 20:29:02 2019 -0500 +++ b/tests/test-manifest.py Fri Dec 13 11:21:31 2019 -0800 @@ -169,7 +169,7 @@ m[b'foo'] = want + b'+' self.assertEqual(want, m[b'foo']) # make sure the suffix survives a copy - match = matchmod.match(b'', b'', [b're:foo']) + match = matchmod.match(b'/repo', b'', [b're:foo']) m2 = m.matches(match) self.assertEqual(want, m2[b'foo']) self.assertEqual(1, len(m2)) @@ -186,7 +186,7 @@ def testMatchException(self): m = self.parsemanifest(A_SHORT_MANIFEST) - match = matchmod.match(b'', b'', [b're:.*']) + match = matchmod.match(b'/repo', b'', [b're:.*']) def filt(path): if path == b'foo': @@ -328,7 +328,7 @@ actually exist.''' m = self.parsemanifest(A_DEEPER_MANIFEST) - match = matchmod.match(b'/', b'', [b'a/f'], default=b'relpath') + match = matchmod.match(b'/repo', b'', [b'a/f'], default=b'relpath') m2 = m.matches(match) self.assertEqual([], m2.keys()) @@ -348,7 +348,7 @@ '''Tests matches() for what should be a full match.''' m = self.parsemanifest(A_DEEPER_MANIFEST) - match = matchmod.match(b'/', b'', [b'']) + match = matchmod.match(b'/repo', b'', [b'']) m2 = m.matches(match) self.assertEqual(m.keys(), m2.keys()) @@ -358,7 +358,7 @@ match against all files within said directory.''' m = self.parsemanifest(A_DEEPER_MANIFEST) - match = matchmod.match(b'/', b'', [b'a/b'], default=b'relpath') + match = matchmod.match(b'/repo', b'', [b'a/b'], default=b'relpath') m2 = m.matches(match) self.assertEqual( @@ -392,7 +392,7 @@ when not in the root directory.''' m = self.parsemanifest(A_DEEPER_MANIFEST) - match = matchmod.match(b'/', b'a/b', [b'.'], default=b'relpath') + match = matchmod.match(b'/repo', b'a/b', [b'.'], default=b'relpath') m2 = m.matches(match) self.assertEqual( @@ -415,7 +415,7 @@ deeper than the specified directory.''' m = self.parsemanifest(A_DEEPER_MANIFEST) - match = matchmod.match(b'/', b'', [b'a/b/*/*.txt']) + match = matchmod.match(b'/repo', b'', [b'a/b/*/*.txt']) m2 = m.matches(match) self.assertEqual( @@ -467,7 +467,7 @@ sorted(dirs), ) - match = matchmod.match(b'/', b'', [b'path:a/b/']) + match = matchmod.match(b'/repo', b'', [b'path:a/b/']) dirs = [s._dir for s in m.walksubtrees(matcher=match)] self.assertEqual(sorted([b'a/b/', b'a/b/c/', b'a/b/d/']), sorted(dirs))
--- a/tests/test-match.py Fri Dec 06 20:29:02 2019 -0500 +++ b/tests/test-match.py Fri Dec 13 11:21:31 2019 -0800 @@ -10,6 +10,9 @@ ) +noop_auditor = lambda name: None + + class BaseMatcherTests(unittest.TestCase): def testVisitdir(self): m = matchmod.basematcher() @@ -63,7 +66,7 @@ class PatternMatcherTests(unittest.TestCase): def testVisitdirPrefix(self): - m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) @@ -73,7 +76,7 @@ self.assertFalse(m.visitdir(b'folder')) def testVisitchildrensetPrefix(self): - m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'dir'), b'this') @@ -83,7 +86,7 @@ self.assertEqual(m.visitchildrenset(b'folder'), set()) def testVisitdirRootfilesin(self): - m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) + m = matchmod.match(b'/repo', b'', patterns=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) self.assertFalse(m.visitdir(b'dir/subdir/x')) self.assertFalse(m.visitdir(b'folder')) @@ -93,7 +96,7 @@ self.assertFalse(m.visitdir(b'dir/subdir')) def testVisitchildrensetRootfilesin(self): - m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) + m = matchmod.match(b'/repo', b'', patterns=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.patternmatcher) self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) self.assertEqual(m.visitchildrenset(b'folder'), set()) @@ -104,7 +107,7 @@ self.assertEqual(m.visitchildrenset(b'dir/subdir'), set()) def testVisitdirGlob(self): - m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) + m = matchmod.match(b'/repo', b'', patterns=[b'glob:dir/z*']) assert isinstance(m, matchmod.patternmatcher) self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) @@ -114,7 +117,7 @@ self.assertTrue(m.visitdir(b'dir/subdir/x')) def testVisitchildrensetGlob(self): - m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) + m = matchmod.match(b'/repo', b'', patterns=[b'glob:dir/z*']) assert isinstance(m, matchmod.patternmatcher) self.assertEqual(m.visitchildrenset(b''), b'this') self.assertEqual(m.visitchildrenset(b'folder'), set()) @@ -126,7 +129,7 @@ class IncludeMatcherTests(unittest.TestCase): def testVisitdirPrefix(self): - m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) assert isinstance(m, matchmod.includematcher) self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) @@ -136,7 +139,7 @@ self.assertFalse(m.visitdir(b'folder')) def testVisitchildrensetPrefix(self): - m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) assert isinstance(m, matchmod.includematcher) self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) @@ -146,7 +149,7 @@ self.assertEqual(m.visitchildrenset(b'folder'), set()) def testVisitdirRootfilesin(self): - m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.includematcher) self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) @@ -155,7 +158,7 @@ self.assertFalse(m.visitdir(b'folder')) def testVisitchildrensetRootfilesin(self): - m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir/subdir']) assert isinstance(m, matchmod.includematcher) self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) @@ -164,7 +167,7 @@ self.assertEqual(m.visitchildrenset(b'folder'), set()) def testVisitdirGlob(self): - m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) + m = matchmod.match(b'/repo', b'', include=[b'glob:dir/z*']) assert isinstance(m, matchmod.includematcher) self.assertTrue(m.visitdir(b'')) self.assertTrue(m.visitdir(b'dir')) @@ -174,7 +177,7 @@ self.assertTrue(m.visitdir(b'dir/subdir/x')) def testVisitchildrensetGlob(self): - m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) + m = matchmod.match(b'/repo', b'', include=[b'glob:dir/z*']) assert isinstance(m, matchmod.includematcher) self.assertEqual(m.visitchildrenset(b''), {b'dir'}) self.assertEqual(m.visitchildrenset(b'folder'), set()) @@ -286,7 +289,7 @@ def testVisitdirM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) dm = matchmod.differencematcher(m1, m2) self.assertEqual(dm.visitdir(b''), True) self.assertEqual(dm.visitdir(b'dir'), True) @@ -301,7 +304,7 @@ def testVisitchildrensetM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) dm = matchmod.differencematcher(m1, m2) self.assertEqual(dm.visitchildrenset(b''), b'this') self.assertEqual(dm.visitchildrenset(b'dir'), b'this') @@ -317,8 +320,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) dm = matchmod.differencematcher(m1, m2) self.assertEqual(dm.visitdir(b''), True) self.assertEqual(dm.visitdir(b'dir'), True) @@ -332,8 +335,8 @@ self.assertEqual(dm.visitdir(b'dir/subdir/x'), True) def testVisitchildrensetIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) dm = matchmod.differencematcher(m1, m2) self.assertEqual(dm.visitchildrenset(b''), {b'dir'}) self.assertEqual(dm.visitchildrenset(b'dir'), {b'subdir'}) @@ -402,7 +405,7 @@ def testVisitdirM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) @@ -417,7 +420,7 @@ def testVisitchildrensetM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) @@ -431,8 +434,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) @@ -443,8 +446,8 @@ self.assertFalse(im.visitdir(b'dir/subdir/x')) def testVisitchildrensetIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), b'this') @@ -457,8 +460,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude2(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'path:folder']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) im = matchmod.intersectmatchers(m1, m2) # FIXME: is True correct here? self.assertEqual(im.visitdir(b''), True) @@ -470,8 +473,8 @@ self.assertFalse(im.visitdir(b'dir/subdir/x')) def testVisitchildrensetIncludeInclude2(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'path:folder']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) im = matchmod.intersectmatchers(m1, m2) # FIXME: is set() correct here? self.assertEqual(im.visitchildrenset(b''), set()) @@ -485,8 +488,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude3(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitdir(b''), True) self.assertEqual(im.visitdir(b'dir'), True) @@ -498,8 +501,8 @@ self.assertEqual(im.visitdir(b'dir/subdir/x'), True) def testVisitchildrensetIncludeInclude3(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) im = matchmod.intersectmatchers(m1, m2) self.assertEqual(im.visitchildrenset(b''), {b'dir'}) self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) @@ -513,8 +516,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude4(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', 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) @@ -526,8 +529,8 @@ self.assertFalse(im.visitdir(b'dir/subdir/x')) def testVisitchildrensetIncludeInclude4(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', 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'}) @@ -620,7 +623,7 @@ def testVisitdirM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', patterns=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitdir(b''), b'all') self.assertEqual(um.visitdir(b'dir'), b'all') @@ -632,7 +635,7 @@ def testVisitchildrensetM2SubdirPrefix(self): m1 = matchmod.alwaysmatcher() - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitchildrenset(b''), b'all') self.assertEqual(um.visitchildrenset(b'dir'), b'all') @@ -645,8 +648,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) @@ -658,8 +661,8 @@ self.assertEqual(um.visitdir(b'dir/subdir/x'), True) def testVisitchildrensetIncludeInclude(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), b'this') @@ -673,8 +676,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude2(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'path:folder']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) @@ -686,8 +689,8 @@ self.assertEqual(um.visitdir(b'dir/subdir/x'), True) def testVisitchildrensetIncludeInclude2(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) - m2 = matchmod.match(b'', b'', include=[b'path:folder']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitchildrenset(b''), {b'folder', b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) @@ -701,8 +704,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude3(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitdir(b''), True) self.assertEqual(um.visitdir(b'dir'), True) @@ -714,8 +717,8 @@ self.assertEqual(um.visitdir(b'dir/subdir/z'), True) def testVisitchildrensetIncludeInclude3(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) @@ -729,8 +732,8 @@ # We're using includematcher instead of patterns because it behaves slightly # better (giving narrower results) than patternmatcher. def testVisitdirIncludeInclude4(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', 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) @@ -742,8 +745,8 @@ self.assertEqual(um.visitdir(b'dir/subdir/x'), b'all') def testVisitchildrensetIncludeInclude4(self): - m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) - m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) + m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) + m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/z']) um = matchmod.unionmatcher([m1, m2]) self.assertEqual(um.visitchildrenset(b''), {b'dir'}) self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) @@ -756,7 +759,7 @@ class SubdirMatcherTests(unittest.TestCase): def testVisitdir(self): - m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) sm = matchmod.subdirmatcher(b'dir', m) self.assertEqual(sm.visitdir(b''), True) @@ -767,7 +770,7 @@ self.assertFalse(sm.visitdir(b'foo')) def testVisitchildrenset(self): - m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) + m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) sm = matchmod.subdirmatcher(b'dir', m) self.assertEqual(sm.visitchildrenset(b''), {b'subdir'}) @@ -781,7 +784,10 @@ class PrefixdirMatcherTests(unittest.TestCase): def testVisitdir(self): m = matchmod.match( - util.localpath(b'root/d'), b'e/f', [b'../a.txt', b'b.txt'] + util.localpath(b'/root/d'), + b'e/f', + [b'../a.txt', b'b.txt'], + auditor=noop_auditor, ) pm = matchmod.prefixdirmatcher(b'd', m) @@ -814,7 +820,10 @@ def testVisitchildrenset(self): m = matchmod.match( - util.localpath(b'root/d'), b'e/f', [b'../a.txt', b'b.txt'] + util.localpath(b'/root/d'), + b'e/f', + [b'../a.txt', b'b.txt'], + auditor=noop_auditor, ) pm = matchmod.prefixdirmatcher(b'd', m)