61 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
64 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
62 |
65 |
63 |
66 |
64 class PatternMatcherTests(unittest.TestCase): |
67 class PatternMatcherTests(unittest.TestCase): |
65 def testVisitdirPrefix(self): |
68 def testVisitdirPrefix(self): |
66 m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) |
69 m = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) |
67 assert isinstance(m, matchmod.patternmatcher) |
70 assert isinstance(m, matchmod.patternmatcher) |
68 self.assertTrue(m.visitdir(b'')) |
71 self.assertTrue(m.visitdir(b'')) |
69 self.assertTrue(m.visitdir(b'dir')) |
72 self.assertTrue(m.visitdir(b'dir')) |
70 self.assertEqual(m.visitdir(b'dir/subdir'), b'all') |
73 self.assertEqual(m.visitdir(b'dir/subdir'), b'all') |
71 # OPT: This should probably be 'all' if its parent is? |
74 # OPT: This should probably be 'all' if its parent is? |
72 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
75 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
73 self.assertFalse(m.visitdir(b'folder')) |
76 self.assertFalse(m.visitdir(b'folder')) |
74 |
77 |
75 def testVisitchildrensetPrefix(self): |
78 def testVisitchildrensetPrefix(self): |
76 m = matchmod.match(b'x', b'', patterns=[b'path:dir/subdir']) |
79 m = matchmod.match(b'/repo', b'', patterns=[b'path:dir/subdir']) |
77 assert isinstance(m, matchmod.patternmatcher) |
80 assert isinstance(m, matchmod.patternmatcher) |
78 self.assertEqual(m.visitchildrenset(b''), b'this') |
81 self.assertEqual(m.visitchildrenset(b''), b'this') |
79 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
82 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
80 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') |
83 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') |
81 # OPT: This should probably be 'all' if its parent is? |
84 # OPT: This should probably be 'all' if its parent is? |
82 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
85 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
83 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
86 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
84 |
87 |
85 def testVisitdirRootfilesin(self): |
88 def testVisitdirRootfilesin(self): |
86 m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) |
89 m = matchmod.match(b'/repo', b'', patterns=[b'rootfilesin:dir/subdir']) |
87 assert isinstance(m, matchmod.patternmatcher) |
90 assert isinstance(m, matchmod.patternmatcher) |
88 self.assertFalse(m.visitdir(b'dir/subdir/x')) |
91 self.assertFalse(m.visitdir(b'dir/subdir/x')) |
89 self.assertFalse(m.visitdir(b'folder')) |
92 self.assertFalse(m.visitdir(b'folder')) |
90 # FIXME: These should probably be True. |
93 # FIXME: These should probably be True. |
91 self.assertFalse(m.visitdir(b'')) |
94 self.assertFalse(m.visitdir(b'')) |
92 self.assertFalse(m.visitdir(b'dir')) |
95 self.assertFalse(m.visitdir(b'dir')) |
93 self.assertFalse(m.visitdir(b'dir/subdir')) |
96 self.assertFalse(m.visitdir(b'dir/subdir')) |
94 |
97 |
95 def testVisitchildrensetRootfilesin(self): |
98 def testVisitchildrensetRootfilesin(self): |
96 m = matchmod.match(b'x', b'', patterns=[b'rootfilesin:dir/subdir']) |
99 m = matchmod.match(b'/repo', b'', patterns=[b'rootfilesin:dir/subdir']) |
97 assert isinstance(m, matchmod.patternmatcher) |
100 assert isinstance(m, matchmod.patternmatcher) |
98 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) |
101 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) |
99 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
102 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
100 # FIXME: These should probably be {'dir'}, {'subdir'} and 'this', |
103 # FIXME: These should probably be {'dir'}, {'subdir'} and 'this', |
101 # respectively, or at least 'this' for all three. |
104 # respectively, or at least 'this' for all three. |
102 self.assertEqual(m.visitchildrenset(b''), set()) |
105 self.assertEqual(m.visitchildrenset(b''), set()) |
103 self.assertEqual(m.visitchildrenset(b'dir'), set()) |
106 self.assertEqual(m.visitchildrenset(b'dir'), set()) |
104 self.assertEqual(m.visitchildrenset(b'dir/subdir'), set()) |
107 self.assertEqual(m.visitchildrenset(b'dir/subdir'), set()) |
105 |
108 |
106 def testVisitdirGlob(self): |
109 def testVisitdirGlob(self): |
107 m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) |
110 m = matchmod.match(b'/repo', b'', patterns=[b'glob:dir/z*']) |
108 assert isinstance(m, matchmod.patternmatcher) |
111 assert isinstance(m, matchmod.patternmatcher) |
109 self.assertTrue(m.visitdir(b'')) |
112 self.assertTrue(m.visitdir(b'')) |
110 self.assertTrue(m.visitdir(b'dir')) |
113 self.assertTrue(m.visitdir(b'dir')) |
111 self.assertFalse(m.visitdir(b'folder')) |
114 self.assertFalse(m.visitdir(b'folder')) |
112 # OPT: these should probably be False. |
115 # OPT: these should probably be False. |
113 self.assertTrue(m.visitdir(b'dir/subdir')) |
116 self.assertTrue(m.visitdir(b'dir/subdir')) |
114 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
117 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
115 |
118 |
116 def testVisitchildrensetGlob(self): |
119 def testVisitchildrensetGlob(self): |
117 m = matchmod.match(b'x', b'', patterns=[b'glob:dir/z*']) |
120 m = matchmod.match(b'/repo', b'', patterns=[b'glob:dir/z*']) |
118 assert isinstance(m, matchmod.patternmatcher) |
121 assert isinstance(m, matchmod.patternmatcher) |
119 self.assertEqual(m.visitchildrenset(b''), b'this') |
122 self.assertEqual(m.visitchildrenset(b''), b'this') |
120 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
123 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
121 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
124 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
122 # OPT: these should probably be set(). |
125 # OPT: these should probably be set(). |
124 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
127 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
125 |
128 |
126 |
129 |
127 class IncludeMatcherTests(unittest.TestCase): |
130 class IncludeMatcherTests(unittest.TestCase): |
128 def testVisitdirPrefix(self): |
131 def testVisitdirPrefix(self): |
129 m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) |
132 m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
130 assert isinstance(m, matchmod.includematcher) |
133 assert isinstance(m, matchmod.includematcher) |
131 self.assertTrue(m.visitdir(b'')) |
134 self.assertTrue(m.visitdir(b'')) |
132 self.assertTrue(m.visitdir(b'dir')) |
135 self.assertTrue(m.visitdir(b'dir')) |
133 self.assertEqual(m.visitdir(b'dir/subdir'), b'all') |
136 self.assertEqual(m.visitdir(b'dir/subdir'), b'all') |
134 # OPT: This should probably be 'all' if its parent is? |
137 # OPT: This should probably be 'all' if its parent is? |
135 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
138 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
136 self.assertFalse(m.visitdir(b'folder')) |
139 self.assertFalse(m.visitdir(b'folder')) |
137 |
140 |
138 def testVisitchildrensetPrefix(self): |
141 def testVisitchildrensetPrefix(self): |
139 m = matchmod.match(b'x', b'', include=[b'path:dir/subdir']) |
142 m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
140 assert isinstance(m, matchmod.includematcher) |
143 assert isinstance(m, matchmod.includematcher) |
141 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
144 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
142 self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) |
145 self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) |
143 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') |
146 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'all') |
144 # OPT: This should probably be 'all' if its parent is? |
147 # OPT: This should probably be 'all' if its parent is? |
145 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
148 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), b'this') |
146 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
149 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
147 |
150 |
148 def testVisitdirRootfilesin(self): |
151 def testVisitdirRootfilesin(self): |
149 m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) |
152 m = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir/subdir']) |
150 assert isinstance(m, matchmod.includematcher) |
153 assert isinstance(m, matchmod.includematcher) |
151 self.assertTrue(m.visitdir(b'')) |
154 self.assertTrue(m.visitdir(b'')) |
152 self.assertTrue(m.visitdir(b'dir')) |
155 self.assertTrue(m.visitdir(b'dir')) |
153 self.assertTrue(m.visitdir(b'dir/subdir')) |
156 self.assertTrue(m.visitdir(b'dir/subdir')) |
154 self.assertFalse(m.visitdir(b'dir/subdir/x')) |
157 self.assertFalse(m.visitdir(b'dir/subdir/x')) |
155 self.assertFalse(m.visitdir(b'folder')) |
158 self.assertFalse(m.visitdir(b'folder')) |
156 |
159 |
157 def testVisitchildrensetRootfilesin(self): |
160 def testVisitchildrensetRootfilesin(self): |
158 m = matchmod.match(b'x', b'', include=[b'rootfilesin:dir/subdir']) |
161 m = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir/subdir']) |
159 assert isinstance(m, matchmod.includematcher) |
162 assert isinstance(m, matchmod.includematcher) |
160 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
163 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
161 self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) |
164 self.assertEqual(m.visitchildrenset(b'dir'), {b'subdir'}) |
162 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'this') |
165 self.assertEqual(m.visitchildrenset(b'dir/subdir'), b'this') |
163 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) |
166 self.assertEqual(m.visitchildrenset(b'dir/subdir/x'), set()) |
164 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
167 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
165 |
168 |
166 def testVisitdirGlob(self): |
169 def testVisitdirGlob(self): |
167 m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) |
170 m = matchmod.match(b'/repo', b'', include=[b'glob:dir/z*']) |
168 assert isinstance(m, matchmod.includematcher) |
171 assert isinstance(m, matchmod.includematcher) |
169 self.assertTrue(m.visitdir(b'')) |
172 self.assertTrue(m.visitdir(b'')) |
170 self.assertTrue(m.visitdir(b'dir')) |
173 self.assertTrue(m.visitdir(b'dir')) |
171 self.assertFalse(m.visitdir(b'folder')) |
174 self.assertFalse(m.visitdir(b'folder')) |
172 # OPT: these should probably be False. |
175 # OPT: these should probably be False. |
173 self.assertTrue(m.visitdir(b'dir/subdir')) |
176 self.assertTrue(m.visitdir(b'dir/subdir')) |
174 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
177 self.assertTrue(m.visitdir(b'dir/subdir/x')) |
175 |
178 |
176 def testVisitchildrensetGlob(self): |
179 def testVisitchildrensetGlob(self): |
177 m = matchmod.match(b'x', b'', include=[b'glob:dir/z*']) |
180 m = matchmod.match(b'/repo', b'', include=[b'glob:dir/z*']) |
178 assert isinstance(m, matchmod.includematcher) |
181 assert isinstance(m, matchmod.includematcher) |
179 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
182 self.assertEqual(m.visitchildrenset(b''), {b'dir'}) |
180 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
183 self.assertEqual(m.visitchildrenset(b'folder'), set()) |
181 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
184 self.assertEqual(m.visitchildrenset(b'dir'), b'this') |
182 # OPT: these should probably be set(). |
185 # OPT: these should probably be set(). |
315 self.assertEqual(dm.visitchildrenset(b'dir/subdir/x'), b'this') |
318 self.assertEqual(dm.visitchildrenset(b'dir/subdir/x'), b'this') |
316 |
319 |
317 # We're using includematcher instead of patterns because it behaves slightly |
320 # We're using includematcher instead of patterns because it behaves slightly |
318 # better (giving narrower results) than patternmatcher. |
321 # better (giving narrower results) than patternmatcher. |
319 def testVisitdirIncludeInclude(self): |
322 def testVisitdirIncludeInclude(self): |
320 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
323 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
321 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
324 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
322 dm = matchmod.differencematcher(m1, m2) |
325 dm = matchmod.differencematcher(m1, m2) |
323 self.assertEqual(dm.visitdir(b''), True) |
326 self.assertEqual(dm.visitdir(b''), True) |
324 self.assertEqual(dm.visitdir(b'dir'), True) |
327 self.assertEqual(dm.visitdir(b'dir'), True) |
325 self.assertEqual(dm.visitdir(b'dir/subdir'), b'all') |
328 self.assertEqual(dm.visitdir(b'dir/subdir'), b'all') |
326 self.assertFalse(dm.visitdir(b'dir/foo')) |
329 self.assertFalse(dm.visitdir(b'dir/foo')) |
330 # an 'all' pattern, just True. |
333 # an 'all' pattern, just True. |
331 self.assertEqual(dm.visitdir(b'dir/subdir/z'), True) |
334 self.assertEqual(dm.visitdir(b'dir/subdir/z'), True) |
332 self.assertEqual(dm.visitdir(b'dir/subdir/x'), True) |
335 self.assertEqual(dm.visitdir(b'dir/subdir/x'), True) |
333 |
336 |
334 def testVisitchildrensetIncludeInclude(self): |
337 def testVisitchildrensetIncludeInclude(self): |
335 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
338 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
336 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
339 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
337 dm = matchmod.differencematcher(m1, m2) |
340 dm = matchmod.differencematcher(m1, m2) |
338 self.assertEqual(dm.visitchildrenset(b''), {b'dir'}) |
341 self.assertEqual(dm.visitchildrenset(b''), {b'dir'}) |
339 self.assertEqual(dm.visitchildrenset(b'dir'), {b'subdir'}) |
342 self.assertEqual(dm.visitchildrenset(b'dir'), {b'subdir'}) |
340 self.assertEqual(dm.visitchildrenset(b'dir/subdir'), b'all') |
343 self.assertEqual(dm.visitchildrenset(b'dir/subdir'), b'all') |
341 self.assertEqual(dm.visitchildrenset(b'dir/foo'), set()) |
344 self.assertEqual(dm.visitchildrenset(b'dir/foo'), set()) |
429 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), b'this') |
432 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), b'this') |
430 |
433 |
431 # We're using includematcher instead of patterns because it behaves slightly |
434 # We're using includematcher instead of patterns because it behaves slightly |
432 # better (giving narrower results) than patternmatcher. |
435 # better (giving narrower results) than patternmatcher. |
433 def testVisitdirIncludeInclude(self): |
436 def testVisitdirIncludeInclude(self): |
434 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
437 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
435 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
438 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
436 im = matchmod.intersectmatchers(m1, m2) |
439 im = matchmod.intersectmatchers(m1, m2) |
437 self.assertEqual(im.visitdir(b''), True) |
440 self.assertEqual(im.visitdir(b''), True) |
438 self.assertEqual(im.visitdir(b'dir'), True) |
441 self.assertEqual(im.visitdir(b'dir'), True) |
439 self.assertFalse(im.visitdir(b'dir/subdir')) |
442 self.assertFalse(im.visitdir(b'dir/subdir')) |
440 self.assertFalse(im.visitdir(b'dir/foo')) |
443 self.assertFalse(im.visitdir(b'dir/foo')) |
441 self.assertFalse(im.visitdir(b'folder')) |
444 self.assertFalse(im.visitdir(b'folder')) |
442 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
445 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
443 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
446 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
444 |
447 |
445 def testVisitchildrensetIncludeInclude(self): |
448 def testVisitchildrensetIncludeInclude(self): |
446 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
449 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
447 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
450 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
448 im = matchmod.intersectmatchers(m1, m2) |
451 im = matchmod.intersectmatchers(m1, m2) |
449 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
452 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
450 self.assertEqual(im.visitchildrenset(b'dir'), b'this') |
453 self.assertEqual(im.visitchildrenset(b'dir'), b'this') |
451 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
454 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
452 self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) |
455 self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) |
468 self.assertFalse(im.visitdir(b'folder')) |
471 self.assertFalse(im.visitdir(b'folder')) |
469 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
472 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
470 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
473 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
471 |
474 |
472 def testVisitchildrensetIncludeInclude2(self): |
475 def testVisitchildrensetIncludeInclude2(self): |
473 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
476 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
474 m2 = matchmod.match(b'', b'', include=[b'path:folder']) |
477 m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) |
475 im = matchmod.intersectmatchers(m1, m2) |
478 im = matchmod.intersectmatchers(m1, m2) |
476 # FIXME: is set() correct here? |
479 # FIXME: is set() correct here? |
477 self.assertEqual(im.visitchildrenset(b''), set()) |
480 self.assertEqual(im.visitchildrenset(b''), set()) |
478 self.assertEqual(im.visitchildrenset(b'dir'), set()) |
481 self.assertEqual(im.visitchildrenset(b'dir'), set()) |
479 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
482 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
483 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), set()) |
486 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), set()) |
484 |
487 |
485 # We're using includematcher instead of patterns because it behaves slightly |
488 # We're using includematcher instead of patterns because it behaves slightly |
486 # better (giving narrower results) than patternmatcher. |
489 # better (giving narrower results) than patternmatcher. |
487 def testVisitdirIncludeInclude3(self): |
490 def testVisitdirIncludeInclude3(self): |
488 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
491 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
489 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
492 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
490 im = matchmod.intersectmatchers(m1, m2) |
493 im = matchmod.intersectmatchers(m1, m2) |
491 self.assertEqual(im.visitdir(b''), True) |
494 self.assertEqual(im.visitdir(b''), True) |
492 self.assertEqual(im.visitdir(b'dir'), True) |
495 self.assertEqual(im.visitdir(b'dir'), True) |
493 self.assertEqual(im.visitdir(b'dir/subdir'), True) |
496 self.assertEqual(im.visitdir(b'dir/subdir'), True) |
494 self.assertFalse(im.visitdir(b'dir/foo')) |
497 self.assertFalse(im.visitdir(b'dir/foo')) |
496 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
499 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
497 # OPT: this should probably be 'all' not True. |
500 # OPT: this should probably be 'all' not True. |
498 self.assertEqual(im.visitdir(b'dir/subdir/x'), True) |
501 self.assertEqual(im.visitdir(b'dir/subdir/x'), True) |
499 |
502 |
500 def testVisitchildrensetIncludeInclude3(self): |
503 def testVisitchildrensetIncludeInclude3(self): |
501 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
504 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
502 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
505 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
503 im = matchmod.intersectmatchers(m1, m2) |
506 im = matchmod.intersectmatchers(m1, m2) |
504 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
507 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
505 self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) |
508 self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) |
506 self.assertEqual(im.visitchildrenset(b'dir/subdir'), {b'x'}) |
509 self.assertEqual(im.visitchildrenset(b'dir/subdir'), {b'x'}) |
507 self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) |
510 self.assertEqual(im.visitchildrenset(b'dir/foo'), set()) |
511 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), b'this') |
514 self.assertEqual(im.visitchildrenset(b'dir/subdir/x'), b'this') |
512 |
515 |
513 # We're using includematcher instead of patterns because it behaves slightly |
516 # We're using includematcher instead of patterns because it behaves slightly |
514 # better (giving narrower results) than patternmatcher. |
517 # better (giving narrower results) than patternmatcher. |
515 def testVisitdirIncludeInclude4(self): |
518 def testVisitdirIncludeInclude4(self): |
516 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
519 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
517 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) |
520 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/z']) |
518 im = matchmod.intersectmatchers(m1, m2) |
521 im = matchmod.intersectmatchers(m1, m2) |
519 # OPT: these next three could probably be False as well. |
522 # OPT: these next three could probably be False as well. |
520 self.assertEqual(im.visitdir(b''), True) |
523 self.assertEqual(im.visitdir(b''), True) |
521 self.assertEqual(im.visitdir(b'dir'), True) |
524 self.assertEqual(im.visitdir(b'dir'), True) |
522 self.assertEqual(im.visitdir(b'dir/subdir'), True) |
525 self.assertEqual(im.visitdir(b'dir/subdir'), True) |
524 self.assertFalse(im.visitdir(b'folder')) |
527 self.assertFalse(im.visitdir(b'folder')) |
525 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
528 self.assertFalse(im.visitdir(b'dir/subdir/z')) |
526 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
529 self.assertFalse(im.visitdir(b'dir/subdir/x')) |
527 |
530 |
528 def testVisitchildrensetIncludeInclude4(self): |
531 def testVisitchildrensetIncludeInclude4(self): |
529 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
532 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
530 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) |
533 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/z']) |
531 im = matchmod.intersectmatchers(m1, m2) |
534 im = matchmod.intersectmatchers(m1, m2) |
532 # OPT: these next two could probably be set() as well. |
535 # OPT: these next two could probably be set() as well. |
533 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
536 self.assertEqual(im.visitchildrenset(b''), {b'dir'}) |
534 self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) |
537 self.assertEqual(im.visitchildrenset(b'dir'), {b'subdir'}) |
535 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
538 self.assertEqual(im.visitchildrenset(b'dir/subdir'), set()) |
643 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'all') |
646 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'all') |
644 |
647 |
645 # We're using includematcher instead of patterns because it behaves slightly |
648 # We're using includematcher instead of patterns because it behaves slightly |
646 # better (giving narrower results) than patternmatcher. |
649 # better (giving narrower results) than patternmatcher. |
647 def testVisitdirIncludeInclude(self): |
650 def testVisitdirIncludeInclude(self): |
648 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
651 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
649 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
652 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
650 um = matchmod.unionmatcher([m1, m2]) |
653 um = matchmod.unionmatcher([m1, m2]) |
651 self.assertEqual(um.visitdir(b''), True) |
654 self.assertEqual(um.visitdir(b''), True) |
652 self.assertEqual(um.visitdir(b'dir'), True) |
655 self.assertEqual(um.visitdir(b'dir'), True) |
653 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
656 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
654 self.assertFalse(um.visitdir(b'dir/foo')) |
657 self.assertFalse(um.visitdir(b'dir/foo')) |
656 # OPT: These two should probably be 'all' not True. |
659 # OPT: These two should probably be 'all' not True. |
657 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
660 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
658 self.assertEqual(um.visitdir(b'dir/subdir/x'), True) |
661 self.assertEqual(um.visitdir(b'dir/subdir/x'), True) |
659 |
662 |
660 def testVisitchildrensetIncludeInclude(self): |
663 def testVisitchildrensetIncludeInclude(self): |
661 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
664 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
662 m2 = matchmod.match(b'', b'', include=[b'rootfilesin:dir']) |
665 m2 = matchmod.match(b'/repo', b'', include=[b'rootfilesin:dir']) |
663 um = matchmod.unionmatcher([m1, m2]) |
666 um = matchmod.unionmatcher([m1, m2]) |
664 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
667 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
665 self.assertEqual(um.visitchildrenset(b'dir'), b'this') |
668 self.assertEqual(um.visitchildrenset(b'dir'), b'this') |
666 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
669 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
667 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
670 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
671 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'this') |
674 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'this') |
672 |
675 |
673 # We're using includematcher instead of patterns because it behaves slightly |
676 # We're using includematcher instead of patterns because it behaves slightly |
674 # better (giving narrower results) than patternmatcher. |
677 # better (giving narrower results) than patternmatcher. |
675 def testVisitdirIncludeInclude2(self): |
678 def testVisitdirIncludeInclude2(self): |
676 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
679 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
677 m2 = matchmod.match(b'', b'', include=[b'path:folder']) |
680 m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) |
678 um = matchmod.unionmatcher([m1, m2]) |
681 um = matchmod.unionmatcher([m1, m2]) |
679 self.assertEqual(um.visitdir(b''), True) |
682 self.assertEqual(um.visitdir(b''), True) |
680 self.assertEqual(um.visitdir(b'dir'), True) |
683 self.assertEqual(um.visitdir(b'dir'), True) |
681 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
684 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
682 self.assertFalse(um.visitdir(b'dir/foo')) |
685 self.assertFalse(um.visitdir(b'dir/foo')) |
684 # OPT: These should probably be 'all' not True. |
687 # OPT: These should probably be 'all' not True. |
685 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
688 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
686 self.assertEqual(um.visitdir(b'dir/subdir/x'), True) |
689 self.assertEqual(um.visitdir(b'dir/subdir/x'), True) |
687 |
690 |
688 def testVisitchildrensetIncludeInclude2(self): |
691 def testVisitchildrensetIncludeInclude2(self): |
689 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
692 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
690 m2 = matchmod.match(b'', b'', include=[b'path:folder']) |
693 m2 = matchmod.match(b'/repo', b'', include=[b'path:folder']) |
691 um = matchmod.unionmatcher([m1, m2]) |
694 um = matchmod.unionmatcher([m1, m2]) |
692 self.assertEqual(um.visitchildrenset(b''), {b'folder', b'dir'}) |
695 self.assertEqual(um.visitchildrenset(b''), {b'folder', b'dir'}) |
693 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
696 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
694 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
697 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
695 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
698 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
699 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'this') |
702 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'this') |
700 |
703 |
701 # We're using includematcher instead of patterns because it behaves slightly |
704 # We're using includematcher instead of patterns because it behaves slightly |
702 # better (giving narrower results) than patternmatcher. |
705 # better (giving narrower results) than patternmatcher. |
703 def testVisitdirIncludeInclude3(self): |
706 def testVisitdirIncludeInclude3(self): |
704 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
707 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
705 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
708 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
706 um = matchmod.unionmatcher([m1, m2]) |
709 um = matchmod.unionmatcher([m1, m2]) |
707 self.assertEqual(um.visitdir(b''), True) |
710 self.assertEqual(um.visitdir(b''), True) |
708 self.assertEqual(um.visitdir(b'dir'), True) |
711 self.assertEqual(um.visitdir(b'dir'), True) |
709 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
712 self.assertEqual(um.visitdir(b'dir/subdir'), b'all') |
710 self.assertFalse(um.visitdir(b'dir/foo')) |
713 self.assertFalse(um.visitdir(b'dir/foo')) |
712 self.assertEqual(um.visitdir(b'dir/subdir/x'), b'all') |
715 self.assertEqual(um.visitdir(b'dir/subdir/x'), b'all') |
713 # OPT: this should probably be 'all' not True. |
716 # OPT: this should probably be 'all' not True. |
714 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
717 self.assertEqual(um.visitdir(b'dir/subdir/z'), True) |
715 |
718 |
716 def testVisitchildrensetIncludeInclude3(self): |
719 def testVisitchildrensetIncludeInclude3(self): |
717 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
720 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
718 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
721 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
719 um = matchmod.unionmatcher([m1, m2]) |
722 um = matchmod.unionmatcher([m1, m2]) |
720 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
723 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
721 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
724 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
722 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
725 self.assertEqual(um.visitchildrenset(b'dir/subdir'), b'all') |
723 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
726 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
727 self.assertEqual(um.visitchildrenset(b'dir/subdir/z'), b'this') |
730 self.assertEqual(um.visitchildrenset(b'dir/subdir/z'), b'this') |
728 |
731 |
729 # We're using includematcher instead of patterns because it behaves slightly |
732 # We're using includematcher instead of patterns because it behaves slightly |
730 # better (giving narrower results) than patternmatcher. |
733 # better (giving narrower results) than patternmatcher. |
731 def testVisitdirIncludeInclude4(self): |
734 def testVisitdirIncludeInclude4(self): |
732 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
735 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
733 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) |
736 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/z']) |
734 um = matchmod.unionmatcher([m1, m2]) |
737 um = matchmod.unionmatcher([m1, m2]) |
735 # OPT: these next three could probably be False as well. |
738 # OPT: these next three could probably be False as well. |
736 self.assertEqual(um.visitdir(b''), True) |
739 self.assertEqual(um.visitdir(b''), True) |
737 self.assertEqual(um.visitdir(b'dir'), True) |
740 self.assertEqual(um.visitdir(b'dir'), True) |
738 self.assertEqual(um.visitdir(b'dir/subdir'), True) |
741 self.assertEqual(um.visitdir(b'dir/subdir'), True) |
740 self.assertFalse(um.visitdir(b'folder')) |
743 self.assertFalse(um.visitdir(b'folder')) |
741 self.assertEqual(um.visitdir(b'dir/subdir/z'), b'all') |
744 self.assertEqual(um.visitdir(b'dir/subdir/z'), b'all') |
742 self.assertEqual(um.visitdir(b'dir/subdir/x'), b'all') |
745 self.assertEqual(um.visitdir(b'dir/subdir/x'), b'all') |
743 |
746 |
744 def testVisitchildrensetIncludeInclude4(self): |
747 def testVisitchildrensetIncludeInclude4(self): |
745 m1 = matchmod.match(b'', b'', include=[b'path:dir/subdir/x']) |
748 m1 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/x']) |
746 m2 = matchmod.match(b'', b'', include=[b'path:dir/subdir/z']) |
749 m2 = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir/z']) |
747 um = matchmod.unionmatcher([m1, m2]) |
750 um = matchmod.unionmatcher([m1, m2]) |
748 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
751 self.assertEqual(um.visitchildrenset(b''), {b'dir'}) |
749 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
752 self.assertEqual(um.visitchildrenset(b'dir'), {b'subdir'}) |
750 self.assertEqual(um.visitchildrenset(b'dir/subdir'), {b'x', b'z'}) |
753 self.assertEqual(um.visitchildrenset(b'dir/subdir'), {b'x', b'z'}) |
751 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
754 self.assertEqual(um.visitchildrenset(b'dir/foo'), set()) |
754 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'all') |
757 self.assertEqual(um.visitchildrenset(b'dir/subdir/x'), b'all') |
755 |
758 |
756 |
759 |
757 class SubdirMatcherTests(unittest.TestCase): |
760 class SubdirMatcherTests(unittest.TestCase): |
758 def testVisitdir(self): |
761 def testVisitdir(self): |
759 m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
762 m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
760 sm = matchmod.subdirmatcher(b'dir', m) |
763 sm = matchmod.subdirmatcher(b'dir', m) |
761 |
764 |
762 self.assertEqual(sm.visitdir(b''), True) |
765 self.assertEqual(sm.visitdir(b''), True) |
763 self.assertEqual(sm.visitdir(b'subdir'), b'all') |
766 self.assertEqual(sm.visitdir(b'subdir'), b'all') |
764 # OPT: These next two should probably be 'all' not True. |
767 # OPT: These next two should probably be 'all' not True. |
765 self.assertEqual(sm.visitdir(b'subdir/x'), True) |
768 self.assertEqual(sm.visitdir(b'subdir/x'), True) |
766 self.assertEqual(sm.visitdir(b'subdir/z'), True) |
769 self.assertEqual(sm.visitdir(b'subdir/z'), True) |
767 self.assertFalse(sm.visitdir(b'foo')) |
770 self.assertFalse(sm.visitdir(b'foo')) |
768 |
771 |
769 def testVisitchildrenset(self): |
772 def testVisitchildrenset(self): |
770 m = matchmod.match(b'', b'', include=[b'path:dir/subdir']) |
773 m = matchmod.match(b'/repo', b'', include=[b'path:dir/subdir']) |
771 sm = matchmod.subdirmatcher(b'dir', m) |
774 sm = matchmod.subdirmatcher(b'dir', m) |
772 |
775 |
773 self.assertEqual(sm.visitchildrenset(b''), {b'subdir'}) |
776 self.assertEqual(sm.visitchildrenset(b''), {b'subdir'}) |
774 self.assertEqual(sm.visitchildrenset(b'subdir'), b'all') |
777 self.assertEqual(sm.visitchildrenset(b'subdir'), b'all') |
775 # OPT: These next two should probably be 'all' not 'this'. |
778 # OPT: These next two should probably be 'all' not 'this'. |