~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to apply_changeset.py

  • Committer: John Arbash Meinel
  • Date: 2005-06-28 22:19:00 UTC
  • mto: (0.5.85) (1185.82.1 bzr-w-changeset)
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: john@arbash-meinel.com-20050628221900-2ecec40914076c21
Some cleanup to the send_changeset work.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
1
2
"""\
2
 
This contains functionality for installing bundles into repositories
 
3
This contains the apply changset function for bzr
3
4
"""
4
5
 
5
 
import bzrlib.ui
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
10
 
 
11
 
 
12
 
def install_bundle(repository, bundle_reader):
13
 
    pb = bzrlib.ui.ui_factory.nested_progress_bar()
14
 
    repository.lock_write()
15
 
    try:
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):
20
 
                continue
21
 
            cset_tree = bundle_reader.revision_tree(repository,
22
 
                                                       revision.revision_id)
23
 
            install_revision(repository, revision, cset_tree)
24
 
    finally:
25
 
        repository.unlock()
26
 
        pb.finished()
27
 
 
28
 
 
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()
33
 
    try:
34
 
        pp = ProgressPhase("Merge phase", 6, pb)
35
 
        pp.next_phase()
36
 
        install_bundle(tree.branch.repository, reader)
37
 
        merger = Merger(tree.branch, this_tree=tree, pb=pb)
38
 
        merger.pp = pp
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()
45
 
        merger.find_base()
46
 
        if merger.base_rev_id == merger.other_rev_id:
47
 
            note("Nothing to do.")
48
 
            return 0
49
 
        merger.merge_type = merge_type
50
 
        merger.show_base = show_base
51
 
        merger.reprocess = reprocess
52
 
        conflicts = merger.do_merge()
53
 
        merger.set_pending()
54
 
    finally:
55
 
        pb.clear()
56
 
    return conflicts
 
6
import bzrlib
 
7
 
 
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
 
12
 
 
13
 
 
14
    cset_info = read_changeset.read_changeset(from_file)
 
15
    cset = cset_info.get_changeset()
 
16
    inv = {}
 
17
    for file_id in branch.inventory:
 
18
        inv[file_id] = branch.inventory.id2path(file_id)
 
19
    changes = _apply_changeset(cset, inv, branch.base,
 
20
            reverse=reverse)
 
21
 
 
22
    adjust_ids = []
 
23
    for id, path in changes.iteritems():
 
24
        if path is not None:
 
25
            if path == '.':
 
26
                path = ''
 
27
        adjust_ids.append((path, id))
 
28
 
 
29
    branch.set_inventory(regen_inventory(branch, branch.base, adjust_ids))
 
30
 
 
31
    if auto_commit:
 
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)
 
40
 
 
41