def test_make_preview_transform(self): this_tree = self.make_branch_and_tree('this') self.build_tree_contents([('this/file', '1\n')]) this_tree.add('file', 'file-id') this_tree.commit('rev1', rev_id='rev1') other_tree = this_tree.bzrdir.sprout('other').open_workingtree() self.build_tree_contents([('this/file', '1\n2a\n')]) this_tree.commit('rev2', rev_id='rev2a') self.build_tree_contents([('other/file', '2b\n1\n')]) other_tree.commit('rev2', rev_id='rev2b') this_tree.lock_write() self.addCleanup(this_tree.unlock) merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), this_tree, 'rev2b', other_branch=other_tree.branch) merger.merge_type = _mod_merge.Merge3Merger tree_merger = merger.make_merger() tt = tree_merger.make_preview_transform() self.addCleanup(tt.finalize) preview_tree = tt.get_preview_tree() tree_file = this_tree.get_file('file-id') try: self.assertEqual('1\n2a\n', tree_file.read()) finally: tree_file.close() preview_file = preview_tree.get_file('file-id') try: self.assertEqual('2b\n1\n2a\n', preview_file.read()) finally: preview_file.close()
def test_weave_cherrypick(self): this_tree, other_tree = self.prepare_cherrypick() merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), this_tree, 'rev3b', 'rev2b', other_tree.branch) merger.merge_type = _mod_merge.WeaveMerger merger.do_merge() self.assertFileEqual('c\na\n', 'this/file')
def do_merge(self, target_tree, source_tree, **kwargs): merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), target_tree, source_tree.last_revision(), other_branch=source_tree.branch) merger.merge_type=self.merge_type for name, value in kwargs.items(): setattr(merger, name, value) merger.do_merge()
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_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_convert_knit_dirstate_empty(self): # test that asking for an upgrade from knit to dirstate works. tree = self.make_branch_and_tree('tree', format='knit') target = bzrdir.format_registry.make_bzrdir('dirstate') converter = tree.bzrdir._format.get_converter(target) converter.convert(tree.bzrdir, progress.DummyProgress()) new_tree = workingtree.WorkingTree.open('tree') self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4) self.assertEqual('null:', new_tree.last_revision())
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_convert_knit_dirstate_content(self): # smoke test for dirstate conversion: we call dirstate primitives, # and its there that the core logic is tested. tree = self.make_branch_and_tree('tree', format='knit') self.build_tree(['tree/file']) tree.add(['file'], ['file-id']) target = bzrdir.format_registry.make_bzrdir('dirstate') converter = tree.bzrdir._format.get_converter(target) converter.convert(tree.bzrdir, progress.DummyProgress()) new_tree = workingtree.WorkingTree.open('tree') self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4) self.assertEqual('null:', new_tree.last_revision())
def test_merge_uncommitted_otherbasis_ancestor_of_thisbasis_weave(self): tree_a = self.make_branch_and_tree('a') self.build_tree(['a/file_1', 'a/file_2']) tree_a.add(['file_1']) tree_a.commit('commit 1') tree_a.add(['file_2']) tree_a.commit('commit 2') tree_b = tree_a.bzrdir.sprout('b').open_workingtree() tree_b.rename_one('file_1', 'renamed') merger = _mod_merge.Merger.from_uncommitted(tree_a, tree_b, progress.DummyProgress()) merger.merge_type = _mod_merge.WeaveMerger merger.do_merge() self.assertEqual(tree_a.get_parent_ids(), [tree_b.last_revision()])
def test_convert_branch5_branch6(self): branch = self.make_branch('branch', format='knit') branch.set_revision_history(['AB', 'CD']) branch.set_parent('file:///EF') branch.set_bound_location('file:///GH') branch.set_push_location('file:///IJ') target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree') converter = branch.bzrdir._format.get_converter(target) converter.convert(branch.bzrdir, progress.DummyProgress()) new_branch = _mod_branch.Branch.open(self.get_url('branch')) self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6) self.assertEqual('CD', new_branch.last_revision()) self.assertEqual('file:///EF', new_branch.get_parent()) self.assertEqual('file:///GH', new_branch.get_bound_location()) branch_config = new_branch.get_config()._get_branch_data_config() self.assertEqual('file:///IJ', branch_config.get_user_option('push_location')) branch2 = self.make_branch('branch2', format='knit') converter = branch2.bzrdir._format.get_converter(target) converter.convert(branch2.bzrdir, progress.DummyProgress()) branch2 = _mod_branch.Branch.open(self.get_url('branch')) self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
def test_convert_knit_one_parent_dirstate(self): # test that asking for an upgrade from knit to dirstate works. tree = self.make_branch_and_tree('tree', format='knit') rev_id = tree.commit('first post') target = bzrdir.format_registry.make_bzrdir('dirstate') converter = tree.bzrdir._format.get_converter(target) converter.convert(tree.bzrdir, progress.DummyProgress()) new_tree = workingtree.WorkingTree.open('tree') self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4) self.assertEqual(rev_id, new_tree.last_revision()) for path in [ 'basis-inventory-cache', 'inventory', 'last-revision', 'pending-merges', 'stat-cache' ]: self.failIfExists('tree/.bzr/checkout/' + path)
def test_convert_knit_merges_dirstate(self): tree = self.make_branch_and_tree('tree', format='knit') rev_id = tree.commit('first post') merge_tree = tree.bzrdir.sprout('tree2').open_workingtree() rev_id2 = tree.commit('second post') rev_id3 = merge_tree.commit('second merge post') tree.merge_from_branch(merge_tree.branch) target = bzrdir.format_registry.make_bzrdir('dirstate') converter = tree.bzrdir._format.get_converter(target) converter.convert(tree.bzrdir, progress.DummyProgress()) new_tree = workingtree.WorkingTree.open('tree') self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4) self.assertEqual(rev_id2, new_tree.last_revision()) self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids()) for path in [ 'basis-inventory-cache', 'inventory', 'last-revision', 'pending-merges', 'stat-cache' ]: self.failIfExists('tree/.bzr/checkout/' + path)
def test_merge3_will_detect_cherrypick(self): this_tree = self.make_branch_and_tree('this') self.build_tree_contents([('this/file', "a\n")]) this_tree.add('file') this_tree.commit('rev1') other_tree = this_tree.bzrdir.sprout('other').open_workingtree() self.build_tree_contents([('other/file', "a\nb\n")]) other_tree.commit('rev2b', rev_id='rev2b') self.build_tree_contents([('other/file', "a\nb\nc\n")]) other_tree.commit('rev3b', rev_id='rev3b') this_tree.lock_write() self.addCleanup(this_tree.unlock) merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), this_tree, 'rev3b', 'rev2b', other_tree.branch) merger.merge_type = _mod_merge.Merge3Merger merger.do_merge() self.assertFileEqual('a\n' '<<<<<<< TREE\n' '=======\n' 'c\n' '>>>>>>> MERGE-SOURCE\n', 'this/file')
def test_merge3_can_reverse_cherrypick(self): this_tree, other_tree = self.prepare_cherrypick() merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), this_tree, 'rev2b', 'rev3b', other_tree.branch) merger.merge_type = _mod_merge.Merge3Merger merger.do_merge()
def test_weave_cannot_reverse_cherrypick(self): this_tree, other_tree = self.prepare_cherrypick() merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(), this_tree, 'rev2b', 'rev3b', other_tree.branch) merger.merge_type = _mod_merge.WeaveMerger self.assertRaises(errors.CannotReverseCherrypick, merger.do_merge)
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)