523
524
# having checked this is on, the tree interface, and intertree
524
525
# interface tests, will proceed to test the subtree support of
528
def test_iter_changes_ignores_unversioned_dirs(self):
529
"""_iter_changes should not descend into unversioned directories."""
530
tree = self.make_branch_and_tree('.', format='dirstate')
531
# We have an unversioned directory at the root, a versioned one with
532
# other versioned files and an unversioned directory, and another
533
# versioned dir with nothing but an unversioned directory.
534
self.build_tree(['unversioned/',
538
'versioned/unversioned/',
539
'versioned/unversioned/a',
540
'versioned/unversioned/b/',
543
'versioned2/unversioned/',
544
'versioned2/unversioned/a',
545
'versioned2/unversioned/b/',
547
tree.add(['versioned', 'versioned2', 'versioned2/a'])
548
tree.commit('one', rev_id='rev-1')
549
# Trap osutils._walkdirs_utf8 to spy on what dirs have been accessed.
551
orig_walkdirs = osutils._walkdirs_utf8
553
osutils._walkdirs_utf8 = orig_walkdirs
554
self.addCleanup(reset)
555
def walkdirs_spy(*args, **kwargs):
556
for val in orig_walkdirs(*args, **kwargs):
557
returned.append(val[0][0])
559
osutils._walkdirs_utf8 = walkdirs_spy
561
basis = tree.basis_tree()
563
self.addCleanup(tree.unlock)
565
self.addCleanup(basis.unlock)
566
changes = [c[1] for c in
567
tree._iter_changes(basis, want_unversioned=True)]
568
self.assertEqual([(None, 'unversioned'),
569
(None, 'versioned/unversioned'),
570
(None, 'versioned2/unversioned'),
572
self.assertEqual(['', 'versioned', 'versioned2'], returned)
573
del returned[:] # reset
574
changes = [c[1] for c in tree._iter_changes(basis)]
575
self.assertEqual([], changes)
576
self.assertEqual(['', 'versioned', 'versioned2'], returned)