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