781
782
file_id = file_id[0]
782
783
return self.inventory, file_id
785
def _get_root_inventory(self):
786
return self._inventory
788
root_inventory = property(_get_root_inventory,
789
doc="Root inventory of this tree")
791
def _unpack_file_id(self, file_id):
792
"""Find the inventory and inventory file id for a tree file id.
794
:param file_id: The tree file id, as bytestring or tuple
795
:return: Inventory and inventory file id
797
if isinstance(file_id, tuple):
798
if len(file_id) != 0:
799
raise ValueError("nested trees not yet supported: %r" % file_id)
801
return self.root_inventory, file_id
785
804
def path2id(self, path):
786
805
"""Return the id for path in this tree."""
787
806
return self._path2inv_file_id(path)[1]
789
808
def _path2inv_file_id(self, path):
791
return self.inventory, self._inventory.path2id(path)
809
"""Lookup a inventory and inventory file id by path.
811
:param path: Path to look up
812
:return: tuple with inventory and inventory file id
814
# FIXME: Support nested trees
815
return self.root_inventory, self.root_inventory.path2id(path)
793
817
def id2path(self, file_id):
794
818
"""Return the path for a file id.
807
831
return inventory.has_id(file_id)
809
833
def all_file_ids(self):
810
return set(self.inventory) # for now
835
[entry.file_id for path, entry in self.iter_entries_by_dir()])
812
837
@deprecated_method(deprecated_in((2, 4, 0)))
813
838
def __iter__(self):
814
return iter(self.inventory) # for now
839
return iter(self.all_file_ids())
816
841
def filter_unversioned_files(self, paths):
817
842
"""Filter out paths that are versioned.
821
846
# NB: we specifically *don't* call self.has_filename, because for
822
847
# WorkingTrees that can indicate files that exist on disk but that
823
848
# are not versioned.
824
pred = self.inventory.has_filename # for now
825
return set((p for p in paths if not pred(p)))
849
return set((p for p in paths if self.path2id(p) is not None))
828
852
def iter_entries_by_dir(self, specific_file_ids=None, yield_parents=False):
843
867
inventory_file_ids = []
844
868
for tree_file_id in specific_file_ids:
845
869
inventory, inv_file_id = self._unpack_file_id(tree_file_id)
846
if not inventory is self.inventory: # for now
847
raise AssertionError("%r != %r" % (inventory, self.inventory))
870
if not inventory is self.root_inventory: # for now
871
raise AssertionError("%r != %r" % (
872
inventory, self.root_inventory))
848
873
inventory_file_ids.append(inv_file_id)
849
return self.inventory.iter_entries_by_dir(
874
# FIXME: Support nested trees
875
return self.root_inventory.iter_entries_by_dir(
850
876
specific_file_ids=inventory_file_ids, yield_parents=yield_parents)
852
878
@deprecated_method(deprecated_in((2, 5, 0)))