Rev 166: Add tests that we properly handle subdirectory entries. in http://bazaar.launchpad.net/~jameinel/bzr-explorer/wt_model

John Arbash Meinel john at arbash-meinel.com
Tue Jul 7 22:13:18 BST 2009


At http://bazaar.launchpad.net/~jameinel/bzr-explorer/wt_model

------------------------------------------------------------
revno: 166
revision-id: john at arbash-meinel.com-20090707211314-06872uxsiog4blas
parent: john at arbash-meinel.com-20090707210347-ryhrlim4kjuli6fl
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: wt_model
timestamp: Tue 2009-07-07 16:13:14 -0500
message:
  Add tests that we properly handle subdirectory entries.
-------------- next part --------------
=== modified file 'lib/wt_model.py'
--- a/lib/wt_model.py	2009-07-07 21:03:47 +0000
+++ b/lib/wt_model.py	2009-07-07 21:13:14 +0000
@@ -32,11 +32,8 @@
     :type children: A list of _WTItem objects
     """
 
-    def __init__(self, path, name, disk_kind, file_id, inv_kind, parent):
+    def __init__(self, path, name, disk_kind, file_id, inv_kind, parent_id):
         """Create a new _WTItem
-
-        :type inventory_entry: A bzrlib.inventory.InventoryEntry
-        :type parent: _WTItem
         """
         self.path = path
         self.name = name
@@ -45,7 +42,7 @@
         self.inv_kind = inv_kind
         # Note: this creates a cyclical reference, consider using parent_id
         #       instead
-        self.parent = parent
+        self.parent_id = parent_id
         self.children = []
 
     @staticmethod
@@ -62,13 +59,17 @@
                     dir_wt_item = dir_items[dir_file_id]
                 except KeyError:
                     dir_wt_item = _WTItem(dir_path, '', 'directory',
-                        dir_file_id, 'directory', parent=None)
+                        dir_file_id, 'directory', parent_id=None)
                     root_wt_item = dir_wt_item
+                    dir_items[dir_file_id] = dir_wt_item
                 for (f_path, f_name, f_disk_kind, _, f_id,
                      f_inv_kind) in dir_block_info:
                     wt_item = _WTItem(f_path, f_name, f_disk_kind, f_id,
-                                      f_inv_kind, parent=dir_wt_item)
+                                      f_inv_kind, dir_file_id)
                     dir_wt_item.children.append(wt_item)
+                    # TODO: handle directories that aren't versioned
+                    if f_inv_kind == 'directory':
+                        dir_items[f_id] = wt_item
         finally:
             wt.unlock()
         return root_wt_item

=== modified file 'tests/test_wt_model.py'
--- a/tests/test_wt_model.py	2009-07-07 21:03:47 +0000
+++ b/tests/test_wt_model.py	2009-07-07 21:13:14 +0000
@@ -72,7 +72,7 @@
         self.assertEqual('directory', root_item.disk_kind)
         self.assertEqual('root-id', root_item.file_id)
         self.assertEqual('directory', root_item.inv_kind)
-        self.assertIs(None, root_item.parent)
+        self.assertIs(None, root_item.parent_id)
         self.assertEqual(1, len(root_item.children))
         child = root_item.children[0]
         self.assertEqual('a_file', child.path)
@@ -80,13 +80,13 @@
         self.assertEqual('file', child.disk_kind)
         self.assertEqual('file-id', child.file_id)
         self.assertEqual('file', child.inv_kind)
-        self.assertIs(root_item, child.parent)
+        self.assertEqual('root-id', child.parent_id)
 
     def test_unversioned_from_wt(self):
         wt = self.make_branch_and_tree('.')
         self.build_tree(['a_file', 'unversioned-file'])
+        wt.set_root_id('root-id')
         wt.add(['a_file'], ['file-id'])
-        wt.set_root_id('root-id')
         root_item = wt_model._WTItem.create_from_wt(wt)
         self.assertIsInstance(root_item, wt_model._WTItem)
         self.assertEqual('', root_item.path)
@@ -94,7 +94,7 @@
         self.assertEqual('directory', root_item.disk_kind)
         self.assertEqual('root-id', root_item.file_id)
         self.assertEqual('directory', root_item.inv_kind)
-        self.assertIs(None, root_item.parent)
+        self.assertIs(None, root_item.parent_id)
         self.assertEqual(2, len(root_item.children))
         child = root_item.children[0]
         self.assertEqual('a_file', child.path)
@@ -102,11 +102,47 @@
         self.assertEqual('file', child.disk_kind)
         self.assertEqual('file-id', child.file_id)
         self.assertEqual('file', child.inv_kind)
-        self.assertIs(root_item, child.parent)
+        self.assertEqual('root-id', child.parent_id)
         child = root_item.children[1]
         self.assertEqual('unversioned-file', child.path)
         self.assertEqual('unversioned-file', child.name)
         self.assertEqual('file', child.disk_kind)
         self.assertEqual(None, child.file_id)
         self.assertEqual(None, child.inv_kind)
-        self.assertIs(root_item, child.parent)
+        self.assertEqual('root-id', child.parent_id)
+
+    def test_with_subdirs(self):
+        wt = self.make_branch_and_tree('.')
+        self.build_tree(['dir/', 'dir/subdir/',
+                         'dir/subdir/a_file'])
+        wt.set_root_id('root-id')
+        wt.add(['dir', 'dir/subdir', 'dir/subdir/a_file'],
+               ['dir-id', 'subdir-id', 'file-id'])
+        root_item = wt_model._WTItem.create_from_wt(wt)
+        self.assertIsInstance(root_item, wt_model._WTItem)
+        self.assertEqual('root-id', root_item.file_id)
+        self.assertIs(None, root_item.parent_id)
+        self.assertEqual(1, len(root_item.children))
+        child = root_item.children[0]
+        self.assertEqual('dir', child.path)
+        self.assertEqual('dir', child.name)
+        self.assertEqual('directory', child.disk_kind)
+        self.assertEqual('dir-id', child.file_id)
+        self.assertEqual('directory', child.inv_kind)
+        self.assertEqual('root-id', child.parent_id)
+        self.assertEqual(1, len(child.children))
+        child = child.children[0]
+        self.assertEqual('dir/subdir', child.path)
+        self.assertEqual('subdir', child.name)
+        self.assertEqual('directory', child.disk_kind)
+        self.assertEqual('subdir-id', child.file_id)
+        self.assertEqual('directory', child.inv_kind)
+        self.assertEqual('dir-id', child.parent_id)
+        self.assertEqual(1, len(child.children))
+        child = child.children[0]
+        self.assertEqual('dir/subdir/a_file', child.path)
+        self.assertEqual('a_file', child.name)
+        self.assertEqual('file', child.disk_kind)
+        self.assertEqual('file-id', child.file_id)
+        self.assertEqual('file', child.inv_kind)
+        self.assertEqual('subdir-id', child.parent_id)



More information about the bazaar-commits mailing list