~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-10-15 16:32:29 UTC
  • mfrom: (1731.1.67 unique-root)
  • Revision ID: pqm@pqm.ubuntu.com-20061015163229-648b1f2ebe692136
New trees have unique root ids

Show diffs side-by-side

added added

removed removed

Lines of Context:
855
855
    ['', u'hello.c']
856
856
    >>> inv = Inventory('TREE_ROOT-12345678-12345678')
857
857
    >>> inv.add(InventoryFile('123-123', 'hello.c', ROOT_ID))
 
858
    Traceback (most recent call last):
 
859
    BzrError: parent_id {TREE_ROOT} not in inventory
 
860
    >>> inv.add(InventoryFile('123-123', 'hello.c', 'TREE_ROOT-12345678-12345678'))
858
861
    InventoryFile('123-123', 'hello.c', parent_id='TREE_ROOT-12345678-12345678', sha1=None, len=None)
859
862
    """
860
863
    def __init__(self, root_id=ROOT_ID, revision_id=None):
867
870
        The inventory is created with a default root directory, with
868
871
        an id of None.
869
872
        """
870
 
        # We are letting Branch.create() create a unique inventory
871
 
        # root id. Rather than generating a random one here.
872
 
        #if root_id is None:
873
 
        #    root_id = bzrlib.branch.gen_file_id('TREE_ROOT')
874
873
        if root_id is not None:
875
874
            self._set_root(InventoryDirectory(root_id, '', None))
876
875
        else:
877
876
            self.root = None
878
877
            self._byid = {}
879
 
        # FIXME: this isn't ever used, changing it to self.revision may break
880
 
        # things. TODO make everything use self.revision_id
881
878
        self.revision_id = revision_id
882
879
 
883
880
    def _set_root(self, ie):
904
901
    def iter_entries(self, from_dir=None):
905
902
        """Return (path, entry) pairs, in order by name."""
906
903
        if from_dir is None:
907
 
            assert self.root
 
904
            if self.root is None:
 
905
                return
908
906
            from_dir = self.root
909
907
            yield '', self.root
910
908
        elif isinstance(from_dir, basestring):
957
955
        # TODO? Perhaps this should return the from_dir so that the root is
958
956
        # yielded? or maybe an option?
959
957
        if from_dir is None:
960
 
            assert self.root
 
958
            if self.root is None:
 
959
                return
961
960
            from_dir = self.root
962
961
            yield '', self.root
963
962
        elif isinstance(from_dir, basestring):
1063
1062
            assert self.root is None and len(self._byid) == 0
1064
1063
            self._set_root(entry)
1065
1064
            return entry
1066
 
        if entry.parent_id == ROOT_ID:
1067
 
            assert self.root is not None, self
1068
 
            entry.parent_id = self.root.file_id
1069
 
 
1070
1065
        try:
1071
1066
            parent = self._byid[entry.parent_id]
1072
1067
        except KeyError:
1205
1200
        # mutter("lookup path %r" % name)
1206
1201
 
1207
1202
        parent = self.root
 
1203
        if parent is None:
 
1204
            return None
1208
1205
        for f in name:
1209
1206
            try:
1210
1207
                cie = parent.children[f]
1270
1267
        file_ie.name = new_name
1271
1268
        file_ie.parent_id = new_parent_id
1272
1269
 
 
1270
    def is_root(self, file_id):
 
1271
        return self.root is not None and file_id == self.root.file_id
 
1272
 
1273
1273
 
1274
1274
def make_entry(kind, name, parent_id, file_id=None):
1275
1275
    """Create an inventory entry.