41
from bzrlib.branch import Branch, BranchReferenceFormat
42
from bzrlib.bundle import read_bundle_from_url
43
from bzrlib.branch import Branch
43
44
from bzrlib.bundle.apply_bundle import install_bundle, merge_bundle
44
45
from bzrlib.conflicts import ConflictList
46
from bzrlib.revision import common_ancestor
47
from bzrlib.revisionspec import RevisionSpec
48
from bzrlib.workingtree import WorkingTree
45
51
from bzrlib.commands import Command, display_command
46
from bzrlib.errors import (BzrError, BzrCheckError, BzrCommandError,
52
from bzrlib.errors import (BzrError, BzrCheckError, BzrCommandError,
47
53
NotBranchError, DivergedBranches, NotConflicted,
48
54
NoSuchFile, NoWorkingTree, FileInWrongBranch,
49
55
NotVersionedError, NotABundle)
50
from bzrlib.merge import Merge3Merger
51
56
from bzrlib.option import Option
52
57
from bzrlib.progress import DummyProgress, ProgressPhase
53
from bzrlib.revision import common_ancestor
54
from bzrlib.revisionspec import RevisionSpec
55
58
from bzrlib.trace import mutter, note, log_error, warning, is_quiet, info
56
59
from bzrlib.transport.local import LocalTransport
57
from bzrlib.workingtree import WorkingTree
60
62
def tree_files(file_list, default_branch=u'.'):
294
296
base_tree, base_path = WorkingTree.open_containing(
296
298
except errors.NoWorkingTree:
297
base_branch, base_path = branch.Branch.open_containing(
299
base_branch, base_path = Branch.open_containing(
299
301
base_tree = base_branch.basis_tree()
2041
2043
@display_command
2042
2044
def run(self, branch, other):
2043
from bzrlib.revision import common_ancestor, MultipleRevisionSources
2045
from bzrlib.revision import MultipleRevisionSources
2045
2047
branch1 = Branch.open_containing(branch)[0]
2046
2048
branch2 = Branch.open_containing(other)[0]
2108
2110
' from a working copy, instead of branch changes')]
2110
2112
def help(self):
2111
from merge import merge_type_help
2112
2113
from inspect import getdoc
2113
return getdoc(self) + '\n' + merge_type_help()
2114
return getdoc(self) + '\n' + merge.merge_type_help()
2115
2116
def run(self, branch=None, revision=None, force=False, merge_type=None,
2116
2117
show_base=False, reprocess=False, remember=False,
2117
2118
uncommitted=False):
2118
2119
if merge_type is None:
2119
merge_type = Merge3Merger
2120
merge_type = merge.Merge3Merger
2121
2122
tree = WorkingTree.open_containing(u'.')[0]
2172
2173
pb = ui.ui_factory.nested_progress_bar()
2175
conflict_count = merge(other, base, check_clean=(not force),
2176
merge_type=merge_type,
2177
reprocess=reprocess,
2178
show_base=show_base,
2179
pb=pb, file_list=interesting_files)
2176
conflict_count = _merge_helper(
2177
other, base, check_clean=(not force),
2178
merge_type=merge_type,
2179
reprocess=reprocess,
2180
show_base=show_base,
2181
pb=pb, file_list=interesting_files)
2182
2184
if conflict_count != 0:
2238
2240
def help(self):
2239
from merge import merge_type_help
2240
2241
from inspect import getdoc
2241
return getdoc(self) + '\n' + merge_type_help()
2242
return getdoc(self) + '\n' + merge.merge_type_help()
2243
2244
def run(self, file_list=None, merge_type=None, show_base=False,
2244
2245
reprocess=False):
2245
from bzrlib.merge import merge_inner, transform_tree
2246
2246
if merge_type is None:
2247
merge_type = Merge3Merger
2247
merge_type = merge.Merge3Merger
2248
2248
tree, file_list = tree_files(file_list)
2249
2249
tree.lock_write()
2274
2274
for name, ie in tree.inventory.iter_entries(file_id):
2275
2275
interesting_ids.add(ie.file_id)
2276
2276
new_conflicts = conflicts.select_conflicts(tree, file_list)[0]
2277
transform_tree(tree, tree.basis_tree(), interesting_ids)
2277
merge.transform_tree(tree, tree.basis_tree(), interesting_ids)
2278
2278
tree.set_conflicts(ConflictList(new_conflicts))
2279
2279
if file_list is None:
2280
2280
restore_files = list(tree.iter_conflicts())
2285
2285
restore(tree.abspath(filename))
2286
2286
except NotConflicted:
2288
conflicts = merge_inner(tree.branch, other_tree, base_tree,
2290
interesting_ids=interesting_ids,
2291
other_rev_id=parents[1],
2292
merge_type=merge_type,
2293
show_base=show_base,
2294
reprocess=reprocess)
2288
conflicts = merge.merge_inner(tree.branch, other_tree, base_tree,
2290
interesting_ids=interesting_ids,
2291
other_rev_id=parents[1],
2292
merge_type=merge_type,
2293
show_base=show_base,
2294
reprocess=reprocess)
2297
2297
if conflicts > 0:
2746
2746
# command-line interpretation helper for merge-related commands
2747
def merge(other_revision, base_revision,
2748
check_clean=True, ignore_zero=False,
2749
this_dir=None, backup_files=False, merge_type=Merge3Merger,
2750
file_list=None, show_base=False, reprocess=False,
2751
pb=DummyProgress()):
2747
def _merge_helper(other_revision, base_revision,
2748
check_clean=True, ignore_zero=False,
2749
this_dir=None, backup_files=False,
2750
merge_type=merge.Merge3Merger,
2751
file_list=None, show_base=False, reprocess=False,
2752
pb=DummyProgress()):
2752
2753
"""Merge changes into a tree.
2776
2777
clients might prefer to call merge.merge_inner(), which has less magic
2779
from bzrlib.merge import Merger
2780
2780
if this_dir is None:
2781
2781
this_dir = u'.'
2782
2782
this_tree = WorkingTree.open_containing(this_dir)[0]
2783
if show_base and not merge_type is Merge3Merger:
2783
if show_base and not merge_type is merge.Merge3Merger:
2784
2784
raise BzrCommandError("Show-base is not supported for this merge"
2785
2785
" type. %s" % merge_type)
2786
2786
if reprocess and not merge_type.supports_reprocess:
2789
2789
if reprocess and show_base:
2790
2790
raise BzrCommandError("Cannot do conflict reduction and show base.")
2792
merger = Merger(this_tree.branch, this_tree=this_tree, pb=pb)
2792
merger = merge.Merger(this_tree.branch, this_tree=this_tree, pb=pb)
2793
2793
merger.pp = ProgressPhase("Merge phase", 5, pb)
2794
2794
merger.pp.next_phase()
2795
2795
merger.check_basis(check_clean)