/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

(broken) merge aaron's workingtree format changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
335
335
 
336
336
    @staticmethod
337
337
    def versionable_kind(kind):
338
 
        return (kind in ('file', 'directory', 'symlink'))
 
338
        return (kind in ('file', 'directory', 'symlink', 'tree-reference'))
339
339
 
340
340
    def check(self, checker, rev_id, inv, tree):
341
341
        """Check this inventory entry is intact.
825
825
            self.file_id, file_parents, self.symlink_target)
826
826
 
827
827
 
 
828
class TreeReference(InventoryEntry):
 
829
    
 
830
    kind = 'tree-reference'
 
831
    
 
832
    def __init__(self, file_id, name, parent_id, revision=None,
 
833
                 reference_revision=None):
 
834
        InventoryEntry.__init__(self, file_id, name, parent_id)
 
835
        self.revision = revision
 
836
        self.reference_revision = reference_revision
 
837
 
 
838
    def copy(self):
 
839
        return TreeReference(self.file_id, self.name, self.parent_id,
 
840
                             self.revision, self.reference_revision)
 
841
 
 
842
    def _snapshot_text(self, file_parents, work_tree, commit_builder):
 
843
        commit_builder.modified_reference(self.file_id, file_parents)
 
844
 
 
845
    def _read_tree_state(self, path, work_tree):
 
846
        """Populate fields in the inventory entry from the given tree.
 
847
        """
 
848
        self.reference_revision = work_tree.get_reference_revision(self, path)
 
849
 
 
850
    def _forget_tree_state(self):
 
851
        self.reference_revision = None 
 
852
 
 
853
 
828
854
class Inventory(object):
829
855
    """Inventory of versioned files in a tree.
830
856
 
1086
1112
        parent_id = osutils.safe_file_id(parent_id)
1087
1113
        return self[parent_id].children.get(filename)
1088
1114
 
 
1115
    def _add_child(self, entry):
 
1116
        """Add an entry to the inventory, without adding it to its parent"""
 
1117
        if entry.file_id in self._byid:
 
1118
            raise BzrError("inventory already contains entry with id {%s}" %
 
1119
                           entry.file_id)
 
1120
        self._byid[entry.file_id] = entry
 
1121
        for child in getattr(entry, 'children', {}).itervalues():
 
1122
            self._add_child(child)
 
1123
        return entry
 
1124
 
1089
1125
    def add(self, entry):
1090
1126
        """Add entry to inventory.
1091
1127
 
1095
1131
        Returns the new entry object.
1096
1132
        """
1097
1133
        if entry.file_id in self._byid:
1098
 
            raise BzrError("inventory already contains entry with id {%s}" % entry.file_id)
1099
 
 
 
1134
            raise BzrError("inventory already contains entry with id {%s}" %
 
1135
                           entry.file_id)
1100
1136
        if entry.parent_id is None:
1101
1137
            assert self.root is None and len(self._byid) == 0
1102
 
            self._set_root(entry)
1103
 
            return entry
1104
 
        try:
1105
 
            parent = self._byid[entry.parent_id]
1106
 
        except KeyError:
1107
 
            raise BzrError("parent_id {%s} not in inventory" % entry.parent_id)
1108
 
 
1109
 
        if entry.name in parent.children:
1110
 
            raise BzrError("%s is already versioned" %
1111
 
                    osutils.pathjoin(self.id2path(parent.file_id), entry.name))
1112
 
 
1113
 
        self._byid[entry.file_id] = entry
1114
 
        parent.children[entry.name] = entry
1115
 
        return entry
 
1138
            self.root = entry
 
1139
        else:
 
1140
            try:
 
1141
                parent = self._byid[entry.parent_id]
 
1142
            except KeyError:
 
1143
                raise BzrError("parent_id {%s} not in inventory" %
 
1144
                               entry.parent_id)
 
1145
 
 
1146
            if entry.name in parent.children:
 
1147
                raise BzrError("%s is already versioned" %
 
1148
                        osutils.pathjoin(self.id2path(parent.file_id),
 
1149
                        entry.name))
 
1150
            parent.children[entry.name] = entry
 
1151
        return self._add_child(entry)
1116
1152
 
1117
1153
    def add_path(self, relpath, kind, file_id=None, parent_id=None):
1118
1154
        """Add entry from a path.
1285
1321
        for file_id in reversed(to_delete):
1286
1322
            ie = self[file_id]
1287
1323
            del self._byid[file_id]
1288
 
            if ie.parent_id is not None:
1289
 
                del self[ie.parent_id].children[ie.name]
 
1324
        if ie.parent_id is not None:
 
1325
            del self[ie.parent_id].children[ie.name]
1290
1326
 
1291
1327
    def rename(self, file_id, new_parent_id, new_name):
1292
1328
        """Move a file within the inventory.
1328
1364
    'directory':InventoryDirectory,
1329
1365
    'file':InventoryFile,
1330
1366
    'symlink':InventoryLink,
 
1367
    'tree-reference': TreeReference
1331
1368
}
1332
1369
 
1333
1370
def make_entry(kind, name, parent_id, file_id=None):