/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/transform.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-02-28 03:22:58 UTC
  • mfrom: (3146.8.20 no-inventory5)
  • Revision ID: pqm@pqm.ubuntu.com-20080228032258-4mdmqlx603ak6x2w
Implement checkout entirely via dirstate (abentley)

Show diffs side-by-side

added added

removed removed

Lines of Context:
250
250
        This reflects only files that already exist, not ones that will be
251
251
        added by transactions.
252
252
        """
253
 
        path = self._tree.inventory.id2path(inventory_id)
 
253
        path = self._tree.id2path(inventory_id)
254
254
        return self.trans_id_tree_path(path)
255
255
 
256
256
    def trans_id_file_id(self, file_id):
770
770
        conflicts = []
771
771
        removed_tree_ids = set((self.tree_file_id(trans_id) for trans_id in
772
772
                                self._removed_id))
773
 
        active_tree_ids = set((f for f in self._tree.inventory if
774
 
                               f not in removed_tree_ids))
 
773
        all_ids = self._tree.all_file_ids()
 
774
        active_tree_ids = all_ids.difference(removed_tree_ids)
775
775
        for trans_id, file_id in self._new_id.iteritems():
776
776
            if file_id in active_tree_ids:
777
777
                old_trans_id = self.trans_id_tree_file_id(file_id)
1186
1186
            conflicts = self.find_conflicts()
1187
1187
            if len(conflicts) != 0:
1188
1188
                raise MalformedTransform(conflicts=conflicts)
1189
 
        inv = self._tree.inventory
1190
1189
        inventory_delta = []
1191
1190
        child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
1192
1191
        try:
1196
1195
                mover = _mover
1197
1196
            try:
1198
1197
                child_pb.update('Apply phase', 0, 2)
1199
 
                self._apply_removals(inv, inventory_delta, mover)
 
1198
                self._apply_removals(inventory_delta, mover)
1200
1199
                child_pb.update('Apply phase', 1, 2)
1201
 
                modified_paths = self._apply_insertions(inv, inventory_delta,
1202
 
                                                        mover)
 
1200
                modified_paths = self._apply_insertions(inventory_delta, mover)
1203
1201
            except:
1204
1202
                mover.rollback()
1205
1203
                raise
1212
1210
        self.finalize()
1213
1211
        return _TransformResults(modified_paths, self.rename_count)
1214
1212
 
1215
 
    def _apply_removals(self, inv, inventory_delta, mover):
 
1213
    def _apply_removals(self, inventory_delta, mover):
1216
1214
        """Perform tree operations that remove directory/inventory names.
1217
1215
 
1218
1216
        That is, delete files that are to be deleted, and put any files that
1244
1242
                        file_id = self._tree.get_root_id()
1245
1243
                    else:
1246
1244
                        file_id = self.tree_file_id(trans_id)
1247
 
                    if file_id is not None:
1248
 
                        inventory_delta.append((path, None, file_id, None))
 
1245
                    assert file_id is not None
 
1246
                    # File-id isn't really being deleted, just moved
 
1247
                    if file_id in self._r_new_id:
 
1248
                        continue
 
1249
                    inventory_delta.append((path, None, file_id, None))
1249
1250
        finally:
1250
1251
            child_pb.finished()
1251
1252
 
1252
 
    def _apply_insertions(self, inv, inventory_delta, mover):
 
1253
    def _apply_insertions(self, inventory_delta, mover):
1253
1254
        """Perform tree operations that insert directory/inventory names.
1254
1255
 
1255
1256
        That is, create any files that need to be created, and restore from
1264
1265
            for num, (path, trans_id) in enumerate(new_paths):
1265
1266
                new_entry = None
1266
1267
                child_pb.update('adding file', num, len(new_paths))
1267
 
                try:
1268
 
                    kind = self._new_contents[trans_id]
1269
 
                except KeyError:
1270
 
                    kind = contents = None
1271
1268
                if trans_id in self._new_contents or \
1272
1269
                    self.path_changed(trans_id):
1273
1270
                    full_path = self._tree.abspath(path)
1283
1280
                    if trans_id in self._new_contents:
1284
1281
                        modified_paths.append(full_path)
1285
1282
                        completed_new.append(trans_id)
1286
 
 
1287
 
                if trans_id in self._new_id:
1288
 
                    if kind is None:
1289
 
                        kind = file_kind(self._tree.abspath(path))
 
1283
                file_id = self.final_file_id(trans_id)
 
1284
                if file_id is not None and (trans_id in self._new_id or
 
1285
                    trans_id in self._new_name or trans_id in self._new_parent
 
1286
                    or trans_id in self._new_executability):
 
1287
                    try:
 
1288
                        kind = self.final_kind(trans_id)
 
1289
                    except NoSuchFile:
 
1290
                        kind = self._tree.stored_kind(file_id)
1290
1291
                    if trans_id in self._new_reference_revision:
1291
1292
                        new_entry = inventory.TreeReference(
1292
 
                            self._new_id[trans_id],
 
1293
                            self.final_file_id(trans_id),
1293
1294
                            self._new_name[trans_id],
1294
1295
                            self.final_file_id(self._new_parent[trans_id]),
1295
1296
                            None, self._new_reference_revision[trans_id])
1297
1298
                        new_entry = inventory.make_entry(kind,
1298
1299
                            self.final_name(trans_id),
1299
1300
                            self.final_file_id(self.final_parent(trans_id)),
1300
 
                            self._new_id[trans_id])
1301
 
                else:
1302
 
                    if trans_id in self._new_name or trans_id in\
1303
 
                        self._new_parent or\
1304
 
                        trans_id in self._new_executability:
1305
 
                        file_id = self.final_file_id(trans_id)
1306
 
                        if file_id is not None:
1307
 
                            entry = inv[file_id]
1308
 
                            new_entry = entry.copy()
1309
 
 
1310
 
                    if trans_id in self._new_name or trans_id in\
1311
 
                        self._new_parent:
1312
 
                            if new_entry is not None:
1313
 
                                new_entry.name = self.final_name(trans_id)
1314
 
                                parent = self.final_parent(trans_id)
1315
 
                                parent_id = self.final_file_id(parent)
1316
 
                                new_entry.parent_id = parent_id
 
1301
                            self.final_file_id(trans_id))
 
1302
                    try:
 
1303
                        old_path = self._tree.id2path(new_entry.file_id)
 
1304
                    except errors.NoSuchId:
 
1305
                        old_path = None
 
1306
                    inventory_delta.append((old_path, path, new_entry.file_id,
 
1307
                                            new_entry))
1317
1308
 
1318
1309
                if trans_id in self._new_executability:
1319
1310
                    self._set_executability(path, new_entry, trans_id)
1320
 
                if new_entry is not None:
1321
 
                    if new_entry.file_id in inv:
1322
 
                        old_path = inv.id2path(new_entry.file_id)
1323
 
                    else:
1324
 
                        old_path = None
1325
 
                    inventory_delta.append((old_path, path,
1326
 
                                            new_entry.file_id,
1327
 
                                            new_entry))
1328
1311
        finally:
1329
1312
            child_pb.finished()
1330
1313
        for trans_id in completed_new:
1520
1503
 
1521
1504
def _build_tree(tree, wt, accelerator_tree, hardlink):
1522
1505
    """See build_tree."""
1523
 
    if len(wt.inventory) > 1:  # more than just a root
1524
 
        raise errors.WorkingTreeAlreadyPopulated(base=wt.basedir)
 
1506
    for num, _unused in enumerate(wt.all_file_ids()):
 
1507
        if num > 0:  # more than just a root
 
1508
            raise errors.WorkingTreeAlreadyPopulated(base=wt.basedir)
1525
1509
    file_trans_id = {}
1526
1510
    top_pb = bzrlib.ui.ui_factory.nested_progress_bar()
1527
1511
    pp = ProgressPhase("Build phase", 2, top_pb)
2056
2040
            new_parent_id = tt.new_directory(parent_name + '.new',
2057
2041
                parent_parent, parent_file_id)
2058
2042
            _reparent_transform_children(tt, parent_id, new_parent_id)
2059
 
            tt.unversion_file(parent_id)
 
2043
            if parent_file_id is not None:
 
2044
                tt.unversion_file(parent_id)
2060
2045
            new_conflicts.add((c_type, 'Created directory', new_parent_id))
2061
2046
    return new_conflicts
2062
2047