Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
    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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)
Esempio n. 9
0
 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)
Esempio n. 10
0
 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)
Esempio n. 11
0
 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)
Esempio n. 12
0
 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)
Esempio n. 13
0
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
Esempio n. 14
0
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
Esempio n. 15
0
 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)