Rev 2467: Add a (failing) test that exposes how _iter_changes is accidentally walking into unversioned directories. in http://bzr.arbash-meinel.com/branches/bzr/0.16-dev/iter_changes_ignores_unknowns

John Arbash Meinel john at arbash-meinel.com
Thu Apr 26 23:46:44 BST 2007


At http://bzr.arbash-meinel.com/branches/bzr/0.16-dev/iter_changes_ignores_unknowns

------------------------------------------------------------
revno: 2467
revision-id: john at arbash-meinel.com-20070426224632-6nrmxl1kfbji3c63
parent: pqm at pqm.ubuntu.com-20070426211103-h84prqh7a4ad3ez2
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: iter_changes_ignores_unknowns
timestamp: Thu 2007-04-26 17:46:32 -0500
message:
  Add a (failing) test that exposes how _iter_changes is accidentally walking into unversioned directories.
modified:
  bzrlib/tests/test_workingtree_4.py test_workingtree_4.p-20070223025758-531n3tznl3zacv2o-1
-------------- next part --------------
=== modified file 'bzrlib/tests/test_workingtree_4.py'
--- a/bzrlib/tests/test_workingtree_4.py	2007-04-20 04:19:55 +0000
+++ b/bzrlib/tests/test_workingtree_4.py	2007-04-26 22:46:32 +0000
@@ -24,6 +24,7 @@
     dirstate,
     errors,
     inventory,
+    osutils,
     workingtree_4,
     )
 from bzrlib.lockdir import LockDir
@@ -523,3 +524,48 @@
         # having checked this is on, the tree interface, and intertree
         # interface tests, will proceed to test the subtree support of
         # workingtree_4.
+
+    def test_iter_changes_ignores_unversioned_dirs(self):
+        """_iter_changes should not descend into unversioned directories."""
+        tree = self.make_branch_and_tree('.', format='dirstate')
+        # We have an unversioned directory at the root, a versioned one with
+        # other versioned files and an unversioned directory, and another
+        # versioned dir with nothing but an unversioned directory.
+        self.build_tree(['unversioned/',
+                         'unversioned/a',
+                         'unversioned/b/',
+                         'versioned/',
+                         'versioned/unversioned/',
+                         'versioned/unversioned/a',
+                         'versioned/unversioned/b/',
+                         'versioned2/',
+                         'versioned2/a',
+                         'versioned2/unversioned/',
+                         'versioned2/unversioned/a',
+                         'versioned2/unversioned/b/',
+                        ])
+        tree.add(['versioned', 'versioned2', 'versioned2/a'])
+        tree.commit('one', rev_id='rev-1')
+        # Trap osutils._walkdirs_utf8 to spy on what dirs have been accessed.
+        returned = []
+        orig_walkdirs = osutils._walkdirs_utf8
+        def reset():
+            osutils._walkdirs_utf8 = orig_walkdirs
+        self.addCleanup(reset)
+        def walkdirs_spy(*args, **kwargs):
+            for val in orig_walkdirs(*args, **kwargs):
+                returned.append(val[0][0])
+                yield val
+        osutils._walkdirs_utf8 = walkdirs_spy
+
+        basis = tree.basis_tree()
+        tree.lock_read()
+        self.addCleanup(tree.unlock)
+        basis.lock_read()
+        self.addCleanup(basis.unlock)
+        self.assertEqual([], list(tree._iter_changes(basis)))
+        self.assertEqual(['', 'versioned', 'versioned2'], returned)
+        self.assertEqual([], list(tree._iter_changes(basis,
+                                            want_unversioned=True,
+                                            )))
+        self.assertEqual([], returned)



More information about the bazaar-commits mailing list