Merge lp:~jelmer/brz/inv-not-dict into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/inv-not-dict
Merge into: lp:brz
Diff against target: 1417 lines (+210/-210)
26 files modified
breezy/bundle/serializer/v08.py (+1/-1)
breezy/bzr/inventory.py (+38/-38)
breezy/bzr/inventorytree.py (+11/-11)
breezy/bzr/vf_repository.py (+6/-6)
breezy/bzr/workingtree.py (+13/-13)
breezy/bzr/workingtree_4.py (+8/-8)
breezy/merge.py (+4/-4)
breezy/plugins/fastimport/bzr_commit_handler.py (+8/-8)
breezy/plugins/fastimport/revision_store.py (+6/-6)
breezy/plugins/repodebug/file_refs.py (+1/-1)
breezy/tests/per_interrepository/test_fetch.py (+1/-1)
breezy/tests/per_intertree/test_compare.py (+1/-1)
breezy/tests/per_inventory/basics.py (+2/-2)
breezy/tests/per_repository_reference/test_add_inventory.py (+2/-2)
breezy/tests/per_repository_vf/test_add_inventory_by_delta.py (+2/-2)
breezy/tests/per_repository_vf/test_fileid_involved.py (+1/-1)
breezy/tests/per_tree/test_tree.py (+1/-1)
breezy/tests/per_workingtree/test_nested_specifics.py (+1/-1)
breezy/tests/per_workingtree/test_parents.py (+4/-4)
breezy/tests/test_commit.py (+6/-6)
breezy/tests/test_dirstate.py (+1/-1)
breezy/tests/test_inv.py (+72/-72)
breezy/tests/test_revisiontree.py (+1/-1)
breezy/tests/test_transform.py (+1/-1)
breezy/tests/test_xml.py (+17/-17)
breezy/tree.py (+1/-1)
To merge this branch: bzr merge lp:~jelmer/brz/inv-not-dict
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+342053@code.launchpad.net

Description of the change

Remove the __getitem__, __iter__ and __delitem__ implementations from Inventory.

Instead, add .get_entry(), .all_file_ids() and .delete().

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :

Thanks. Couple of inline notes.

review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Running landing tests failed
https://ci.breezy-vcs.org/job/brz-dev/86/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/bundle/serializer/v08.py'
--- breezy/bundle/serializer/v08.py 2018-02-24 15:50:23 +0000
+++ breezy/bundle/serializer/v08.py 2018-03-25 02:37:06 +0000
@@ -281,7 +281,7 @@
281281
282 def finish_action(action, file_id, kind, meta_modified, text_modified,282 def finish_action(action, file_id, kind, meta_modified, text_modified,
283 old_path, new_path):283 old_path, new_path):
284 entry = new_tree.root_inventory[file_id]284 entry = new_tree.root_inventory.get_entry(file_id)
285 if entry.revision != default_revision_id:285 if entry.revision != default_revision_id:
286 action.add_utf8_property('last-changed', entry.revision)286 action.add_utf8_property('last-changed', entry.revision)
287 if meta_modified:287 if meta_modified:
288288
=== modified file 'breezy/bzr/inventory.py'
--- breezy/bzr/inventory.py 2018-03-24 17:48:04 +0000
+++ breezy/bzr/inventory.py 2018-03-25 02:37:06 +0000
@@ -112,7 +112,7 @@
112 '2325'112 '2325'
113 >>> i.add(InventoryFile('2326', 'wibble.c', '2325'))113 >>> i.add(InventoryFile('2326', 'wibble.c', '2325'))
114 InventoryFile('2326', 'wibble.c', parent_id='2325', sha1=None, len=None, revision=None)114 InventoryFile('2326', 'wibble.c', parent_id='2325', sha1=None, len=None, revision=None)
115 >>> i['2326']115 >>> i.get_entry('2326')
116 InventoryFile('2326', 'wibble.c', parent_id='2325', sha1=None, len=None, revision=None)116 InventoryFile('2326', 'wibble.c', parent_id='2325', sha1=None, len=None, revision=None)
117 >>> for path, entry in i.iter_entries():117 >>> for path, entry in i.iter_entries():
118 ... print path118 ... print path
@@ -179,7 +179,7 @@
179 # identify candidate head revision ids.179 # identify candidate head revision ids.
180 for inv in previous_inventories:180 for inv in previous_inventories:
181 try:181 try:
182 ie = inv[self.file_id]182 ie = inv.get_entry(self.file_id)
183 except errors.NoSuchId:183 except errors.NoSuchId:
184 pass184 pass
185 else:185 else:
@@ -680,7 +680,7 @@
680 from_dir = self.root680 from_dir = self.root
681 yield '', self.root681 yield '', self.root
682 elif isinstance(from_dir, (str, text_type)):682 elif isinstance(from_dir, (str, text_type)):
683 from_dir = self[from_dir]683 from_dir = self.get_entry(from_dir)
684684
685 # unrolling the recursive called changed the time from685 # unrolling the recursive called changed the time from
686 # 440ms/663ms (inline/total) to 116ms/116ms686 # 440ms/663ms (inline/total) to 116ms/116ms
@@ -762,14 +762,14 @@
762 except errors.NoSuchId:762 except errors.NoSuchId:
763 pass763 pass
764 else:764 else:
765 yield path, self[file_id]765 yield path, self.get_entry(file_id)
766 return766 return
767 from_dir = self.root767 from_dir = self.root
768 if (specific_file_ids is None or yield_parents or768 if (specific_file_ids is None or yield_parents or
769 self.root.file_id in specific_file_ids):769 self.root.file_id in specific_file_ids):
770 yield u'', self.root770 yield u'', self.root
771 elif isinstance(from_dir, (str, text_type)):771 elif isinstance(from_dir, (str, text_type)):
772 from_dir = self[from_dir]772 from_dir = self.get_entry(from_dir)
773773
774 if specific_file_ids is not None:774 if specific_file_ids is not None:
775 # TODO: jam 20070302 This could really be done as a loop rather775 # TODO: jam 20070302 This could really be done as a loop rather
@@ -779,7 +779,7 @@
779 def add_ancestors(file_id):779 def add_ancestors(file_id):
780 if not byid.has_id(file_id):780 if not byid.has_id(file_id):
781 return781 return
782 parent_id = byid[file_id].parent_id782 parent_id = byid.get_entry(file_id).parent_id
783 if parent_id is None:783 if parent_id is None:
784 return784 return
785 if parent_id not in parents:785 if parent_id not in parents:
@@ -811,8 +811,8 @@
811811
812 def _make_delta(self, old):812 def _make_delta(self, old):
813 """Make an inventory delta from two inventories."""813 """Make an inventory delta from two inventories."""
814 old_ids = set(old)814 old_ids = set(old.iter_all_ids())
815 new_ids = set(self)815 new_ids = set(self.iter_all_ids())
816 adds = new_ids - old_ids816 adds = new_ids - old_ids
817 deletes = old_ids - new_ids817 deletes = old_ids - new_ids
818 common = old_ids.intersection(new_ids)818 common = old_ids.intersection(new_ids)
@@ -820,11 +820,11 @@
820 for file_id in deletes:820 for file_id in deletes:
821 delta.append((old.id2path(file_id), None, file_id, None))821 delta.append((old.id2path(file_id), None, file_id, None))
822 for file_id in adds:822 for file_id in adds:
823 delta.append((None, self.id2path(file_id), file_id, self[file_id]))823 delta.append((None, self.id2path(file_id), file_id, self.get_entry(file_id)))
824 for file_id in common:824 for file_id in common:
825 if old[file_id] != self[file_id]:825 if old.get_entry(file_id) != self.get_entry(file_id):
826 delta.append((old.id2path(file_id), self.id2path(file_id),826 delta.append((old.id2path(file_id), self.id2path(file_id),
827 file_id, self[file_id]))827 file_id, self.get_entry(file_id)))
828 return delta828 return delta
829829
830 def make_entry(self, kind, name, parent_id, file_id=None):830 def make_entry(self, kind, name, parent_id, file_id=None):
@@ -943,7 +943,7 @@
943 >>> inv = Inventory()943 >>> inv = Inventory()
944 >>> inv.add(InventoryFile('123-123', 'hello.c', ROOT_ID))944 >>> inv.add(InventoryFile('123-123', 'hello.c', ROOT_ID))
945 InventoryFile('123-123', 'hello.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)945 InventoryFile('123-123', 'hello.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)
946 >>> inv['123-123'].name946 >>> inv.get_entry('123-123').name
947 'hello.c'947 'hello.c'
948948
949 Id's may be looked up from paths:949 Id's may be looked up from paths:
@@ -1046,7 +1046,7 @@
1046 for old_path, file_id in sorted(((op, f) for op, np, f, e in delta1046 for old_path, file_id in sorted(((op, f) for op, np, f, e in delta
1047 if op is not None), reverse=True):1047 if op is not None), reverse=True):
1048 # Preserve unaltered children of file_id for later reinsertion.1048 # Preserve unaltered children of file_id for later reinsertion.
1049 file_id_children = getattr(self[file_id], 'children', {})1049 file_id_children = getattr(self.get_entry(file_id), 'children', {})
1050 if len(file_id_children):1050 if len(file_id_children):
1051 children[file_id] = file_id_children1051 children[file_id] = file_id_children
1052 if self.id2path(file_id) != old_path:1052 if self.id2path(file_id) != old_path:
@@ -1113,7 +1113,7 @@
1113 other.add(entry.copy())1113 other.add(entry.copy())
1114 return other1114 return other
11151115
1116 def __iter__(self):1116 def iter_all_ids(self):
1117 """Iterate over all file-ids."""1117 """Iterate over all file-ids."""
1118 return iter(self._byid)1118 return iter(self._byid)
11191119
@@ -1133,13 +1133,13 @@
1133 """Returns number of entries."""1133 """Returns number of entries."""
1134 return len(self._byid)1134 return len(self._byid)
11351135
1136 def __getitem__(self, file_id):1136 def get_entry(self, file_id):
1137 """Return the entry for given file_id.1137 """Return the entry for given file_id.
11381138
1139 >>> inv = Inventory()1139 >>> inv = Inventory()
1140 >>> inv.add(InventoryFile('123123', 'hello.c', ROOT_ID))1140 >>> inv.add(InventoryFile('123123', 'hello.c', ROOT_ID))
1141 InventoryFile('123123', 'hello.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)1141 InventoryFile('123123', 'hello.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)
1142 >>> inv['123123'].name1142 >>> inv.get_entry('123123').name
1143 'hello.c'1143 'hello.c'
1144 """1144 """
1145 try:1145 try:
@@ -1152,7 +1152,7 @@
1152 return self._byid[file_id].kind1152 return self._byid[file_id].kind
11531153
1154 def get_child(self, parent_id, filename):1154 def get_child(self, parent_id, filename):
1155 return self[parent_id].children.get(filename)1155 return self.get_entry(parent_id).children.get(filename)
11561156
1157 def _add_child(self, entry):1157 def _add_child(self, entry):
1158 """Add an entry to the inventory, without adding it to its parent"""1158 """Add an entry to the inventory, without adding it to its parent"""
@@ -1214,7 +1214,7 @@
1214 ie = make_entry(kind, parts[-1], parent_id, file_id)1214 ie = make_entry(kind, parts[-1], parent_id, file_id)
1215 return self.add(ie)1215 return self.add(ie)
12161216
1217 def __delitem__(self, file_id):1217 def delete(self, file_id):
1218 """Remove entry by id.1218 """Remove entry by id.
12191219
1220 >>> inv = Inventory()1220 >>> inv = Inventory()
@@ -1222,14 +1222,14 @@
1222 InventoryFile('123', 'foo.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)1222 InventoryFile('123', 'foo.c', parent_id='TREE_ROOT', sha1=None, len=None, revision=None)
1223 >>> inv.has_id('123')1223 >>> inv.has_id('123')
1224 True1224 True
1225 >>> del inv['123']1225 >>> inv.delete('123')
1226 >>> inv.has_id('123')1226 >>> inv.has_id('123')
1227 False1227 False
1228 """1228 """
1229 ie = self[file_id]1229 ie = self.get_entry(file_id)
1230 del self._byid[file_id]1230 del self._byid[file_id]
1231 if ie.parent_id is not None:1231 if ie.parent_id is not None:
1232 del self[ie.parent_id].children[ie.name]1232 del self.get_entry(ie.parent_id).children[ie.name]
12331233
1234 def __eq__(self, other):1234 def __eq__(self, other):
1235 """Compare two sets by comparing their contents.1235 """Compare two sets by comparing their contents.
@@ -1273,10 +1273,10 @@
12731273
1274 def _make_delta(self, old):1274 def _make_delta(self, old):
1275 """Make an inventory delta from two inventories."""1275 """Make an inventory delta from two inventories."""
1276 old_getter = getattr(old, '_byid', old)1276 old_getter = old.get_entry
1277 new_getter = self._byid1277 new_getter = self.get_entry
1278 old_ids = set(old_getter)1278 old_ids = set(old.iter_all_ids())
1279 new_ids = set(new_getter)1279 new_ids = set(self.iter_all_ids())
1280 adds = new_ids - old_ids1280 adds = new_ids - old_ids
1281 deletes = old_ids - new_ids1281 deletes = old_ids - new_ids
1282 if not adds and not deletes:1282 if not adds and not deletes:
@@ -1287,10 +1287,10 @@
1287 for file_id in deletes:1287 for file_id in deletes:
1288 delta.append((old.id2path(file_id), None, file_id, None))1288 delta.append((old.id2path(file_id), None, file_id, None))
1289 for file_id in adds:1289 for file_id in adds:
1290 delta.append((None, self.id2path(file_id), file_id, self[file_id]))1290 delta.append((None, self.id2path(file_id), file_id, self.get_entry(file_id)))
1291 for file_id in common:1291 for file_id in common:
1292 new_ie = new_getter[file_id]1292 new_ie = new_getter(file_id)
1293 old_ie = old_getter[file_id]1293 old_ie = old_getter(file_id)
1294 # If xml_serializer returns the cached InventoryEntries (rather1294 # If xml_serializer returns the cached InventoryEntries (rather
1295 # than always doing .copy()), inlining the 'is' check saves 2.7M1295 # than always doing .copy()), inlining the 'is' check saves 2.7M
1296 # calls to __eq__. Under lsprof this saves 20s => 6s.1296 # calls to __eq__. Under lsprof this saves 20s => 6s.
@@ -1315,10 +1315,10 @@
1315 if ie.kind == 'directory':1315 if ie.kind == 'directory':
1316 to_find_delete.extend(viewvalues(ie.children))1316 to_find_delete.extend(viewvalues(ie.children))
1317 for file_id in reversed(to_delete):1317 for file_id in reversed(to_delete):
1318 ie = self[file_id]1318 ie = self.get_entry(file_id)
1319 del self._byid[file_id]1319 del self._byid[file_id]
1320 if ie.parent_id is not None:1320 if ie.parent_id is not None:
1321 del self[ie.parent_id].children[ie.name]1321 del self.get_entry(ie.parent_id).children[ie.name]
1322 else:1322 else:
1323 self.root = None1323 self.root = None
13241324
@@ -1707,7 +1707,7 @@
1707 if old_path is None:1707 if old_path is None:
1708 old_key = None1708 old_key = None
1709 else:1709 else:
1710 old_entry = self[file_id]1710 old_entry = self.get_entry(file_id)
1711 old_key = self._parent_id_basename_key(old_entry)1711 old_key = self._parent_id_basename_key(old_entry)
1712 if new_path is None:1712 if new_path is None:
1713 new_key = None1713 new_key = None
@@ -1728,7 +1728,7 @@
1728 new_key, [None, None])[1] = new_value1728 new_key, [None, None])[1] = new_value
1729 # validate that deletes are complete.1729 # validate that deletes are complete.
1730 for file_id in deletes:1730 for file_id in deletes:
1731 entry = self[file_id]1731 entry = self.get_entry(file_id)
1732 if entry.kind != 'directory':1732 if entry.kind != 'directory':
1733 continue1733 continue
1734 # This loop could potentially be better by using the id_basename1734 # This loop could potentially be better by using the id_basename
@@ -1754,7 +1754,7 @@
1754 parents.discard(('', None))1754 parents.discard(('', None))
1755 for parent_path, parent in parents:1755 for parent_path, parent in parents:
1756 try:1756 try:
1757 if result[parent].kind != 'directory':1757 if result.get_entry(parent).kind != 'directory':
1758 raise errors.InconsistentDelta(result.id2path(parent), parent,1758 raise errors.InconsistentDelta(result.id2path(parent), parent,
1759 'Not a directory, but given children')1759 'Not a directory, but given children')
1760 except errors.NoSuchId:1760 except errors.NoSuchId:
@@ -1880,7 +1880,7 @@
1880 parent_id = b''1880 parent_id = b''
1881 return StaticTuple(parent_id, entry.name.encode('utf8')).intern()1881 return StaticTuple(parent_id, entry.name.encode('utf8')).intern()
18821882
1883 def __getitem__(self, file_id):1883 def get_entry(self, file_id):
1884 """map a single file_id -> InventoryEntry."""1884 """map a single file_id -> InventoryEntry."""
1885 if file_id is None:1885 if file_id is None:
1886 raise errors.NoSuchId(self, file_id)1886 raise errors.NoSuchId(self, file_id)
@@ -1895,7 +1895,7 @@
1895 raise errors.NoSuchId(self, file_id)1895 raise errors.NoSuchId(self, file_id)
18961896
1897 def _getitems(self, file_ids):1897 def _getitems(self, file_ids):
1898 """Similar to __getitem__, but lets you query for multiple.1898 """Similar to get_entry, but lets you query for multiple.
1899 1899
1900 The returned order is undefined. And currently if an item doesn't1900 The returned order is undefined. And currently if an item doesn't
1901 exist, it isn't included in the output.1901 exist, it isn't included in the output.
@@ -1929,13 +1929,13 @@
1929 """Yield the parents of file_id up to the root."""1929 """Yield the parents of file_id up to the root."""
1930 while file_id is not None:1930 while file_id is not None:
1931 try:1931 try:
1932 ie = self[file_id]1932 ie = self.get_entry(file_id)
1933 except KeyError:1933 except KeyError:
1934 raise errors.NoSuchId(tree=self, file_id=file_id)1934 raise errors.NoSuchId(tree=self, file_id=file_id)
1935 yield ie1935 yield ie
1936 file_id = ie.parent_id1936 file_id = ie.parent_id
19371937
1938 def __iter__(self):1938 def iter_all_ids(self):
1939 """Iterate over all file-ids."""1939 """Iterate over all file-ids."""
1940 for key, _ in self.id_to_entry.iteritems():1940 for key, _ in self.id_to_entry.iteritems():
1941 yield key[-1]1941 yield key[-1]
@@ -2172,7 +2172,7 @@
2172 @property2172 @property
2173 def root(self):2173 def root(self):
2174 """Get the root entry."""2174 """Get the root entry."""
2175 return self[self.root_id]2175 return self.get_entry(self.root_id)
21762176
21772177
2178class CHKInventoryDirectory(InventoryDirectory):2178class CHKInventoryDirectory(InventoryDirectory):
21792179
=== modified file 'breezy/bzr/inventorytree.py'
--- breezy/bzr/inventorytree.py 2018-03-24 23:49:53 +0000
+++ breezy/bzr/inventorytree.py 2018-03-25 02:37:06 +0000
@@ -300,7 +300,7 @@
300 with self.lock_read():300 with self.lock_read():
301 inv, inv_file_id = self._path2inv_file_id(path, file_id)301 inv, inv_file_id = self._path2inv_file_id(path, file_id)
302 try:302 try:
303 ie = inv[inv_file_id]303 ie = inv.get_entry(inv_file_id)
304 except errors.NoSuchId:304 except errors.NoSuchId:
305 raise errors.NoSuchFile(path)305 raise errors.NoSuchFile(path)
306 else:306 else:
@@ -807,7 +807,7 @@
807 def get_file_mtime(self, path, file_id=None):807 def get_file_mtime(self, path, file_id=None):
808 inv, inv_file_id = self._path2inv_file_id(path, file_id)808 inv, inv_file_id = self._path2inv_file_id(path, file_id)
809 try:809 try:
810 ie = inv[inv_file_id]810 ie = inv.get_entry(inv_file_id)
811 except errors.NoSuchId:811 except errors.NoSuchId:
812 raise errors.NoSuchFile(path)812 raise errors.NoSuchFile(path)
813 try:813 try:
@@ -818,11 +818,11 @@
818818
819 def get_file_size(self, path, file_id=None):819 def get_file_size(self, path, file_id=None):
820 inv, inv_file_id = self._path2inv_file_id(path, file_id)820 inv, inv_file_id = self._path2inv_file_id(path, file_id)
821 return inv[inv_file_id].text_size821 return inv.get_entry(inv_file_id).text_size
822822
823 def get_file_sha1(self, path, file_id=None, stat_value=None):823 def get_file_sha1(self, path, file_id=None, stat_value=None):
824 inv, inv_file_id = self._path2inv_file_id(path, file_id)824 inv, inv_file_id = self._path2inv_file_id(path, file_id)
825 ie = inv[inv_file_id]825 ie = inv.get_entry(inv_file_id)
826 if ie.kind == "file":826 if ie.kind == "file":
827 return ie.text_sha1827 return ie.text_sha1
828 return None828 return None
@@ -830,14 +830,14 @@
830 def get_file_revision(self, path, file_id=None):830 def get_file_revision(self, path, file_id=None):
831 inv, inv_file_id = self._path2inv_file_id(path, file_id)831 inv, inv_file_id = self._path2inv_file_id(path, file_id)
832 try:832 try:
833 ie = inv[inv_file_id]833 ie = inv.get_entry(inv_file_id)
834 except errors.NoSuchId:834 except errors.NoSuchId:
835 raise errors.NoSuchFile(path)835 raise errors.NoSuchFile(path)
836 return ie.revision836 return ie.revision
837837
838 def is_executable(self, path, file_id=None):838 def is_executable(self, path, file_id=None):
839 inv, inv_file_id = self._path2inv_file_id(path, file_id)839 inv, inv_file_id = self._path2inv_file_id(path, file_id)
840 ie = inv[inv_file_id]840 ie = inv.get_entry(inv_file_id)
841 if ie.kind != "file":841 if ie.kind != "file":
842 return False842 return False
843 return ie.executable843 return ie.executable
@@ -864,13 +864,13 @@
864864
865 def get_symlink_target(self, path, file_id=None):865 def get_symlink_target(self, path, file_id=None):
866 inv, inv_file_id = self._path2inv_file_id(path, file_id)866 inv, inv_file_id = self._path2inv_file_id(path, file_id)
867 ie = inv[inv_file_id]867 ie = inv.get_entry(inv_file_id)
868 # Inventories store symlink targets in unicode868 # Inventories store symlink targets in unicode
869 return ie.symlink_target869 return ie.symlink_target
870870
871 def get_reference_revision(self, path, file_id=None):871 def get_reference_revision(self, path, file_id=None):
872 inv, inv_file_id = self._path2inv_file_id(path, file_id)872 inv, inv_file_id = self._path2inv_file_id(path, file_id)
873 return inv[inv_file_id].reference_revision873 return inv.get_entry(inv_file_id).reference_revision
874874
875 def get_root_id(self):875 def get_root_id(self):
876 if self.root_inventory.root:876 if self.root_inventory.root:
@@ -879,7 +879,7 @@
879 def kind(self, path, file_id=None):879 def kind(self, path, file_id=None):
880 inv, inv_file_id = self._path2inv_file_id(path, file_id)880 inv, inv_file_id = self._path2inv_file_id(path, file_id)
881 try:881 try:
882 return inv[inv_file_id].kind882 return inv.get_entry(inv_file_id).kind
883 except errors.NoSuchId:883 except errors.NoSuchId:
884 raise errors.NoSuchFile(path)884 raise errors.NoSuchFile(path)
885885
@@ -888,7 +888,7 @@
888 inv, file_id = self._path2inv_file_id(path)888 inv, file_id = self._path2inv_file_id(path)
889 if file_id is None:889 if file_id is None:
890 return ('missing', None, None, None)890 return ('missing', None, None, None)
891 entry = inv[file_id]891 entry = inv.get_entry(file_id)
892 kind = entry.kind892 kind = entry.kind
893 if kind == 'file':893 if kind == 'file':
894 return (kind, entry.text_size, entry.executable, entry.text_sha1)894 return (kind, entry.text_size, entry.executable, entry.text_sha1)
@@ -918,7 +918,7 @@
918 else:918 else:
919 relroot = ""919 relroot = ""
920 # FIXME: stash the node in pending920 # FIXME: stash the node in pending
921 entry = inv[currentdir[4]]921 entry = inv.get_entry(currentdir[4])
922 for name, child in entry.sorted_children():922 for name, child in entry.sorted_children():
923 toppath = relroot + name923 toppath = relroot + name
924 dirblock.append((toppath, name, child.kind, None,924 dirblock.append((toppath, name, child.kind, None,
925925
=== modified file 'breezy/bzr/vf_repository.py'
--- breezy/bzr/vf_repository.py 2018-03-24 23:49:53 +0000
+++ breezy/bzr/vf_repository.py 2018-03-25 02:37:06 +0000
@@ -258,7 +258,7 @@
258 result = (None, path, ie.file_id, ie)258 result = (None, path, ie.file_id, ie)
259 self._basis_delta.append(result)259 self._basis_delta.append(result)
260 return result260 return result
261 elif ie != basis_inv[ie.file_id]:261 elif ie != basis_inv.get_entry(ie.file_id):
262 # common but altered262 # common but altered
263 # TODO: avoid tis id2path call.263 # TODO: avoid tis id2path call.
264 result = (basis_inv.id2path(ie.file_id), path, ie.file_id, ie)264 result = (basis_inv.id2path(ie.file_id), path, ie.file_id, ie)
@@ -345,7 +345,7 @@
345 continue345 continue
346 if change[2] not in merged_ids:346 if change[2] not in merged_ids:
347 if change[0] is not None:347 if change[0] is not None:
348 basis_entry = basis_inv[change[2]]348 basis_entry = basis_inv.get_entry(change[2])
349 merged_ids[change[2]] = [349 merged_ids[change[2]] = [
350 # basis revid350 # basis revid
351 basis_entry.revision,351 basis_entry.revision,
@@ -371,7 +371,7 @@
371 for change in iter_changes:371 for change in iter_changes:
372 # This probably looks up in basis_inv way to much.372 # This probably looks up in basis_inv way to much.
373 if change[1][0] is not None:373 if change[1][0] is not None:
374 head_candidate = [basis_inv[change[0]].revision]374 head_candidate = [basis_inv.get_entry(change[0]).revision]
375 else:375 else:
376 head_candidate = []376 head_candidate = []
377 changes[change[0]] = change, merged_ids.get(change[0],377 changes[change[0]] = change, merged_ids.get(change[0],
@@ -391,7 +391,7 @@
391 # changed_content, versioned, parent, name, kind,391 # changed_content, versioned, parent, name, kind,
392 # executable)392 # executable)
393 try:393 try:
394 basis_entry = basis_inv[file_id]394 basis_entry = basis_inv.get_entry(file_id)
395 except errors.NoSuchId:395 except errors.NoSuchId:
396 # a change from basis->some_parents but file_id isn't in basis396 # a change from basis->some_parents but file_id isn't in basis
397 # so was new in the merge, which means it must have changed397 # so was new in the merge, which means it must have changed
@@ -1330,7 +1330,7 @@
1330 inv = self.revision_tree(parent_id).root_inventory1330 inv = self.revision_tree(parent_id).root_inventory
1331 inventory_cache[parent_id] = inv1331 inventory_cache[parent_id] = inv
1332 try:1332 try:
1333 parent_entry = inv[text_key[0]]1333 parent_entry = inv.get_entry(text_key[0])
1334 except (KeyError, errors.NoSuchId):1334 except (KeyError, errors.NoSuchId):
1335 parent_entry = None1335 parent_entry = None
1336 if parent_entry is not None:1336 if parent_entry is not None:
@@ -2610,7 +2610,7 @@
2610 for file_key in list(texts_possibly_new_in_tree):2610 for file_key in list(texts_possibly_new_in_tree):
2611 file_id, file_revision = file_key2611 file_id, file_revision = file_key
2612 try:2612 try:
2613 entry = basis_inv[file_id]2613 entry = basis_inv.get_entry(file_id)
2614 except errors.NoSuchId:2614 except errors.NoSuchId:
2615 continue2615 continue
2616 if entry.revision == file_revision:2616 if entry.revision == file_revision:
26172617
=== modified file 'breezy/bzr/workingtree.py'
--- breezy/bzr/workingtree.py 2018-03-24 17:48:04 +0000
+++ breezy/bzr/workingtree.py 2018-03-25 02:37:06 +0000
@@ -331,15 +331,15 @@
331 self._inventory_is_modified = True331 self._inventory_is_modified = True
332 # we preserve the root inventory entry object, but332 # we preserve the root inventory entry object, but
333 # unlinkit from the byid index333 # unlinkit from the byid index
334 del inv._byid[inv.root.file_id]334 inv.delete(inv.root.file_id)
335 inv.root.file_id = file_id335 inv.root.file_id = file_id
336 # and link it into the index with the new changed id.336 # and link it into the index with the new changed id.
337 inv._byid[inv.root.file_id] = inv.root337 inv._byid[inv.root.file_id] = inv.root
338 # and finally update all children to reference the new id.338 # and finally update all children to reference the new id.
339 # XXX: this should be safe to just look at the root.children339 # XXX: this should be safe to just look at the root.children
340 # list, not the WHOLE INVENTORY.340 # list, not the WHOLE INVENTORY.
341 for fid in inv:341 for fid in inv.iter_all_ids():
342 entry = inv[fid]342 entry = inv.get_entry(fid)
343 if entry.parent_id == orig_root_id:343 if entry.parent_id == orig_root_id:
344 entry.parent_id = inv.root.file_id344 entry.parent_id = inv.root.file_id
345345
@@ -744,7 +744,7 @@
744 # For unversioned files on win32, we just assume they are not744 # For unversioned files on win32, we just assume they are not
745 # executable745 # executable
746 return False746 return False
747 return inv[file_id].executable747 return inv.get_entry(file_id).executable
748748
749 def _is_executable_from_path_and_stat_from_stat(self, path, stat_result):749 def _is_executable_from_path_and_stat_from_stat(self, path, stat_result):
750 mode = stat_result.st_mode750 mode = stat_result.st_mode
@@ -753,7 +753,7 @@
753 def is_executable(self, path, file_id=None):753 def is_executable(self, path, file_id=None):
754 if not self._supports_executable():754 if not self._supports_executable():
755 inv, inv_file_id = self._path2inv_file_id(path, file_id)755 inv, inv_file_id = self._path2inv_file_id(path, file_id)
756 return inv[inv_file_id].executable756 return inv.get_entry(inv_file_id).executable
757 else:757 else:
758 mode = os.lstat(self.abspath(path)).st_mode758 mode = os.lstat(self.abspath(path)).st_mode
759 return bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)759 return bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)
@@ -985,7 +985,7 @@
985 child_inv = inventory.Inventory(root_id=None)985 child_inv = inventory.Inventory(root_id=None)
986 if file_id is None:986 if file_id is None:
987 file_id = self.path2id(sub_path)987 file_id = self.path2id(sub_path)
988 new_root = my_inv[file_id]988 new_root = my_inv.get_entry(file_id)
989 my_inv.remove_recursive_id(file_id)989 my_inv.remove_recursive_id(file_id)
990 new_root.parent_id = None990 new_root.parent_id = None
991 child_inv.add(new_root)991 child_inv.add(new_root)
@@ -1061,7 +1061,7 @@
1061 # absolute path1061 # absolute path
1062 fap = from_dir_abspath + '/' + f1062 fap = from_dir_abspath + '/' + f
10631063
1064 dir_ie = inv[from_dir_id]1064 dir_ie = inv.get_entry(from_dir_id)
1065 if dir_ie.kind == 'directory':1065 if dir_ie.kind == 'directory':
1066 f_ie = dir_ie.children.get(f)1066 f_ie = dir_ie.children.get(f)
1067 else:1067 else:
@@ -1178,7 +1178,7 @@
1178 raise errors.BzrMoveFailedError(1178 raise errors.BzrMoveFailedError(
1179 '', to_dir, errors.NotVersionedError(path=to_dir))1179 '', to_dir, errors.NotVersionedError(path=to_dir))
11801180
1181 to_dir_ie = to_inv[to_dir_id]1181 to_dir_ie = to_inv.get_entry(to_dir_id)
1182 if to_dir_ie.kind != 'directory':1182 if to_dir_ie.kind != 'directory':
1183 raise errors.BzrMoveFailedError(1183 raise errors.BzrMoveFailedError(
1184 '', to_dir, errors.NotADirectory(to_abs))1184 '', to_dir, errors.NotADirectory(to_abs))
@@ -1191,7 +1191,7 @@
1191 raise errors.BzrMoveFailedError(from_rel, to_dir,1191 raise errors.BzrMoveFailedError(from_rel, to_dir,
1192 errors.NotVersionedError(path=from_rel))1192 errors.NotVersionedError(path=from_rel))
11931193
1194 from_entry = from_inv[from_id]1194 from_entry = from_inv.get_entry(from_id)
1195 from_parent_id = from_entry.parent_id1195 from_parent_id = from_entry.parent_id
1196 to_rel = osutils.pathjoin(to_dir, from_tail)1196 to_rel = osutils.pathjoin(to_dir, from_tail)
1197 rename_entry = InventoryWorkingTree._RenameEntry(1197 rename_entry = InventoryWorkingTree._RenameEntry(
@@ -1258,11 +1258,11 @@
1258 from_rel, to_rel,1258 from_rel, to_rel,
1259 errors.NotVersionedError(path=from_rel))1259 errors.NotVersionedError(path=from_rel))
1260 # put entry back in the inventory so we can rename it1260 # put entry back in the inventory so we can rename it
1261 from_entry = basis_tree.root_inventory[from_id].copy()1261 from_entry = basis_tree.root_inventory.get_entry(from_id).copy()
1262 from_inv.add(from_entry)1262 from_inv.add(from_entry)
1263 else:1263 else:
1264 from_inv, from_inv_id = self._unpack_file_id(from_id)1264 from_inv, from_inv_id = self._unpack_file_id(from_id)
1265 from_entry = from_inv[from_inv_id]1265 from_entry = from_inv.get_entry(from_inv_id)
1266 from_parent_id = from_entry.parent_id1266 from_parent_id = from_entry.parent_id
1267 to_dir, to_tail = os.path.split(to_rel)1267 to_dir, to_tail = os.path.split(to_rel)
1268 to_inv, to_dir_id = self._path2inv_file_id(to_dir)1268 to_inv, to_dir_id = self._path2inv_file_id(to_dir)
@@ -1464,7 +1464,7 @@
1464 inv, inv_file_id = self._path2inv_file_id(path, file_id)1464 inv, inv_file_id = self._path2inv_file_id(path, file_id)
1465 if inv_file_id is None:1465 if inv_file_id is None:
1466 raise errors.NoSuchFile(self, path)1466 raise errors.NoSuchFile(self, path)
1467 return inv[inv_file_id].kind1467 return inv.get_entry(inv_file_id).kind
14681468
1469 def extras(self):1469 def extras(self):
1470 """Yield all unversioned files in this WorkingTree.1470 """Yield all unversioned files in this WorkingTree.
@@ -1658,7 +1658,7 @@
1658 else:1658 else:
1659 relroot = ""1659 relroot = ""
1660 # FIXME: stash the node in pending1660 # FIXME: stash the node in pending
1661 entry = inv[top_id]1661 entry = inv.get_entry(top_id)
1662 if entry.kind == 'directory':1662 if entry.kind == 'directory':
1663 for name, child in entry.sorted_children():1663 for name, child in entry.sorted_children():
1664 dirblock.append((relroot + name, name, child.kind, None,1664 dirblock.append((relroot + name, name, child.kind, None,
16651665
=== modified file 'breezy/bzr/workingtree_4.py'
--- breezy/bzr/workingtree_4.py 2018-03-24 17:48:04 +0000
+++ breezy/bzr/workingtree_4.py 2018-03-25 02:37:06 +0000
@@ -693,7 +693,7 @@
693 update_inventory = True693 update_inventory = True
694 inv = self.root_inventory694 inv = self.root_inventory
695 to_dir_id = to_entry[0][2]695 to_dir_id = to_entry[0][2]
696 to_dir_ie = inv[to_dir_id]696 to_dir_ie = inv.get_entry(to_dir_id)
697 else:697 else:
698 update_inventory = False698 update_inventory = False
699699
@@ -782,7 +782,7 @@
782 # to rollback782 # to rollback
783 if update_inventory:783 if update_inventory:
784 # rename the entry784 # rename the entry
785 from_entry = inv[from_id]785 from_entry = inv.get_entry(from_id)
786 current_parent = from_entry.parent_id786 current_parent = from_entry.parent_id
787 inv.rename(from_id, to_dir_id, from_tail)787 inv.rename(from_id, to_dir_id, from_tail)
788 rollbacks.add_cleanup(788 rollbacks.add_cleanup(
@@ -1885,7 +1885,7 @@
1885 def get_file_revision(self, path, file_id=None):1885 def get_file_revision(self, path, file_id=None):
1886 with self.lock_read():1886 with self.lock_read():
1887 inv, inv_file_id = self._path2inv_file_id(path, file_id)1887 inv, inv_file_id = self._path2inv_file_id(path, file_id)
1888 return inv[inv_file_id].revision1888 return inv.get_entry(inv_file_id).revision
18891889
1890 def get_file(self, path, file_id=None):1890 def get_file(self, path, file_id=None):
1891 return BytesIO(self.get_file_text(path, file_id))1891 return BytesIO(self.get_file_text(path, file_id))
@@ -1893,7 +1893,7 @@
1893 def get_file_size(self, path, file_id=None):1893 def get_file_size(self, path, file_id=None):
1894 """See Tree.get_file_size"""1894 """See Tree.get_file_size"""
1895 inv, inv_file_id = self._path2inv_file_id(path, file_id)1895 inv, inv_file_id = self._path2inv_file_id(path, file_id)
1896 return inv[inv_file_id].text_size1896 return inv.get_entry(inv_file_id).text_size
18971897
1898 def get_file_text(self, path, file_id=None):1898 def get_file_text(self, path, file_id=None):
1899 content = None1899 content = None
@@ -1911,7 +1911,7 @@
19111911
1912 def get_reference_revision(self, path, file_id=None):1912 def get_reference_revision(self, path, file_id=None):
1913 inv, inv_file_id = self._path2inv_file_id(path, file_id)1913 inv, inv_file_id = self._path2inv_file_id(path, file_id)
1914 return inv[inv_file_id].reference_revision1914 return inv.get_entry(inv_file_id).reference_revision
19151915
1916 def iter_files_bytes(self, desired_files):1916 def iter_files_bytes(self, desired_files):
1917 """See Tree.iter_files_bytes.1917 """See Tree.iter_files_bytes.
@@ -1976,7 +1976,7 @@
1976 inv, inv_file_id = self._path2inv_file_id(path)1976 inv, inv_file_id = self._path2inv_file_id(path)
1977 if inv_file_id is None:1977 if inv_file_id is None:
1978 return ('missing', None, None, None)1978 return ('missing', None, None, None)
1979 entry = inv[inv_file_id]1979 entry = inv.get_entry(inv_file_id)
1980 kind = entry.kind1980 kind = entry.kind
1981 if kind == 'file':1981 if kind == 'file':
1982 return (kind, entry.text_size, entry.executable, entry.text_sha1)1982 return (kind, entry.text_size, entry.executable, entry.text_sha1)
@@ -1987,7 +1987,7 @@
19871987
1988 def is_executable(self, path, file_id=None):1988 def is_executable(self, path, file_id=None):
1989 inv, inv_file_id = self._path2inv_file_id(path, file_id)1989 inv, inv_file_id = self._path2inv_file_id(path, file_id)
1990 ie = inv[inv_file_id]1990 ie = inv.get_entry(inv_file_id)
1991 if ie.kind != "file":1991 if ie.kind != "file":
1992 return False1992 return False
1993 return ie.executable1993 return ie.executable
@@ -2081,7 +2081,7 @@
2081 else:2081 else:
2082 relroot = ""2082 relroot = ""
2083 # FIXME: stash the node in pending2083 # FIXME: stash the node in pending
2084 entry = inv[file_id]2084 entry = inv.get_entry(file_id)
2085 for name, child in entry.sorted_children():2085 for name, child in entry.sorted_children():
2086 toppath = relroot + name2086 toppath = relroot + name
2087 dirblock.append((toppath, name, child.kind, None,2087 dirblock.append((toppath, name, child.kind, None,
20882088
=== modified file 'breezy/merge.py'
--- breezy/merge.py 2018-03-24 18:22:08 +0000
+++ breezy/merge.py 2018-03-25 02:37:06 +0000
@@ -956,7 +956,7 @@
956 lca_paths.append(path)956 lca_paths.append(path)
957957
958 try:958 try:
959 base_ie = base_inventory[file_id]959 base_ie = base_inventory.get_entry(file_id)
960 except errors.NoSuchId:960 except errors.NoSuchId:
961 base_ie = _none_entry961 base_ie = _none_entry
962 base_path = None962 base_path = None
@@ -964,7 +964,7 @@
964 base_path = self.base_tree.id2path(file_id)964 base_path = self.base_tree.id2path(file_id)
965965
966 try:966 try:
967 this_ie = this_inventory[file_id]967 this_ie = this_inventory.get_entry(file_id)
968 except errors.NoSuchId:968 except errors.NoSuchId:
969 this_ie = _none_entry969 this_ie = _none_entry
970 this_path = None970 this_path = None
@@ -1193,7 +1193,7 @@
1193 def merge_names(self, file_id):1193 def merge_names(self, file_id):
1194 def get_entry(tree):1194 def get_entry(tree):
1195 try:1195 try:
1196 return tree.root_inventory[file_id]1196 return tree.root_inventory.get_entry(file_id)
1197 except errors.NoSuchId:1197 except errors.NoSuchId:
1198 return None1198 return None
1199 this_entry = get_entry(self.this_tree)1199 this_entry = get_entry(self.this_tree)
@@ -1894,7 +1894,7 @@
1894 # XXX: The error would be clearer if it gave the URL of the source1894 # XXX: The error would be clearer if it gave the URL of the source
1895 # branch, but we don't have a reference to that here.1895 # branch, but we don't have a reference to that here.
1896 raise PathNotInTree(self._source_subpath, "Source tree")1896 raise PathNotInTree(self._source_subpath, "Source tree")
1897 subdir = other_inv[subdir_id]1897 subdir = other_inv.get_entry(subdir_id)
1898 parent_in_target = osutils.dirname(self._target_subdir)1898 parent_in_target = osutils.dirname(self._target_subdir)
1899 target_id = self.this_tree.path2id(parent_in_target)1899 target_id = self.this_tree.path2id(parent_in_target)
1900 if target_id is None:1900 if target_id is None:
19011901
=== modified file 'breezy/plugins/fastimport/bzr_commit_handler.py'
--- breezy/plugins/fastimport/bzr_commit_handler.py 2018-03-24 23:49:53 +0000
+++ breezy/plugins/fastimport/bzr_commit_handler.py 2018-03-25 02:37:06 +0000
@@ -375,7 +375,7 @@
375 return375 return
376 # Record it376 # Record it
377 try:377 try:
378 old_ie = inv[file_id]378 old_ie = inv.get_entry(file_id)
379 except errors.NoSuchId:379 except errors.NoSuchId:
380 try:380 try:
381 self.record_new(path, ie)381 self.record_new(path, ie)
@@ -438,7 +438,7 @@
438 raise KeyError438 raise KeyError
439 if file_id is None:439 if file_id is None:
440 raise KeyError440 raise KeyError
441 result = inv[file_id]441 result = inv.get_entry(file_id)
442 # dirname must be a directory for us to return it442 # dirname must be a directory for us to return it
443 if result.kind == 'directory':443 if result.kind == 'directory':
444 self.directory_entries[dirname] = result444 self.directory_entries[dirname] = result
@@ -459,7 +459,7 @@
459 self.mutter("ignoring delete of %s as not in inventory", path)459 self.mutter("ignoring delete of %s as not in inventory", path)
460 return460 return
461 try:461 try:
462 ie = inv[file_id]462 ie = inv.get_entry(file_id)
463 except errors.NoSuchId:463 except errors.NoSuchId:
464 self.mutter("ignoring delete of %s as not in inventory", path)464 self.mutter("ignoring delete of %s as not in inventory", path)
465 return465 return
@@ -479,7 +479,7 @@
479 self.warning("ignoring copy of %s to %s - source does not exist",479 self.warning("ignoring copy of %s to %s - source does not exist",
480 src_path, dest_path)480 src_path, dest_path)
481 return481 return
482 ie = inv[file_id]482 ie = inv.get_entry(file_id)
483 kind = ie.kind483 kind = ie.kind
484 if kind == 'file':484 if kind == 'file':
485 if newly_changed:485 if newly_changed:
@@ -509,11 +509,11 @@
509 "ignoring rename of %s to %s - old path does not exist" %509 "ignoring rename of %s to %s - old path does not exist" %
510 (old_path, new_path))510 (old_path, new_path))
511 return511 return
512 ie = inv[file_id]512 ie = inv.get_entry(file_id)
513 rev_id = ie.revision513 rev_id = ie.revision
514 new_file_id = inv.path2id(new_path)514 new_file_id = inv.path2id(new_path)
515 if new_file_id is not None:515 if new_file_id is not None:
516 self.record_delete(new_path, inv[new_file_id])516 self.record_delete(new_path, inv.get_entry(new_file_id))
517 self.record_rename(old_path, new_path, file_id, ie)517 self.record_rename(old_path, new_path, file_id, ie)
518518
519 # The revision-id for this entry will be/has been updated and519 # The revision-id for this entry will be/has been updated and
@@ -713,7 +713,7 @@
713 file_id = new_inv.path2id(dir)713 file_id = new_inv.path2id(dir)
714 if file_id is None:714 if file_id is None:
715 continue715 continue
716 ie = new_inv[file_id]716 ie = new_inv.get_entry(file_id)
717 if ie.kind != 'directory':717 if ie.kind != 'directory':
718 continue718 continue
719 if len(ie.children) == 0:719 if len(ie.children) == 0:
@@ -734,7 +734,7 @@
734 else:734 else:
735 new_inv = inventory.Inventory(revision_id=self.revision_id)735 new_inv = inventory.Inventory(revision_id=self.revision_id)
736 # This is set in the delta so remove it to prevent a duplicate736 # This is set in the delta so remove it to prevent a duplicate
737 del new_inv[inventory.ROOT_ID]737 new_inv.delete(inventory.ROOT_ID)
738 try:738 try:
739 new_inv.apply_delta(delta)739 new_inv.apply_delta(delta)
740 except errors.InconsistentDelta:740 except errors.InconsistentDelta:
741741
=== modified file 'breezy/plugins/fastimport/revision_store.py'
--- breezy/plugins/fastimport/revision_store.py 2018-03-10 13:56:26 +0000
+++ breezy/plugins/fastimport/revision_store.py 2018-03-25 02:37:06 +0000
@@ -79,7 +79,7 @@
79 except KeyError:79 except KeyError:
80 # The content wasn't shown as 'new'. Just validate this fact80 # The content wasn't shown as 'new'. Just validate this fact
81 assert file_id not in self._new_info_by_id81 assert file_id not in self._new_info_by_id
82 old_ie = self._basis_inv[file_id]82 old_ie = self._basis_inv.get_entry(file_id)
83 old_text_key = (file_id, old_ie.revision)83 old_text_key = (file_id, old_ie.revision)
84 stream = self._repo.texts.get_record_stream([old_text_key],84 stream = self._repo.texts.get_record_stream([old_text_key],
85 'unordered', True)85 'unordered', True)
@@ -91,7 +91,7 @@
91 if file_id in self._new_info_by_id:91 if file_id in self._new_info_by_id:
92 ie = self._new_info_by_id[file_id][1]92 ie = self._new_info_by_id[file_id][1]
93 return ie.symlink_target93 return ie.symlink_target
94 return self._basis_inv[file_id].symlink_target94 return self._basis_inv.get_entry(file_id).symlink_target
9595
96 def get_reference_revision(self, path, file_id=None):96 def get_reference_revision(self, path, file_id=None):
97 raise NotImplementedError(_TreeShim.get_reference_revision)97 raise NotImplementedError(_TreeShim.get_reference_revision)
@@ -114,7 +114,7 @@
114 # Since the *very* common case is that the file already exists, it114 # Since the *very* common case is that the file already exists, it
115 # probably is better to optimize for that115 # probably is better to optimize for that
116 try:116 try:
117 old_ie = basis_inv[file_id]117 old_ie = basis_inv.get_entry(file_id)
118 except errors.NoSuchId:118 except errors.NoSuchId:
119 old_ie = None119 old_ie = None
120 if ie is None:120 if ie is None:
@@ -281,12 +281,12 @@
281 heads = []281 heads = []
282 for inv in self._rev_parent_invs:282 for inv in self._rev_parent_invs:
283 try:283 try:
284 old_rev = inv[ie.file_id].revision284 old_rev = inv.get_entry(ie.file_id).revision
285 except errors.NoSuchId:285 except errors.NoSuchId:
286 pass286 pass
287 else:287 else:
288 if old_rev in head_set:288 if old_rev in head_set:
289 rev_id = inv[ie.file_id].revision289 rev_id = inv.get_entry(ie.file_id).revision
290 heads.append(rev_id)290 heads.append(rev_id)
291 head_set.remove(rev_id)291 head_set.remove(rev_id)
292292
@@ -511,7 +511,7 @@
511 else:511 else:
512 new_inv = inventory.Inventory(revision_id=revision_id)512 new_inv = inventory.Inventory(revision_id=revision_id)
513 # This is set in the delta so remove it to prevent a duplicate513 # This is set in the delta so remove it to prevent a duplicate
514 del new_inv[inventory.ROOT_ID]514 new_inv.delete(inventory.ROOT_ID)
515 new_inv.apply_delta(inv_delta)515 new_inv.apply_delta(inv_delta)
516 validator = self.repo.add_inventory(revision_id, new_inv, parents)516 validator = self.repo.add_inventory(revision_id, new_inv, parents)
517 return validator, new_inv517 return validator, new_inv
518518
=== modified file 'breezy/plugins/repodebug/file_refs.py'
--- breezy/plugins/repodebug/file_refs.py 2017-09-07 08:21:29 +0000
+++ breezy/plugins/repodebug/file_refs.py 2018-03-25 02:37:06 +0000
@@ -42,7 +42,7 @@
42 # print len(all_invs)42 # print len(all_invs)
43 for inv in repo.iter_inventories(all_invs, 'unordered'):43 for inv in repo.iter_inventories(all_invs, 'unordered'):
44 try:44 try:
45 entry = inv[file_id]45 entry = inv.get_entry(file_id)
46 except errors.NoSuchId:46 except errors.NoSuchId:
47 # This file doesn't even appear in this inv.47 # This file doesn't even appear in this inv.
48 continue48 continue
4949
=== modified file 'breezy/tests/per_interrepository/test_fetch.py'
--- breezy/tests/per_interrepository/test_fetch.py 2017-11-24 09:25:13 +0000
+++ breezy/tests/per_interrepository/test_fetch.py 2018-03-25 02:37:06 +0000
@@ -498,7 +498,7 @@
498 source.lock_write()498 source.lock_write()
499 self.addCleanup(source.unlock)499 self.addCleanup(source.unlock)
500 source.start_write_group()500 source.start_write_group()
501 inv['id'].revision = 'b'501 inv.get_entry('id').revision = 'b'
502 inv.revision_id = 'b'502 inv.revision_id = 'b'
503 sha1 = source.add_inventory('b', inv, ['a'])503 sha1 = source.add_inventory('b', inv, ['a'])
504 rev = Revision(timestamp=0,504 rev = Revision(timestamp=0,
505505
=== modified file 'breezy/tests/per_intertree/test_compare.py'
--- breezy/tests/per_intertree/test_compare.py 2018-03-24 23:49:53 +0000
+++ breezy/tests/per_intertree/test_compare.py 2018-03-25 02:37:06 +0000
@@ -590,7 +590,7 @@
590 (from_basename, to_basename), (kind, None), (False, False))590 (from_basename, to_basename), (kind, None), (False, False))
591591
592 def deleted(self, tree, file_id):592 def deleted(self, tree, file_id):
593 entry = tree.root_inventory[file_id]593 entry = tree.root_inventory.get_entry(file_id)
594 path = tree.id2path(file_id)594 path = tree.id2path(file_id)
595 return (file_id, (path, None), True, (True, False), (entry.parent_id, None),595 return (file_id, (path, None), True, (True, False), (entry.parent_id, None),
596 (entry.name, None), (entry.kind, None),596 (entry.name, None), (entry.kind, None),
597597
=== modified file 'breezy/tests/per_inventory/basics.py'
--- breezy/tests/per_inventory/basics.py 2018-02-17 00:06:35 +0000
+++ breezy/tests/per_inventory/basics.py 2018-03-25 02:37:06 +0000
@@ -107,7 +107,7 @@
107 (None, "a", "a-id", self.make_file('a-id', 'a', 'tree-root')),107 (None, "a", "a-id", self.make_file('a-id', 'a', 'tree-root')),
108 ], 'new-rev-1')108 ], 'new-rev-1')
109 self.assertEqual('a', inv.id2path('a-id'))109 self.assertEqual('a', inv.id2path('a-id'))
110 a_ie = inv['a-id']110 a_ie = inv.get_entry('a-id')
111 b_ie = self.make_file(a_ie.file_id, "b", a_ie.parent_id)111 b_ie = self.make_file(a_ie.file_id, "b", a_ie.parent_id)
112 inv = inv.create_by_apply_delta([("a", "b", "a-id", b_ie)], 'new-rev-2')112 inv = inv.create_by_apply_delta([("a", "b", "a-id", b_ie)], 'new-rev-2')
113 self.assertEqual("b", inv.id2path('a-id'))113 self.assertEqual("b", inv.id2path('a-id'))
@@ -128,7 +128,7 @@
128 inv = self.make_init_inventory()128 inv = self.make_init_inventory()
129 self.assertTrue(inv.is_root('tree-root'))129 self.assertTrue(inv.is_root('tree-root'))
130 self.assertFalse(inv.is_root('booga'))130 self.assertFalse(inv.is_root('booga'))
131 ie = inv['tree-root'].copy()131 ie = inv.get_entry('tree-root').copy()
132 ie.file_id = 'booga'132 ie.file_id = 'booga'
133 inv = inv.create_by_apply_delta([("", None, "tree-root", None),133 inv = inv.create_by_apply_delta([("", None, "tree-root", None),
134 (None, "", "booga", ie)], 'new-rev-2')134 (None, "", "booga", ie)], 'new-rev-2')
135135
=== modified file 'breezy/tests/per_repository_reference/test_add_inventory.py'
--- breezy/tests/per_repository_reference/test_add_inventory.py 2017-05-21 18:10:28 +0000
+++ breezy/tests/per_repository_reference/test_add_inventory.py 2018-03-25 02:37:06 +0000
@@ -49,7 +49,7 @@
49 repo.lock_read()49 repo.lock_read()
50 self.addCleanup(repo.unlock)50 self.addCleanup(repo.unlock)
51 inv2 = repo.get_inventory(revid)51 inv2 = repo.get_inventory(revid)
52 content1 = dict((file_id, inv[file_id]) for file_id in inv)52 content1 = dict((file_id, inv.get_entry(file_id)) for file_id in inv.iter_all_ids())
53 content2 = dict((file_id, inv[file_id]) for file_id in inv2)53 content2 = dict((file_id, inv.get_entry(file_id)) for file_id in inv2.iter_all_ids())
54 self.assertEqual(content1, content2)54 self.assertEqual(content1, content2)
55 self.assertRaises(errors.NoSuchRevision, base.get_inventory, revid)55 self.assertRaises(errors.NoSuchRevision, base.get_inventory, revid)
5656
=== modified file 'breezy/tests/per_repository_vf/test_add_inventory_by_delta.py'
--- breezy/tests/per_repository_vf/test_add_inventory_by_delta.py 2017-05-21 18:10:28 +0000
+++ breezy/tests/per_repository_vf/test_add_inventory_by_delta.py 2018-03-25 02:37:06 +0000
@@ -73,9 +73,9 @@
73 for file_id in deletes:73 for file_id in deletes:
74 delta.append((old.id2path(file_id), None, file_id, None))74 delta.append((old.id2path(file_id), None, file_id, None))
75 for file_id in adds:75 for file_id in adds:
76 delta.append((None, new.id2path(file_id), file_id, new[file_id]))76 delta.append((None, new.id2path(file_id), file_id, new.get_entry(file_id)))
77 for file_id in common:77 for file_id in common:
78 if old[file_id] != new[file_id]:78 if old.get_entry(file_id) != new.get_entry(file_id):
79 delta.append((old.id2path(file_id), new.id2path(file_id),79 delta.append((old.id2path(file_id), new.id2path(file_id),
80 file_id, new[file_id]))80 file_id, new[file_id]))
81 return delta81 return delta
8282
=== modified file 'breezy/tests/per_repository_vf/test_fileid_involved.py'
--- breezy/tests/per_repository_vf/test_fileid_involved.py 2018-03-20 00:30:39 +0000
+++ breezy/tests/per_repository_vf/test_fileid_involved.py 2018-03-25 02:37:06 +0000
@@ -51,7 +51,7 @@
51 old_rt = b.repository.revision_tree('A-id')51 old_rt = b.repository.revision_tree('A-id')
52 new_inv = inventory.mutable_inventory_from_tree(old_rt)52 new_inv = inventory.mutable_inventory_from_tree(old_rt)
53 new_inv.revision_id = 'B-id'53 new_inv.revision_id = 'B-id'
54 new_inv['a-file-id'].revision = 'ghost-id'54 new_inv.get_entry('a-file-id').revision = 'ghost-id'
55 new_rev = _mod_revision.Revision('B-id',55 new_rev = _mod_revision.Revision('B-id',
56 timestamp=time.time(),56 timestamp=time.time(),
57 timezone=0,57 timezone=0,
5858
=== modified file 'breezy/tests/per_tree/test_tree.py'
--- breezy/tests/per_tree/test_tree.py 2018-03-24 23:49:53 +0000
+++ breezy/tests/per_tree/test_tree.py 2018-03-25 02:37:06 +0000
@@ -107,7 +107,7 @@
107 tree = self.create_nested()107 tree = self.create_nested()
108 tree.lock_read()108 tree.lock_read()
109 self.addCleanup(tree.unlock)109 self.addCleanup(tree.unlock)
110 entry = tree.root_inventory['sub-root']110 entry = tree.root_inventory.get_entry('sub-root')
111 self.assertEqual([(u'subtree', 'sub-root')],111 self.assertEqual([(u'subtree', 'sub-root')],
112 list(tree.iter_references()))112 list(tree.iter_references()))
113113
114114
=== modified file 'breezy/tests/per_workingtree/test_nested_specifics.py'
--- breezy/tests/per_workingtree/test_nested_specifics.py 2018-03-22 02:21:11 +0000
+++ breezy/tests/per_workingtree/test_nested_specifics.py 2018-03-25 02:37:06 +0000
@@ -44,7 +44,7 @@
44 tree.lock_read()44 tree.lock_read()
45 self.addCleanup(tree.unlock)45 self.addCleanup(tree.unlock)
46 self.assertEqual('subtree-revision',46 self.assertEqual('subtree-revision',
47 tree.root_inventory['subtree-id'].reference_revision)47 tree.root_inventory.get_entry('subtree-id').reference_revision)
4848
49 def test_extract_while_locked(self):49 def test_extract_while_locked(self):
50 tree = self.make_branch_and_tree('.')50 tree = self.make_branch_and_tree('.')
5151
=== modified file 'breezy/tests/per_workingtree/test_parents.py'
--- breezy/tests/per_workingtree/test_parents.py 2018-03-24 13:45:31 +0000
+++ breezy/tests/per_workingtree/test_parents.py 2018-03-25 02:37:06 +0000
@@ -419,11 +419,11 @@
419 for file_id in deletes:419 for file_id in deletes:
420 delta.append((old.id2path(file_id), None, file_id, None))420 delta.append((old.id2path(file_id), None, file_id, None))
421 for file_id in adds:421 for file_id in adds:
422 delta.append((None, new.id2path(file_id), file_id, new[file_id]))422 delta.append((None, new.id2path(file_id), file_id, new.get_entry(file_id)))
423 for file_id in common:423 for file_id in common:
424 if old[file_id] != new[file_id]:424 if old.get_entry(file_id) != new.get_entry(file_id):
425 delta.append((old.id2path(file_id), new.id2path(file_id),425 delta.append((old.id2path(file_id), new.id2path(file_id),
426 file_id, new[file_id]))426 file_id, new.get_entry(file_id)))
427 return delta427 return delta
428428
429 def fake_up_revision(self, tree, revid, shape):429 def fake_up_revision(self, tree, revid, shape):
@@ -440,7 +440,7 @@
440 def get_file_text(self, path, file_id=None):440 def get_file_text(self, path, file_id=None):
441 if file_id is None:441 if file_id is None:
442 file_id = self.path2id(path)442 file_id = self.path2id(path)
443 ie = self.root_inventory[file_id]443 ie = self.root_inventory.get_entry(file_id)
444 if ie.kind != "file":444 if ie.kind != "file":
445 return ""445 return ""
446 return 'a' * ie.text_size446 return 'a' * ie.text_size
447447
=== modified file 'breezy/tests/test_commit.py'
--- breezy/tests/test_commit.py 2018-03-12 00:47:15 +0000
+++ breezy/tests/test_commit.py 2018-03-25 02:37:06 +0000
@@ -331,9 +331,9 @@
331 wt.unlock()331 wt.unlock()
332332
333 inv = b.repository.get_inventory(r4)333 inv = b.repository.get_inventory(r4)
334 eq(inv['hello-id'].revision, r4)334 eq(inv.get_entry('hello-id').revision, r4)
335 eq(inv['a-id'].revision, r1)335 eq(inv.get_entry('a-id').revision, r1)
336 eq(inv['b-id'].revision, r3)336 eq(inv.get_entry('b-id').revision, r3)
337337
338 def test_removed_commit(self):338 def test_removed_commit(self):
339 """Commit with a removed file"""339 """Commit with a removed file"""
@@ -373,10 +373,10 @@
373 ['dirid', 'file1id', 'file2id'])373 ['dirid', 'file1id', 'file2id'])
374 wt.commit('dir/file1', specific_files=['dir/file1'], rev_id='1')374 wt.commit('dir/file1', specific_files=['dir/file1'], rev_id='1')
375 inv = b.repository.get_inventory('1')375 inv = b.repository.get_inventory('1')
376 self.assertEqual('1', inv['dirid'].revision)376 self.assertEqual('1', inv.get_entry('dirid').revision)
377 self.assertEqual('1', inv['file1id'].revision)377 self.assertEqual('1', inv.get_entry('file1id').revision)
378 # FIXME: This should raise a KeyError I think, rbc20051006378 # FIXME: This should raise a KeyError I think, rbc20051006
379 self.assertRaises(BzrError, inv.__getitem__, 'file2id')379 self.assertRaises(BzrError, inv.get_entry, 'file2id')
380380
381 def test_strict_commit(self):381 def test_strict_commit(self):
382 """Try and commit with unknown files and strict = True, should fail."""382 """Try and commit with unknown files and strict = True, should fail."""
383383
=== modified file 'breezy/tests/test_dirstate.py'
--- breezy/tests/test_dirstate.py 2017-11-17 03:06:50 +0000
+++ breezy/tests/test_dirstate.py 2018-03-25 02:37:06 +0000
@@ -925,7 +925,7 @@
925 for entry in state._iter_entries():925 for entry in state._iter_entries():
926 values.append(entry[0] + entry[1][0][:1])926 values.append(entry[0] + entry[1][0][:1])
927 self.assertEqual(expected_result1, values)927 self.assertEqual(expected_result1, values)
928 del inv['b-id']928 inv.delete('b-id')
929 state.set_state_from_inventory(inv)929 state.set_state_from_inventory(inv)
930 values = []930 values = []
931 for entry in state._iter_entries():931 for entry in state._iter_entries():
932932
=== modified file 'breezy/tests/test_inv.py'
--- breezy/tests/test_inv.py 2018-02-16 19:38:39 +0000
+++ breezy/tests/test_inv.py 2018-03-25 02:37:06 +0000
@@ -314,7 +314,7 @@
314 inv.root.file_id = b'some-new-root'314 inv.root.file_id = b'some-new-root'
315 ie.name = u'file2'315 ie.name = u'file2'
316 self.assertEqual(b'some-tree-root', inv2.root.file_id)316 self.assertEqual(b'some-tree-root', inv2.root.file_id)
317 self.assertEqual(u'hello', inv2[b'hello-id'].name)317 self.assertEqual(u'hello', inv2.get_entry(b'hello-id').name)
318318
319 def test_copy_empty(self):319 def test_copy_empty(self):
320 """Make sure an empty inventory can be copied."""320 """Make sure an empty inventory can be copied."""
@@ -611,7 +611,7 @@
611 file1.text_sha1 = ''611 file1.text_sha1 = ''
612 delta = [(None, u'path', 'file-id', file1)]612 delta = [(None, u'path', 'file-id', file1)]
613 res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)613 res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
614 self.assertEqual('file-id', res_inv['file-id'].file_id)614 self.assertEqual('file-id', res_inv.get_entry('file-id').file_id)
615615
616 def test_remove_file(self):616 def test_remove_file(self):
617 inv = self.get_empty_inventory()617 inv = self.get_empty_inventory()
@@ -940,18 +940,18 @@
940 inv.revision_id = "revid"940 inv.revision_id = "revid"
941 inv.root.revision = "rootrev"941 inv.root.revision = "rootrev"
942 inv.add(InventoryFile("fileid", "file", inv.root.file_id))942 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
943 inv["fileid"].revision = "filerev"943 inv.get_entry("fileid").revision = "filerev"
944 inv["fileid"].executable = True944 inv.get_entry("fileid").executable = True
945 inv["fileid"].text_sha1 = "ffff"945 inv.get_entry("fileid").text_sha1 = "ffff"
946 inv["fileid"].text_size = 1946 inv.get_entry("fileid").text_size = 1
947 chk_bytes = self.get_chk_bytes()947 chk_bytes = self.get_chk_bytes()
948 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)948 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
949 bytes = ''.join(chk_inv.to_lines())949 bytes = ''.join(chk_inv.to_lines())
950 new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))950 new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
951 root_entry = new_inv[inv.root.file_id]951 root_entry = new_inv.get_entry(inv.root.file_id)
952 self.assertEqual(None, root_entry._children)952 self.assertEqual(None, root_entry._children)
953 self.assertEqual({'file'}, set(root_entry.children))953 self.assertEqual({'file'}, set(root_entry.children))
954 file_direct = new_inv["fileid"]954 file_direct = new_inv.get_entry("fileid")
955 file_found = root_entry.children['file']955 file_found = root_entry.children['file']
956 self.assertEqual(file_direct.kind, file_found.kind)956 self.assertEqual(file_direct.kind, file_found.kind)
957 self.assertEqual(file_direct.file_id, file_found.file_id)957 self.assertEqual(file_direct.file_id, file_found.file_id)
@@ -977,20 +977,20 @@
977 self.assertEqual(120, p_id_basename._root_node.maximum_size)977 self.assertEqual(120, p_id_basename._root_node.maximum_size)
978 self.assertEqual(2, p_id_basename._root_node._key_width)978 self.assertEqual(2, p_id_basename._root_node._key_width)
979979
980 def test___iter__(self):980 def test_iter_all_ids(self):
981 inv = Inventory()981 inv = Inventory()
982 inv.revision_id = "revid"982 inv.revision_id = "revid"
983 inv.root.revision = "rootrev"983 inv.root.revision = "rootrev"
984 inv.add(InventoryFile("fileid", "file", inv.root.file_id))984 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
985 inv["fileid"].revision = "filerev"985 inv.get_entry("fileid").revision = "filerev"
986 inv["fileid"].executable = True986 inv.get_entry("fileid").executable = True
987 inv["fileid"].text_sha1 = "ffff"987 inv.get_entry("fileid").text_sha1 = "ffff"
988 inv["fileid"].text_size = 1988 inv.get_entry("fileid").text_size = 1
989 chk_bytes = self.get_chk_bytes()989 chk_bytes = self.get_chk_bytes()
990 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)990 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
991 bytes = ''.join(chk_inv.to_lines())991 bytes = ''.join(chk_inv.to_lines())
992 new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))992 new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
993 fileids = sorted(new_inv.__iter__())993 fileids = sorted(new_inv.iter_all_ids())
994 self.assertEqual([inv.root.file_id, "fileid"], fileids)994 self.assertEqual([inv.root.file_id, "fileid"], fileids)
995995
996 def test__len__(self):996 def test__len__(self):
@@ -998,29 +998,29 @@
998 inv.revision_id = "revid"998 inv.revision_id = "revid"
999 inv.root.revision = "rootrev"999 inv.root.revision = "rootrev"
1000 inv.add(InventoryFile("fileid", "file", inv.root.file_id))1000 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1001 inv["fileid"].revision = "filerev"1001 inv.get_entry("fileid").revision = "filerev"
1002 inv["fileid"].executable = True1002 inv.get_entry("fileid").executable = True
1003 inv["fileid"].text_sha1 = "ffff"1003 inv.get_entry("fileid").text_sha1 = "ffff"
1004 inv["fileid"].text_size = 11004 inv.get_entry("fileid").text_size = 1
1005 chk_bytes = self.get_chk_bytes()1005 chk_bytes = self.get_chk_bytes()
1006 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1006 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1007 self.assertEqual(2, len(chk_inv))1007 self.assertEqual(2, len(chk_inv))
10081008
1009 def test___getitem__(self):1009 def test_get_entry(self):
1010 inv = Inventory()1010 inv = Inventory()
1011 inv.revision_id = b"revid"1011 inv.revision_id = b"revid"
1012 inv.root.revision = b"rootrev"1012 inv.root.revision = b"rootrev"
1013 inv.add(InventoryFile(b"fileid", u"file", inv.root.file_id))1013 inv.add(InventoryFile(b"fileid", u"file", inv.root.file_id))
1014 inv[b"fileid"].revision = b"filerev"1014 inv.get_entry(b"fileid").revision = b"filerev"
1015 inv[b"fileid"].executable = True1015 inv.get_entry(b"fileid").executable = True
1016 inv[b"fileid"].text_sha1 = b"ffff"1016 inv.get_entry(b"fileid").text_sha1 = b"ffff"
1017 inv[b"fileid"].text_size = 11017 inv.get_entry(b"fileid").text_size = 1
1018 chk_bytes = self.get_chk_bytes()1018 chk_bytes = self.get_chk_bytes()
1019 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1019 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1020 data = b''.join(chk_inv.to_lines())1020 data = b''.join(chk_inv.to_lines())
1021 new_inv = CHKInventory.deserialise(chk_bytes, data, (b"revid",))1021 new_inv = CHKInventory.deserialise(chk_bytes, data, (b"revid",))
1022 root_entry = new_inv[inv.root.file_id]1022 root_entry = new_inv.get_entry(inv.root.file_id)
1023 file_entry = new_inv[b"fileid"]1023 file_entry = new_inv.get_entry(b"fileid")
1024 self.assertEqual("directory", root_entry.kind)1024 self.assertEqual("directory", root_entry.kind)
1025 self.assertEqual(inv.root.file_id, root_entry.file_id)1025 self.assertEqual(inv.root.file_id, root_entry.file_id)
1026 self.assertEqual(inv.root.parent_id, root_entry.parent_id)1026 self.assertEqual(inv.root.parent_id, root_entry.parent_id)
@@ -1034,17 +1034,17 @@
1034 self.assertEqual(b"ffff", file_entry.text_sha1)1034 self.assertEqual(b"ffff", file_entry.text_sha1)
1035 self.assertEqual(1, file_entry.text_size)1035 self.assertEqual(1, file_entry.text_size)
1036 self.assertEqual(True, file_entry.executable)1036 self.assertEqual(True, file_entry.executable)
1037 self.assertRaises(errors.NoSuchId, new_inv.__getitem__, 'missing')1037 self.assertRaises(errors.NoSuchId, new_inv.get_entry, 'missing')
10381038
1039 def test_has_id_true(self):1039 def test_has_id_true(self):
1040 inv = Inventory()1040 inv = Inventory()
1041 inv.revision_id = "revid"1041 inv.revision_id = "revid"
1042 inv.root.revision = "rootrev"1042 inv.root.revision = "rootrev"
1043 inv.add(InventoryFile("fileid", "file", inv.root.file_id))1043 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1044 inv["fileid"].revision = "filerev"1044 inv.get_entry("fileid").revision = "filerev"
1045 inv["fileid"].executable = True1045 inv.get_entry("fileid").executable = True
1046 inv["fileid"].text_sha1 = "ffff"1046 inv.get_entry("fileid").text_sha1 = "ffff"
1047 inv["fileid"].text_size = 11047 inv.get_entry("fileid").text_size = 1
1048 chk_bytes = self.get_chk_bytes()1048 chk_bytes = self.get_chk_bytes()
1049 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1049 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1050 self.assertTrue(chk_inv.has_id('fileid'))1050 self.assertTrue(chk_inv.has_id('fileid'))
@@ -1066,11 +1066,11 @@
1066 fileentry = InventoryFile("fileid", "file", "dirid")1066 fileentry = InventoryFile("fileid", "file", "dirid")
1067 inv.add(direntry)1067 inv.add(direntry)
1068 inv.add(fileentry)1068 inv.add(fileentry)
1069 inv["fileid"].revision = "filerev"1069 inv.get_entry("fileid").revision = "filerev"
1070 inv["fileid"].executable = True1070 inv.get_entry("fileid").executable = True
1071 inv["fileid"].text_sha1 = "ffff"1071 inv.get_entry("fileid").text_sha1 = "ffff"
1072 inv["fileid"].text_size = 11072 inv.get_entry("fileid").text_size = 1
1073 inv["dirid"].revision = "filerev"1073 inv.get_entry("dirid").revision = "filerev"
1074 chk_bytes = self.get_chk_bytes()1074 chk_bytes = self.get_chk_bytes()
1075 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1075 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1076 bytes = ''.join(chk_inv.to_lines())1076 bytes = ''.join(chk_inv.to_lines())
@@ -1087,11 +1087,11 @@
1087 fileentry = InventoryFile("fileid", "file", "dirid")1087 fileentry = InventoryFile("fileid", "file", "dirid")
1088 inv.add(direntry)1088 inv.add(direntry)
1089 inv.add(fileentry)1089 inv.add(fileentry)
1090 inv["fileid"].revision = "filerev"1090 inv.get_entry("fileid").revision = "filerev"
1091 inv["fileid"].executable = True1091 inv.get_entry("fileid").executable = True
1092 inv["fileid"].text_sha1 = "ffff"1092 inv.get_entry("fileid").text_sha1 = "ffff"
1093 inv["fileid"].text_size = 11093 inv.get_entry("fileid").text_size = 1
1094 inv["dirid"].revision = "filerev"1094 inv.get_entry("dirid").revision = "filerev"
1095 chk_bytes = self.get_chk_bytes()1095 chk_bytes = self.get_chk_bytes()
1096 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1096 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1097 bytes = ''.join(chk_inv.to_lines())1097 bytes = ''.join(chk_inv.to_lines())
@@ -1172,18 +1172,18 @@
1172 inv.revision_id = "revid"1172 inv.revision_id = "revid"
1173 inv.root.revision = "rootrev"1173 inv.root.revision = "rootrev"
1174 inv.add(InventoryFile("fileid", "file", inv.root.file_id))1174 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1175 inv["fileid"].revision = "filerev"1175 inv.get_entry("fileid").revision = "filerev"
1176 inv["fileid"].executable = True1176 inv.get_entry("fileid").executable = True
1177 inv["fileid"].text_sha1 = "ffff"1177 inv.get_entry("fileid").text_sha1 = "ffff"
1178 inv["fileid"].text_size = 11178 inv.get_entry("fileid").text_size = 1
1179 inv2 = Inventory()1179 inv2 = Inventory()
1180 inv2.revision_id = "revid2"1180 inv2.revision_id = "revid2"
1181 inv2.root.revision = "rootrev"1181 inv2.root.revision = "rootrev"
1182 inv2.add(InventoryFile("fileid", "file", inv.root.file_id))1182 inv2.add(InventoryFile("fileid", "file", inv.root.file_id))
1183 inv2["fileid"].revision = "filerev2"1183 inv2.get_entry("fileid").revision = "filerev2"
1184 inv2["fileid"].executable = False1184 inv2.get_entry("fileid").executable = False
1185 inv2["fileid"].text_sha1 = "bbbb"1185 inv2.get_entry("fileid").text_sha1 = "bbbb"
1186 inv2["fileid"].text_size = 21186 inv2.get_entry("fileid").text_size = 2
1187 # get fresh objects.1187 # get fresh objects.
1188 chk_bytes = self.get_chk_bytes()1188 chk_bytes = self.get_chk_bytes()
1189 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1189 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
@@ -1202,10 +1202,10 @@
1202 inv.revision_id = "revid"1202 inv.revision_id = "revid"
1203 inv.root.revision = "rootrev"1203 inv.root.revision = "rootrev"
1204 inv.add(InventoryFile("fileid", "file", inv.root.file_id))1204 inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1205 inv["fileid"].revision = "filerev"1205 inv.get_entry("fileid").revision = "filerev"
1206 inv["fileid"].executable = True1206 inv.get_entry("fileid").executable = True
1207 inv["fileid"].text_sha1 = "ffff"1207 inv.get_entry("fileid").text_sha1 = "ffff"
1208 inv["fileid"].text_size = 11208 inv.get_entry("fileid").text_size = 1
1209 # get fresh objects.1209 # get fresh objects.
1210 chk_bytes = self.get_chk_bytes()1210 chk_bytes = self.get_chk_bytes()
1211 tmp_inv = CHKInventory.from_inventory(chk_bytes, inv)1211 tmp_inv = CHKInventory.from_inventory(chk_bytes, inv)
@@ -1327,14 +1327,14 @@
1327 inv.root.revision = "rootrev"1327 inv.root.revision = "rootrev"
1328 root_id = inv.root.file_id1328 root_id = inv.root.file_id
1329 inv.add(InventoryFile("fileid", u'f\xefle', root_id))1329 inv.add(InventoryFile("fileid", u'f\xefle', root_id))
1330 inv["fileid"].revision = "filerev"1330 inv.get_entry("fileid").revision = "filerev"
1331 inv["fileid"].text_sha1 = "ffff"1331 inv.get_entry("fileid").text_sha1 = "ffff"
1332 inv["fileid"].text_size = 01332 inv.get_entry("fileid").text_size = 0
1333 inv.add(InventoryDirectory("dirid", u'dir-\N{EURO SIGN}', root_id))1333 inv.add(InventoryDirectory("dirid", u'dir-\N{EURO SIGN}', root_id))
1334 inv.add(InventoryFile("childid", u'ch\xefld', "dirid"))1334 inv.add(InventoryFile("childid", u'ch\xefld', "dirid"))
1335 inv["childid"].revision = "filerev"1335 inv.get_entry("childid").revision = "filerev"
1336 inv["childid"].text_sha1 = "ffff"1336 inv.get_entry("childid").text_sha1 = "ffff"
1337 inv["childid"].text_size = 01337 inv.get_entry("childid").text_size = 0
1338 chk_bytes = self.get_chk_bytes()1338 chk_bytes = self.get_chk_bytes()
1339 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1339 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1340 bytes = ''.join(chk_inv.to_lines())1340 bytes = ''.join(chk_inv.to_lines())
@@ -1360,16 +1360,16 @@
1360 inv.root.revision = "rootrev"1360 inv.root.revision = "rootrev"
1361 root_id = inv.root.file_id1361 root_id = inv.root.file_id
1362 inv.add(InventoryFile("fileid", "file", root_id))1362 inv.add(InventoryFile("fileid", "file", root_id))
1363 inv["fileid"].revision = "filerev"1363 inv.get_entry("fileid").revision = "filerev"
1364 inv["fileid"].executable = True1364 inv.get_entry("fileid").executable = True
1365 inv["fileid"].text_sha1 = "ffff"1365 inv.get_entry("fileid").text_sha1 = "ffff"
1366 inv["fileid"].text_size = 11366 inv.get_entry("fileid").text_size = 1
1367 inv.add(InventoryDirectory("dirid", "dir", root_id))1367 inv.add(InventoryDirectory("dirid", "dir", root_id))
1368 inv.add(InventoryFile("childid", "child", "dirid"))1368 inv.add(InventoryFile("childid", "child", "dirid"))
1369 inv["childid"].revision = "filerev"1369 inv.get_entry("childid").revision = "filerev"
1370 inv["childid"].executable = False1370 inv.get_entry("childid").executable = False
1371 inv["childid"].text_sha1 = "dddd"1371 inv.get_entry("childid").text_sha1 = "dddd"
1372 inv["childid"].text_size = 11372 inv.get_entry("childid").text_size = 1
1373 chk_bytes = self.get_chk_bytes()1373 chk_bytes = self.get_chk_bytes()
1374 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)1374 chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1375 bytes = ''.join(chk_inv.to_lines())1375 bytes = ''.join(chk_inv.to_lines())
@@ -1388,7 +1388,7 @@
13881388
1389 def test__preload_handles_partially_evaluated_inventory(self):1389 def test__preload_handles_partially_evaluated_inventory(self):
1390 new_inv = self.make_basic_utf8_inventory()1390 new_inv = self.make_basic_utf8_inventory()
1391 ie = new_inv[new_inv.root_id]1391 ie = new_inv.get_entry(new_inv.root_id)
1392 self.assertIs(None, ie._children)1392 self.assertIs(None, ie._children)
1393 self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],1393 self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
1394 sorted(ie.children.keys()))1394 sorted(ie.children.keys()))
@@ -1399,7 +1399,7 @@
1399 # No change1399 # No change
1400 self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],1400 self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
1401 sorted(ie._children.keys()))1401 sorted(ie._children.keys()))
1402 ie_dir = new_inv["dirid"]1402 ie_dir = new_inv.get_entry("dirid")
1403 self.assertEqual([u'ch\xefld'],1403 self.assertEqual([u'ch\xefld'],
1404 sorted(ie_dir._children.keys()))1404 sorted(ie_dir._children.keys()))
14051405
@@ -1574,9 +1574,9 @@
1574 inv = mutable_inventory_from_tree(tree)1574 inv = mutable_inventory_from_tree(tree)
1575 self.assertEqual(revid, inv.revision_id)1575 self.assertEqual(revid, inv.revision_id)
1576 self.assertEqual(2, len(inv))1576 self.assertEqual(2, len(inv))
1577 self.assertEqual("a", inv['thefileid'].name)1577 self.assertEqual("a", inv.get_entry('thefileid').name)
1578 # The inventory should be mutable and independent of1578 # The inventory should be mutable and independent of
1579 # the original tree1579 # the original tree
1580 self.assertFalse(tree.root_inventory['thefileid'].executable)1580 self.assertFalse(tree.root_inventory.get_entry('thefileid').executable)
1581 inv['thefileid'].executable = True1581 inv.get_entry('thefileid').executable = True
1582 self.assertFalse(tree.root_inventory['thefileid'].executable)1582 self.assertFalse(tree.root_inventory.get_entry('thefileid').executable)
15831583
=== modified file 'breezy/tests/test_revisiontree.py'
--- breezy/tests/test_revisiontree.py 2017-11-24 09:25:13 +0000
+++ breezy/tests/test_revisiontree.py 2018-03-25 02:37:06 +0000
@@ -76,6 +76,6 @@
7676
77 def test_get_file_mtime_ghost(self):77 def test_get_file_mtime_ghost(self):
78 path = next(iter(self.rev_tree.all_versioned_paths()))78 path = next(iter(self.rev_tree.all_versioned_paths()))
79 self.rev_tree.root_inventory[self.rev_tree.path2id(path)].revision = 'ghostrev'79 self.rev_tree.root_inventory.get_entry(self.rev_tree.path2id(path)).revision = 'ghostrev'
80 self.assertRaises(FileTimestampUnavailable, 80 self.assertRaises(FileTimestampUnavailable,
81 self.rev_tree.get_file_mtime, path)81 self.rev_tree.get_file_mtime, path)
8282
=== modified file 'breezy/tests/test_transform.py'
--- breezy/tests/test_transform.py 2018-03-24 02:22:27 +0000
+++ breezy/tests/test_transform.py 2018-03-25 02:37:06 +0000
@@ -400,7 +400,7 @@
400 tree.lock_read()400 tree.lock_read()
401 self.addCleanup(tree.unlock)401 self.addCleanup(tree.unlock)
402 self.assertEqual('subtree-revision',402 self.assertEqual('subtree-revision',
403 tree.root_inventory['subtree-id'].reference_revision)403 tree.root_inventory.get_entry('subtree-id').reference_revision)
404404
405 def test_conflicts(self):405 def test_conflicts(self):
406 transform, root = self.get_transform()406 transform, root = self.get_transform()
407407
=== modified file 'breezy/tests/test_xml.py'
--- breezy/tests/test_xml.py 2018-02-17 02:02:38 +0000
+++ breezy/tests/test_xml.py 2018-03-25 02:37:06 +0000
@@ -227,11 +227,11 @@
227 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)227 inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)
228 eq = self.assertEqual228 eq = self.assertEqual
229 eq(len(inv), 4)229 eq(len(inv), 4)
230 ie = inv['bar-20050824000535-6bc48cfad47ed134']230 ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')
231 eq(ie.kind, 'file')231 eq(ie.kind, 'file')
232 eq(ie.revision, 'mbp@foo-00')232 eq(ie.revision, 'mbp@foo-00')
233 eq(ie.name, 'bar')233 eq(ie.name, 'bar')
234 eq(inv[ie.parent_id].kind, 'directory')234 eq(inv.get_entry(ie.parent_id).kind, 'directory')
235235
236 def test_unpack_basis_inventory_5(self):236 def test_unpack_basis_inventory_5(self):
237 """Unpack canned new-style inventory"""237 """Unpack canned new-style inventory"""
@@ -240,11 +240,11 @@
240 eq = self.assertEqual240 eq = self.assertEqual
241 eq(len(inv), 4)241 eq(len(inv), 4)
242 eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')242 eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
243 ie = inv['bar-20050824000535-6bc48cfad47ed134']243 ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')
244 eq(ie.kind, 'file')244 eq(ie.kind, 'file')
245 eq(ie.revision, 'mbp@foo-00')245 eq(ie.revision, 'mbp@foo-00')
246 eq(ie.name, 'bar')246 eq(ie.name, 'bar')
247 eq(inv[ie.parent_id].kind, 'directory')247 eq(inv.get_entry(ie.parent_id).kind, 'directory')
248248
249 def test_unpack_inventory_5a(self):249 def test_unpack_inventory_5a(self):
250 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(250 inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
@@ -357,13 +357,13 @@
357 inv.add(inventory.InventoryDirectory('dir-id', 'dir',357 inv.add(inventory.InventoryDirectory('dir-id', 'dir',
358 'tree-root-321'))358 'tree-root-321'))
359 inv.add(inventory.InventoryLink('link-id', 'link', 'tree-root-321'))359 inv.add(inventory.InventoryLink('link-id', 'link', 'tree-root-321'))
360 inv['tree-root-321'].revision = 'rev_outer'360 inv.get_entry('tree-root-321').revision = 'rev_outer'
361 inv['dir-id'].revision = 'rev_outer'361 inv.get_entry('dir-id').revision = 'rev_outer'
362 inv['file-id'].revision = 'rev_outer'362 inv.get_entry('file-id').revision = 'rev_outer'
363 inv['file-id'].text_sha1 = 'A'363 inv.get_entry('file-id').text_sha1 = 'A'
364 inv['file-id'].text_size = 1364 inv.get_entry('file-id').text_size = 1
365 inv['link-id'].revision = 'rev_outer'365 inv.get_entry('link-id').revision = 'rev_outer'
366 inv['link-id'].symlink_target = 'a'366 inv.get_entry('link-id').symlink_target = 'a'
367 return inv367 return inv
368368
369 def test_roundtrip_inventory_v7(self):369 def test_roundtrip_inventory_v7(self):
@@ -377,7 +377,7 @@
377 inv2 = xml7.serializer_v7.read_inventory_from_string(txt)377 inv2 = xml7.serializer_v7.read_inventory_from_string(txt)
378 self.assertEqual(5, len(inv2))378 self.assertEqual(5, len(inv2))
379 for path, ie in inv.iter_entries():379 for path, ie in inv.iter_entries():
380 self.assertEqual(ie, inv2[ie.file_id])380 self.assertEqual(ie, inv2.get_entry(ie.file_id))
381381
382 def test_roundtrip_inventory_v6(self):382 def test_roundtrip_inventory_v6(self):
383 inv = self.get_sample_inventory()383 inv = self.get_sample_inventory()
@@ -388,7 +388,7 @@
388 inv2 = xml6.serializer_v6.read_inventory_from_string(txt)388 inv2 = xml6.serializer_v6.read_inventory_from_string(txt)
389 self.assertEqual(4, len(inv2))389 self.assertEqual(4, len(inv2))
390 for path, ie in inv.iter_entries():390 for path, ie in inv.iter_entries():
391 self.assertEqual(ie, inv2[ie.file_id])391 self.assertEqual(ie, inv2.get_entry(ie.file_id))
392392
393 def test_wrong_format_v7(self):393 def test_wrong_format_v7(self):
394 """Can't accidentally open a file with wrong serializer"""394 """Can't accidentally open a file with wrong serializer"""
@@ -415,9 +415,9 @@
415 lines = s_v7.write_inventory_to_lines(inv)415 lines = s_v7.write_inventory_to_lines(inv)
416 self.assertEqual(breezy.osutils.split_lines(txt), lines)416 self.assertEqual(breezy.osutils.split_lines(txt), lines)
417 inv2 = s_v7.read_inventory_from_string(txt)417 inv2 = s_v7.read_inventory_from_string(txt)
418 self.assertEqual('tree-root-321', inv2['nested-id'].parent_id)418 self.assertEqual('tree-root-321', inv2.get_entry('nested-id').parent_id)
419 self.assertEqual('rev-outer', inv2['nested-id'].revision)419 self.assertEqual('rev-outer', inv2.get_entry('nested-id').revision)
420 self.assertEqual('rev-inner', inv2['nested-id'].reference_revision)420 self.assertEqual('rev-inner', inv2.get_entry('nested-id').reference_revision)
421421
422 def test_roundtrip_inventory_v8(self):422 def test_roundtrip_inventory_v8(self):
423 inv = self.get_sample_inventory()423 inv = self.get_sample_inventory()
@@ -425,7 +425,7 @@
425 inv2 = xml8.serializer_v8.read_inventory_from_string(txt)425 inv2 = xml8.serializer_v8.read_inventory_from_string(txt)
426 self.assertEqual(4, len(inv2))426 self.assertEqual(4, len(inv2))
427 for path, ie in inv.iter_entries():427 for path, ie in inv.iter_entries():
428 self.assertEqual(ie, inv2[ie.file_id])428 self.assertEqual(ie, inv2.get_entry(ie.file_id))
429429
430 def test_inventory_text_v8(self):430 def test_inventory_text_v8(self):
431 inv = self.get_sample_inventory()431 inv = self.get_sample_inventory()
432432
=== modified file 'breezy/tree.py'
--- breezy/tree.py 2018-03-24 10:24:48 +0000
+++ breezy/tree.py 2018-03-25 02:37:06 +0000
@@ -1186,7 +1186,7 @@
1186 return (None, None)1186 return (None, None)
1187 else:1187 else:
1188 self._out_of_order_processed.add(file_id)1188 self._out_of_order_processed.add(file_id)
1189 cur_ie = other_tree.root_inventory[file_id]1189 cur_ie = other_tree.root_inventory.get_entry(file_id)
1190 return (cur_path, cur_ie)1190 return (cur_path, cur_ie)
11911191
1192 def iter_all(self):1192 def iter_all(self):

Subscribers

People subscribed via source and target branches