def test_from_revision_ids(self): this, other = self.set_up_trees() self.assertRaises(errors.NoSuchRevision, Merger.from_revision_ids, None, this, "rev2b") this.lock_write() self.addCleanup(this.unlock) merger = Merger.from_revision_ids(None, this, "rev2b", other_branch=other.branch) self.assertEqual("rev2b", merger.other_rev_id) self.assertEqual("rev1", merger.base_rev_id) merger = Merger.from_revision_ids(None, this, "rev2b", "rev2a", other_branch=other.branch) self.assertEqual("rev2a", merger.base_rev_id)
def test_from_revision_ids(self): this, other = self.set_up_trees() self.assertRaises(errors.NoSuchRevision, Merger.from_revision_ids, progress.DummyProgress(), this, 'rev2b') this.lock_write() self.addCleanup(this.unlock) merger = Merger.from_revision_ids(progress.DummyProgress(), this, 'rev2b', other_branch=other.branch) self.assertEqual('rev2b', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id) merger = Merger.from_revision_ids(progress.DummyProgress(), this, 'rev2b', 'rev2a', other_branch=other.branch) self.assertEqual('rev2a', merger.base_rev_id)
def test_from_mergeable(self): this, other = self.prepare_for_merging() md = merge_directive.MergeDirective2.from_objects(other.branch.repository, "rev3", 0, 0, "this") other.lock_read() self.addCleanup(other.unlock) merger, verified = Merger.from_mergeable(this, md, None) md.patch = None merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual("inapplicable", verified) self.assertEqual("rev3", merger.other_rev_id) self.assertEqual("rev1", merger.base_rev_id) md.base_revision_id = "rev2b" merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual("rev2b", merger.base_rev_id)
def __call__(self, oldrevid, newrevid, newparents): """Replay a commit in a working tree, with a different base. :param oldrevid: Old revision id :param newrevid: New revision id :param newparents: New parent revision ids """ repository = self.wt.branch.repository if self.merge_type is None: from bzrlib.merge import Merge3Merger merge_type = Merge3Merger else: merge_type = self.merge_type oldrev = self.wt.branch.repository.get_revision(oldrevid) # Make sure there are no conflicts or pending merges/changes # in the working tree complete_revert(self.wt, [newparents[0]]) assert not self.wt.changes_from(self.wt.basis_tree()).has_changed(), "Changes in rev" oldtree = repository.revision_tree(oldrevid) self.state.write_active_revid(oldrevid) merger = Merger(self.wt.branch, this_tree=self.wt) merger.set_other_revision(oldrevid, self.wt.branch) base_revid = self.determine_base(oldrevid, oldrev.parent_ids, newrevid, newparents) mutter('replaying %r as %r with base %r and new parents %r' % (oldrevid, newrevid, base_revid, newparents)) merger.set_base_revision(base_revid, self.wt.branch) merger.merge_type = merge_type merger.do_merge() for newparent in newparents[1:]: self.wt.add_pending_merge(newparent) self.commit_rebase(oldrev, newrevid) self.state.write_active_revid(None)
def test_from_mergeable(self): this, other = self.prepare_for_merging() md = merge_directive.MergeDirective2.from_objects( other.branch.repository, 'rev3', 0, 0, 'this') other.lock_read() self.addCleanup(other.unlock) merger, verified = Merger.from_mergeable(this, md, None) md.patch = None merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual('inapplicable', verified) self.assertEqual('rev3', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id) md.base_revision_id = 'rev2b' merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual('rev2b', merger.base_rev_id)
def test_from_mergeable_old_merge_directive(self): this, other = self.prepare_for_merging() other.lock_write() self.addCleanup(other.unlock) md = merge_directive.MergeDirective.from_objects(other.branch.repository, "rev3", 0, 0, "this") merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual("rev3", merger.other_rev_id) self.assertEqual("rev1", merger.base_rev_id)
def test_from_mergeable_old_merge_directive(self): this, other = self.prepare_for_merging() other.lock_write() self.addCleanup(other.unlock) md = merge_directive.MergeDirective.from_objects( other.branch.repository, 'rev3', 0, 0, 'this') merger, verified = Merger.from_mergeable(this, md, None) self.assertEqual('rev3', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id)
def test_from_revision_ids(self): this, other = self.set_up_trees() self.assertRaises(errors.NoSuchRevision, Merger.from_revision_ids, None, this, 'rev2b') this.lock_write() self.addCleanup(this.unlock) merger = Merger.from_revision_ids(None, this, 'rev2b', other_branch=other.branch) self.assertEqual('rev2b', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id) merger = Merger.from_revision_ids(None, this, 'rev2b', 'rev2a', other_branch=other.branch) self.assertEqual('rev2a', merger.base_rev_id)
def test_from_mergeable(self): this, other = self.prepare_for_merging() md = merge_directive.MergeDirective2.from_objects( other.branch.repository, 'rev3', 0, 0, 'this') other.lock_read() self.addCleanup(other.unlock) merger, verified = Merger.from_mergeable(this, md, progress.DummyProgress()) md.patch = None merger, verified = Merger.from_mergeable(this, md, progress.DummyProgress()) self.assertEqual('inapplicable', verified) self.assertEqual('rev3', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id) md.base_revision_id = 'rev2b' merger, verified = Merger.from_mergeable(this, md, progress.DummyProgress()) self.assertEqual('rev2b', merger.base_rev_id)
def test_from_mergeable_old_merge_directive(self): this, other = self.prepare_for_merging() other.lock_write() self.addCleanup(other.unlock) md = merge_directive.MergeDirective.from_objects( other.branch.repository, 'rev3', 0, 0, 'this') merger, verified = Merger.from_mergeable(this, md, progress.DummyProgress()) self.assertEqual('rev3', merger.other_rev_id) self.assertEqual('rev1', merger.base_rev_id)
def test_from_uncommitted(self): this, other = self.set_up_trees() merger = Merger.from_uncommitted(this, other, None) self.assertIs(other, merger.other_tree) self.assertIs(None, merger.other_rev_id) self.assertEqual("rev2b", merger.base_rev_id)
def test_from_uncommitted(self): this, other = self.set_up_trees() merger = Merger.from_uncommitted(this, other, None) self.assertIs(other, merger.other_tree) self.assertIs(None, merger.other_rev_id) self.assertEqual('rev2b', merger.base_rev_id)
def merge_bundle(reader, tree, check_clean, merge_type, reprocess, show_base, change_reporter=None): """Merge a revision bundle into the current tree.""" pb = ui.ui_factory.nested_progress_bar() try: pp = ProgressPhase("Merge phase", 6, pb) pp.next_phase() install_bundle(tree.branch.repository, reader) merger = Merger(tree.branch, this_tree=tree, change_reporter=change_reporter) merger.pp = pp merger.pp.next_phase() if check_clean and tree.has_changes(): raise errors.UncommittedChanges(self) merger.other_rev_id = reader.target merger.other_tree = merger.revision_tree(reader.target) merger.other_basis = reader.target merger.pp.next_phase() merger.find_base() if merger.base_rev_id == merger.other_rev_id: note(gettext("Nothing to do.")) return 0 merger.merge_type = merge_type merger.show_base = show_base merger.reprocess = reprocess conflicts = merger.do_merge() merger.set_pending() finally: pb.clear() return conflicts
def test_from_uncommitted(self): this, other = self.set_up_trees() merger = Merger.from_uncommitted(this, other, progress.DummyProgress()) self.assertIs(other, merger.other_tree) self.assertIs(None, merger.other_rev_id) self.assertEqual('rev2b', merger.base_rev_id)