20
20
from bzrlib import (
23
24
merge as _mod_merge,
27
29
from bzrlib.branch import Branch
28
30
from bzrlib.conflicts import ConflictList, TextConflict
29
31
from bzrlib.errors import UnrelatedBranches, NoCommits, BzrCommandError
30
from bzrlib.merge import transform_tree, merge_inner
32
from bzrlib.merge import transform_tree, merge_inner, _PlanMerge
31
33
from bzrlib.osutils import pathjoin, file_kind
32
34
from bzrlib.revision import common_ancestor
33
from bzrlib.tests import TestCaseWithTransport
35
from bzrlib.tests import TestCaseWithTransport, TestCaseWithMemoryTransport
34
36
from bzrlib.trace import (enable_test_log, disable_test_log)
35
37
from bzrlib.workingtree import WorkingTree
285
287
merger.merge_type = _mod_merge.Merge3Merger
286
288
merger.do_merge()
287
289
self.assertEqual(tree_a.get_parent_ids(), [tree_b.last_revision()])
292
class TestPlanMerge(TestCaseWithMemoryTransport):
295
TestCaseWithMemoryTransport.setUp(self)
296
self.vf = knit.KnitVersionedFile('root', self.get_transport(),
298
self.plan_merge_vf = versionedfile._PlanMergeVersionedFile('root',
301
def add_version(self, version_id, parents, text):
302
self.vf.add_lines(version_id, parents, [c+'\n' for c in text])
304
def add_uncommitted_version(self, version_id, parents, text):
305
self.plan_merge_vf.add_lines(version_id, parents,
306
[c+'\n' for c in text])
308
def setup_plan_merge(self):
309
self.add_version('A', [], 'abc')
310
self.add_version('B', ['A'], 'acehg')
311
self.add_version('C', ['A'], 'fabg')
312
return _PlanMerge('B', 'C', self.plan_merge_vf)
314
def setup_plan_merge_uncommitted(self):
315
self.add_version('A', [], 'abc')
316
self.add_uncommitted_version('B:', ['A'], 'acehg')
317
self.add_uncommitted_version('C:', ['A'], 'fabg')
318
return _PlanMerge('B:', 'C:', self.plan_merge_vf)
320
def test_unique_lines(self):
321
plan = self.setup_plan_merge()
322
self.assertEqual(plan._unique_lines(
323
plan._get_matching_blocks('B', 'C')),
326
def test_find_new(self):
327
plan = self.setup_plan_merge()
328
self.assertEqual(set([2, 3, 4]), plan._find_new('B'))
329
self.assertEqual(set([0, 3]), plan._find_new('C'))
331
def test_find_new2(self):
332
self.add_version('A', [], 'abc')
333
self.add_version('B', ['A'], 'abcde')
334
self.add_version('C', ['A'], 'abcefg')
335
self.add_version('D', ['A', 'B', 'C'], 'abcdegh')
336
my_plan = _PlanMerge('B', 'D', self.plan_merge_vf)
337
self.assertEqual(set([5, 6]), my_plan._find_new('D'))
338
self.assertEqual(set(), my_plan._find_new('A'))
340
def test_find_new_no_ancestors(self):
341
self.add_version('A', [], 'abc')
342
self.add_version('B', [], 'xyz')
343
my_plan = _PlanMerge('A', 'B', self.vf)
344
self.assertEqual(set([0, 1, 2]), my_plan._find_new('A'))
346
def test_plan_merge(self):
347
self.setup_plan_merge()
348
plan = self.plan_merge_vf.plan_merge('B', 'C')
351
('unchanged', 'a\n'),
356
('unchanged', 'g\n')],
359
def test_plan_merge_uncommitted_files(self):
360
self.setup_plan_merge_uncommitted()
361
plan = self.plan_merge_vf.plan_merge('B:', 'C:')
364
('unchanged', 'a\n'),
369
('unchanged', 'g\n')],