1285
1285
tt.trans_id_tree_file_id(wt.get_root_id())
1286
1286
pb = bzrlib.ui.ui_factory.nested_progress_bar()
1288
deferred_contents = []
1288
1289
for num, (tree_path, entry) in \
1289
1290
enumerate(tree.inventory.iter_entries_by_dir()):
1290
pb.update("Building tree", num, len(tree.inventory))
1291
pb.update("Building tree", num - len(deferred_contents),
1292
len(tree.inventory))
1291
1293
if entry.parent_id is None:
1293
1295
reparent = False
1316
1318
'entry %s parent id %r is not in file_trans_id %r'
1317
1319
% (entry, entry.parent_id, file_trans_id))
1318
1320
parent_id = file_trans_id[entry.parent_id]
1319
file_trans_id[file_id] = new_by_entry(tt, entry, parent_id,
1321
if entry.kind == 'file':
1322
# We *almost* replicate new_by_entry, so that we can defer
1323
# getting the file text, and get them all at once.
1324
trans_id = tt.create_path(entry.name, parent_id)
1325
file_trans_id[file_id] = trans_id
1326
tt.version_file(entry.file_id, trans_id)
1327
executable = tree.is_executable(entry.file_id, tree_path)
1328
if executable is not None:
1329
tt.set_executability(executable, trans_id)
1330
deferred_contents.append((entry.file_id, trans_id))
1332
file_trans_id[file_id] = new_by_entry(tt, entry, parent_id,
1322
1335
new_trans_id = file_trans_id[file_id]
1323
1336
old_parent = tt.trans_id_tree_path(tree_path)
1324
1337
_reparent_children(tt, old_parent, new_trans_id)
1338
for num, (trans_id, bytes) in enumerate(
1339
tree.iter_files_bytes(deferred_contents)):
1340
tt.create_file(bytes, trans_id)
1341
pb.update('Adding file contents',
1342
(num + len(tree.inventory) - len(deferred_contents)),
1343
len(tree.inventory))
1327
1346
pp.next_phase()
1579
1598
skip_root = False
1580
1599
basis_tree = None
1582
1602
for id_num, (file_id, path, changed_content, versioned, parent, name,
1583
1603
kind, executable) in enumerate(change_list):
1584
1604
if skip_root and file_id[0] is not None and parent[0] is None:
1624
1644
tt.create_symlink(target_tree.get_symlink_target(file_id),
1626
1646
elif kind[1] == 'file':
1627
tt.create_file(target_tree.get_file_lines(file_id),
1647
deferred_files.append((file_id, (trans_id, mode_id)))
1629
1648
if basis_tree is None:
1630
1649
basis_tree = working_tree.basis_tree()
1631
1650
basis_tree.lock_read()
1652
1671
name[1], tt.trans_id_file_id(parent[1]), trans_id)
1653
1672
if executable[0] != executable[1] and kind[1] == "file":
1654
1673
tt.set_executability(executable[1], trans_id)
1674
for (trans_id, mode_id), bytes in target_tree.iter_files_bytes(
1676
tt.create_file(bytes, trans_id, mode_id)
1656
1678
if basis_tree is not None:
1657
1679
basis_tree.unlock()