~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

Update with new parent-ids patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
import sys
35
35
import tarfile
36
36
import types
 
37
from warnings import warn
37
38
 
38
39
import bzrlib
39
40
from bzrlib import errors, osutils
85
86
    >>> for ix, j in enumerate(i.iter_entries()):
86
87
    ...   print (j[0] == shouldbe[ix], j[1])
87
88
    ... 
88
 
    (True, RootEntry('TREE_ROOT', u'', parent_id=None, revision=None))
 
89
    (True, InventoryDirectory('TREE_ROOT', '', parent_id=None, revision=None))
89
90
    (True, InventoryDirectory('123', 'src', parent_id='TREE_ROOT', revision=None))
90
91
    (True, InventoryFile('2323', 'hello.c', parent_id='123', sha1=None, len=None))
91
92
    >>> i.add(InventoryFile('2323', 'bye.c', '123'))
295
296
        """Return a short kind indicator useful for appending to names."""
296
297
        raise BzrError('unknown kind %r' % self.kind)
297
298
 
298
 
    known_kinds = ('file', 'directory', 'symlink', 'root_directory')
 
299
    known_kinds = ('file', 'directory', 'symlink')
299
300
 
300
301
    def _put_in_tar(self, item, tree):
301
302
        """populate item for stashing in a tar, and return the content stream.
509
510
    def __init__(self, file_id):
510
511
        self.file_id = file_id
511
512
        self.children = {}
512
 
        self.kind = 'root_directory'
 
513
        self.kind = 'directory'
513
514
        self.parent_id = None
514
515
        self.name = u''
515
516
        self.revision = None
 
517
        warn('RootEntry is deprecated as of bzr 0.10.  Please use '
 
518
             'InventoryDirectory instead.',
 
519
            DeprecationWarning, stacklevel=2)
516
520
 
517
521
    def __eq__(self, other):
518
522
        if not isinstance(other, RootEntry):
861
865
        # root id. Rather than generating a random one here.
862
866
        #if root_id is None:
863
867
        #    root_id = bzrlib.branch.gen_file_id('TREE_ROOT')
864
 
        self.root = RootEntry(root_id)
 
868
        if root_id is not None:
 
869
            self._set_root(InventoryDirectory(root_id, '', None))
 
870
        else:
 
871
            self.root = None
 
872
            self._byid = {}
865
873
        # FIXME: this isn't ever used, changing it to self.revision may break
866
874
        # things. TODO make everything use self.revision_id
867
875
        self.revision_id = revision_id
 
876
 
 
877
    def _set_root(self, ie):
 
878
        self.root = ie
868
879
        self._byid = {self.root.file_id: self.root}
869
880
 
870
881
    def copy(self):
1042
1053
        if entry.file_id in self._byid:
1043
1054
            raise BzrError("inventory already contains entry with id {%s}" % entry.file_id)
1044
1055
 
1045
 
        if entry.parent_id == ROOT_ID or entry.parent_id is None:
 
1056
        if entry.parent_id is None:
 
1057
            assert self.root is None and len(self._byid) == 0
 
1058
            self._set_root(entry)
 
1059
            return entry
 
1060
        if entry.parent_id == ROOT_ID:
 
1061
            assert self.root is not None, self
1046
1062
            entry.parent_id = self.root.file_id
1047
1063
 
1048
1064
        try:
1070
1086
        if len(parts) == 0:
1071
1087
            if file_id is None:
1072
1088
                file_id = bzrlib.workingtree.gen_root_id()
1073
 
            self.root = RootEntry(file_id)
 
1089
            self.root = InventoryDirectory(file_id, '', None)
1074
1090
            self._byid = {self.root.file_id: self.root}
1075
1091
            return
1076
1092
        else: