2
This contains functionality for installing bundles into repositories
3
This contains the apply changset function for bzr
6
from bzrlib.progress import ProgressPhase
7
from bzrlib.merge import Merger
8
from bzrlib.repository import install_revision
9
from bzrlib.trace import note
12
def install_bundle(repository, bundle_reader):
13
pb = bzrlib.ui.ui_factory.nested_progress_bar()
14
repository.lock_write()
16
real_revisions = bundle_reader.real_revisions
17
for i, revision in enumerate(reversed(real_revisions)):
18
pb.update("Install revisions",i, len(real_revisions))
19
if repository.has_revision(revision.revision_id):
21
cset_tree = bundle_reader.revision_tree(repository,
23
install_revision(repository, revision, cset_tree)
29
def merge_bundle(reader, tree, check_clean, merge_type,
30
reprocess, show_base):
31
"""Merge a revision bundle into the current tree."""
32
pb = bzrlib.ui.ui_factory.nested_progress_bar()
34
pp = ProgressPhase("Merge phase", 6, pb)
36
install_bundle(tree.branch.repository, reader)
37
merger = Merger(tree.branch, this_tree=tree, pb=pb)
39
merger.pp.next_phase()
40
merger.check_basis(check_clean, require_commits=False)
41
merger.other_rev_id = reader.target
42
merger.other_tree = merger.revision_tree(reader.target)
43
merger.other_basis = reader.target
44
merger.pp.next_phase()
46
if merger.base_rev_id == merger.other_rev_id:
47
note("Nothing to do.")
49
merger.merge_type = merge_type
50
merger.show_base = show_base
51
merger.reprocess = reprocess
52
conflicts = merger.do_merge()
8
def apply_changeset(branch, from_file, reverse=False, auto_commit=False):
9
from bzrlib.changeset import apply_changeset as _apply_changeset
10
from bzrlib.merge import regen_inventory
11
import sys, read_changeset
14
cset_info = read_changeset.read_changeset(from_file)
15
cset = cset_info.get_changeset()
17
for file_id in branch.inventory:
18
inv[file_id] = branch.inventory.id2path(file_id)
19
changes = _apply_changeset(cset, inv, branch.base,
23
for id, path in changes.iteritems():
27
adjust_ids.append((path, id))
29
branch.set_inventory(regen_inventory(branch, branch.base, adjust_ids))
32
from bzrlib.commit import commit
33
if branch.last_patch() == cset_info.precursor:
34
# This patch can be applied directly
35
commit(branch, message = cset_info.message,
36
timestamp=float(cset_info.timestamp),
37
timezone=float(cset_info.timezone),
38
committer=cset_info.committer,
39
rev_id=cset_info.revision)