Rev 174: Update the WorkingTreeModel to have a genuinely artificial root item. in http://bazaar.launchpad.net/~jameinel/bzr-explorer/wt_model

John Arbash Meinel john at arbash-meinel.com
Tue Jul 7 23:37:17 BST 2009


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

------------------------------------------------------------
revno: 174
revision-id: john at arbash-meinel.com-20090707223713-7jhjrwerm5tf538r
parent: john at arbash-meinel.com-20090707222537-zpmiifw0a9ndia1y
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: wt_model
timestamp: Tue 2009-07-07 17:37:13 -0500
message:
  Update the WorkingTreeModel to have a genuinely artificial root item.
-------------- next part --------------
=== modified file 'lib/wt_model.py'
--- a/lib/wt_model.py	2009-07-07 22:25:37 +0000
+++ b/lib/wt_model.py	2009-07-07 22:37:13 +0000
@@ -61,18 +61,19 @@
         """Create the _WTItem tree structure from an inventory."""
         wt.lock_read()
         try:
+            root_wt_item = _WTItem(None, None, None, None, None, None)
             # By file-id
             dir_items = {}
-            root_wt_item = None
             for dir_info, dir_block_info in wt.walkdirs():
                 dir_path, dir_file_id = dir_info
                 try:
                     dir_wt_item = dir_items[dir_file_id]
                 except KeyError:
+                    # Create the directory root ide
                     dir_wt_item = _WTItem(dir_path, '', 'directory',
                         dir_file_id, 'directory', parent=None)
-                    root_wt_item = dir_wt_item
                     dir_items[dir_file_id] = dir_wt_item
+                    root_wt_item.children.append(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,
@@ -133,7 +134,7 @@
             return QtCore.QModelIndex()
 
         item = index.internalPointer()
-        if item.parent is self._root_wt_item:
+        if item.parent is None or item.parent is self._root_wt_item:
             return QtCore.QModelIndex()
         return self.createIndex(item.parent.row(), 0, item.parent)
 

=== modified file 'tests/test_wt_model.py'
--- a/tests/test_wt_model.py	2009-07-07 22:18:49 +0000
+++ b/tests/test_wt_model.py	2009-07-07 22:37:13 +0000
@@ -62,11 +62,12 @@
         wt.add(['dir', 'dir/a_file', 'b_file'],
                ['dir-id', 'a-id', 'b-id'])
         model = wt_model.WorkingTreeModel(wt)
-        index = model.index(1, 0, None)
+        root_index = model.index(0, 0, None)
+        index = model.index(1, 0, root_index)
         res = model.data(index, QtCore.Qt.DisplayRole)
         self.assertIsInstance(res, QtCore.QVariant)
         self.assertEqual('dir', res.toString())
-        index = model.index(1, 1, None)
+        index = model.index(1, 1, root_index)
         res = model.data(index, QtCore.Qt.DisplayRole)
         self.assertIsInstance(res, QtCore.QVariant)
         self.assertEqual('dir-id', res.toString())
@@ -91,7 +92,7 @@
         model = wt_model.WorkingTreeModel(wt)
         res = model.index(0, 0, None)
         self.assertIsInstance(res, QtCore.QModelIndex)
-        self.assertFalse(res.isValid())
+        self.assertTrue(res.isValid())
 
     def test_index_one_item(self):
         wt = self.make_branch_and_tree('.')
@@ -100,7 +101,7 @@
         res = model.index(0, 0, None)
         self.assertIsInstance(res, QtCore.QModelIndex)
         self.assertTrue(res.isValid())
-        self.assertEqual('a_file', res.internalPointer().name)
+        self.assertEqual('', res.internalPointer().name)
 
     def test_index_subdir(self):
         wt = self.make_branch_and_tree('.')
@@ -108,9 +109,10 @@
         wt.add(['dir', 'dir/a_file', 'b_file'],
                ['dir-id', 'a-id', 'b-id'])
         model = wt_model.WorkingTreeModel(wt)
-        res = model.index(1, 0, None)
-        self.assertIsInstance(res, QtCore.QModelIndex)
-        self.assertTrue(res.isValid())
+        root_index = model.index(0, 0, None)
+        self.assertIsInstance(root_index, QtCore.QModelIndex)
+        self.assertTrue(root_index.isValid())
+        res = model.index(1, 0, root_index)
         self.assertEqual('dir', res.internalPointer().name)
         res = model.index(0, 0, res)
         self.assertIsInstance(res, QtCore.QModelIndex)
@@ -120,7 +122,7 @@
     def test_rowCount_simple(self):
         wt = self.make_branch_and_tree('.')
         model = wt_model.WorkingTreeModel(wt)
-        self.assertEqual(0, model.rowCount())
+        self.assertEqual(1, model.rowCount())
 
     def test_rowCount_subdirs(self):
         wt = self.make_branch_and_tree('.')
@@ -128,12 +130,12 @@
         wt.add(['dir', 'dir/a_file', 'b_file'],
                ['dir-id', 'a-id', 'b-id'])
         model = wt_model.WorkingTreeModel(wt)
-        self.assertEqual(2, model.rowCount())
-        dir_index = model.index(1, 0, None)
-        self.assertIsInstance(dir_index, QtCore.QModelIndex)
-        self.assertTrue(dir_index.isValid())
-        self.assertEqual('dir', dir_index.internalPointer().name)
-        self.assertEqual(1, model.rowCount(dir_index))
+        self.assertEqual(1, model.rowCount())
+        root_index = model.index(0, 0, None)
+        self.assertIsInstance(root_index, QtCore.QModelIndex)
+        self.assertTrue(root_index.isValid())
+        self.assertEqual('', root_index.internalPointer().name)
+        self.assertEqual(2, model.rowCount(root_index))
 
     def test_parent_empty(self):
         wt = self.make_branch_and_tree('.')
@@ -151,20 +153,22 @@
         wt.add(['dir', 'dir/a_file', 'b_file'],
                ['dir-id', 'a-id', 'b-id'])
         model = wt_model.WorkingTreeModel(wt)
-        self.assertEqual(2, model.rowCount())
-        dir_index = model.index(1, 0, None)
+        self.assertEqual(1, model.rowCount())
+        root_index = model.index(0, 0, None)
+        self.assertIsInstance(root_index, QtCore.QModelIndex)
+        self.assertTrue(root_index.isValid())
+        self.assertEqual('', root_index.internalPointer().name)
+        res = model.parent(root_index)
+        self.assertIsInstance(res, QtCore.QModelIndex)
+        self.assertFalse(res.isValid())
+        dir_index = model.index(1, 0, root_index)
         self.assertIsInstance(dir_index, QtCore.QModelIndex)
         self.assertTrue(dir_index.isValid())
         self.assertEqual('dir', dir_index.internalPointer().name)
         res = model.parent(dir_index)
         self.assertIsInstance(res, QtCore.QModelIndex)
-        self.assertFalse(res.isValid())
-        a_index = model.index(0, 0, dir_index)
-        self.assertEqual('a_file', a_index.internalPointer().name)
-        res = model.parent(a_index)
-        self.assertIsInstance(res, QtCore.QModelIndex)
         self.assertTrue(res.isValid())
-        self.assertEqual('dir', res.internalPointer().name)
+        self.assertEqual('', res.internalPointer().name)
 
     def test_headerData(self):
         wt = self.make_branch_and_tree('.')
@@ -204,20 +208,23 @@
         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)
-        self.assertEqual('', root_item.name)
-        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.assertEqual(None, root_item.path)
         self.assertEqual(1, len(root_item.children))
-        child = root_item.children[0]
+        tree_root_item = root_item.children[0]
+        self.assertEqual('', tree_root_item.path)
+        self.assertEqual('', tree_root_item.name)
+        self.assertEqual('directory', tree_root_item.disk_kind)
+        self.assertEqual('root-id', tree_root_item.file_id)
+        self.assertEqual('directory', tree_root_item.inv_kind)
+        self.assertIs(None, tree_root_item.parent)
+        self.assertEqual(1, len(tree_root_item.children))
+        child = tree_root_item.children[0]
         self.assertEqual('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(root_item, child.parent)
+        self.assertEqual(tree_root_item, child.parent)
         self.assertEqual(0, child.row())
 
     def test_unversioned_from_wt(self):
@@ -227,28 +234,32 @@
         wt.add(['a_file'], ['file-id'])
         root_item = wt_model._WTItem.create_from_wt(wt)
         self.assertIsInstance(root_item, wt_model._WTItem)
-        self.assertEqual('', root_item.path)
-        self.assertEqual('', root_item.name)
-        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.assertEqual(2, len(root_item.children))
-        child = root_item.children[0]
+        self.assertEqual(None, root_item.path)
+        self.assertEqual(1, len(root_item.children))
+        tree_root_item = root_item.children[0]
+        self.assertIsInstance(tree_root_item, wt_model._WTItem)
+        self.assertEqual('', tree_root_item.path)
+        self.assertEqual('', tree_root_item.name)
+        self.assertEqual('directory', tree_root_item.disk_kind)
+        self.assertEqual('root-id', tree_root_item.file_id)
+        self.assertEqual('directory', tree_root_item.inv_kind)
+        self.assertIs(None, tree_root_item.parent)
+        self.assertEqual(2, len(tree_root_item.children))
+        child = tree_root_item.children[0]
         self.assertEqual('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(root_item, child.parent)
+        self.assertEqual(tree_root_item, child.parent)
         self.assertEqual(0, child.row())
-        child = root_item.children[1]
+        child = tree_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.assertEqual(root_item, child.parent)
+        self.assertEqual(tree_root_item, child.parent)
         self.assertEqual(1, child.row())
 
     def test_with_subdirs(self):
@@ -260,17 +271,21 @@
                ['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)
+        self.assertEqual(None, root_item.path)
         self.assertEqual(1, len(root_item.children))
-        child = root_item.children[0]
+        tree_root_item = root_item.children[0]
+        self.assertIsInstance(tree_root_item, wt_model._WTItem)
+        self.assertEqual('root-id', tree_root_item.file_id)
+        self.assertIs(None, tree_root_item.parent)
+        self.assertEqual(1, len(tree_root_item.children))
+        child = tree_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_item, child.parent)
-        self.assertEqual(0, root_item.row())
+        self.assertEqual(tree_root_item, child.parent)
+        self.assertEqual(0, tree_root_item.row())
         self.assertEqual(1, len(child.children))
         this_dir = child
         child = this_dir.children[0]



More information about the bazaar-commits mailing list