31
31
the bottom of a changeset (though I would like to add them all
32
32
as ghost revisions)
35
34
if not repository.has_revision(cset_info.target):
35
rev = cset_info.real_revisions[-1]
36
36
repository.lock_write()
38
# install the inventory
39
# TODO: Figure out how to handle ghosted revisions
42
rev = cset_info.real_revisions[-1]
43
for p_id in rev.parent_ids:
44
if repository.has_revision(p_id):
45
present_parents.append(p_id)
46
parent_invs.append(repository.get_inventory(p_id))
48
inv = cset_tree.inventory
50
# Add the texts that are not already present
51
for path, ie in inv.iter_entries():
52
w = repository.weave_store.get_weave_or_empty(ie.file_id,
53
repository.get_transaction())
54
if ie.revision not in w:
55
repository.weave_store.add_text(ie.file_id,
57
cset_tree.get_file(ie.file_id).readlines(),
58
present_parents, repository.get_transaction())
60
repository.add_revision(rev.revision_id, rev, inv)
38
return install_revision(repository, rev, cset_tree)
62
40
repository.unlock()
42
def install_changeset(repository, changeset_reader):
45
def install_revision(repository, rev, cset_tree):
46
# install the inventory
47
# TODO: Figure out how to handle ghosted revisions
50
for p_id in rev.parent_ids:
51
if repository.has_revision(p_id):
52
present_parents.append(p_id)
53
parent_invs.append(repository.get_inventory(p_id))
55
inv = cset_tree.inventory
57
# Add the texts that are not already present
58
for path, ie in inv.iter_entries():
59
w = repository.weave_store.get_weave_or_empty(ie.file_id,
60
repository.get_transaction())
61
if ie.revision not in w:
62
repository.weave_store.add_text(ie.file_id,
64
cset_tree.get_file(ie.file_id).readlines(),
65
present_parents, repository.get_transaction())
67
repository.add_revision(rev.revision_id, rev, inv)
64
69
def apply_changeset(branch, from_file, reverse=False, auto_commit=False):
65
70
"""Read in a changeset from the given file, and apply it to
66
71
the supplied branch.