~bzr-pqm/bzr/bzr.dev

2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2006 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0.5.17 by John Arbash Meinel
adding apply-changset, plus more meta information.
16
"""\
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
17
This contains functionality for installing bundles into repositories
0.5.17 by John Arbash Meinel
adding apply-changset, plus more meta information.
18
"""
19
1185.82.78 by Aaron Bentley
Cleanups
20
import bzrlib.ui
1185.82.84 by Aaron Bentley
Moved stuff around
21
from bzrlib.progress import ProgressPhase
22
from bzrlib.merge import Merger
23
from bzrlib.repository import install_revision
1185.82.141 by Aaron Bentley
Ensure bzr works when you merge an already-merged bundle
24
from bzrlib.trace import note
1185.82.81 by Aaron Bentley
Remove unused functionality
25
0.5.67 by John Arbash Meinel
Working on apply_changeset
26
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
27
def install_bundle(repository, bundle_reader):
1185.82.63 by Aaron Bentley
Added install revision progress bar
28
    pb = bzrlib.ui.ui_factory.nested_progress_bar()
1185.82.64 by Aaron Bentley
Lock repository while installing revisions
29
    repository.lock_write()
1185.82.63 by Aaron Bentley
Added install revision progress bar
30
    try:
1793.2.2 by Aaron Bentley
Move BundleReader into v07 serializer
31
        real_revisions = bundle_reader.real_revisions
1185.82.63 by Aaron Bentley
Added install revision progress bar
32
        for i, revision in enumerate(reversed(real_revisions)):
33
            pb.update("Install revisions",i, len(real_revisions))
34
            if repository.has_revision(revision.revision_id):
35
                continue
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
36
            cset_tree = bundle_reader.revision_tree(repository,
1185.82.63 by Aaron Bentley
Added install revision progress bar
37
                                                       revision.revision_id)
38
            install_revision(repository, revision, cset_tree)
39
    finally:
1185.82.64 by Aaron Bentley
Lock repository while installing revisions
40
        repository.unlock()
1185.82.63 by Aaron Bentley
Added install revision progress bar
41
        pb.finished()
1185.82.40 by Aaron Bentley
Started work on testing install_revisions/handling empty changesets
42
1185.82.81 by Aaron Bentley
Remove unused functionality
43
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
44
def merge_bundle(reader, tree, check_clean, merge_type, 
1551.11.9 by Aaron Bentley
Apply change reporting to merge
45
                    reprocess, show_base, change_reporter=None):
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
46
    """Merge a revision bundle into the current tree."""
1185.82.84 by Aaron Bentley
Moved stuff around
47
    pb = bzrlib.ui.ui_factory.nested_progress_bar()
1185.82.62 by Aaron Bentley
Don't fail if some data is already installed
48
    try:
1185.82.84 by Aaron Bentley
Moved stuff around
49
        pp = ProgressPhase("Merge phase", 6, pb)
50
        pp.next_phase()
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
51
        install_bundle(tree.branch.repository, reader)
1551.11.9 by Aaron Bentley
Apply change reporting to merge
52
        merger = Merger(tree.branch, this_tree=tree, pb=pb,
53
                        change_reporter=change_reporter)
1185.82.84 by Aaron Bentley
Moved stuff around
54
        merger.pp = pp
55
        merger.pp.next_phase()
56
        merger.check_basis(check_clean, require_commits=False)
1793.2.2 by Aaron Bentley
Move BundleReader into v07 serializer
57
        merger.other_rev_id = reader.target
58
        merger.other_tree = merger.revision_tree(reader.target)
59
        merger.other_basis = reader.target
1185.82.84 by Aaron Bentley
Moved stuff around
60
        merger.pp.next_phase()
61
        merger.find_base()
62
        if merger.base_rev_id == merger.other_rev_id:
63
            note("Nothing to do.")
64
            return 0
65
        merger.merge_type = merge_type
66
        merger.show_base = show_base
67
        merger.reprocess = reprocess
68
        conflicts = merger.do_merge()
69
        merger.set_pending()
70
    finally:
71
        pb.clear()
72
    return conflicts