577
577
[c+'\n' for c in text])
579
579
def setup_plan_merge(self):
580
self.add_rev('root', 'A', [], 'abc')
581
self.add_rev('root', 'B', ['A'], 'acehg')
582
self.add_rev('root', 'C', ['A'], 'fabg')
580
self.add_rev(b'root', b'A', [], b'abc')
581
self.add_rev(b'root', b'B', [b'A'], b'acehg')
582
self.add_rev(b'root', b'C', [b'A'], b'fabg')
583
583
return _PlanMerge('B', 'C', self.plan_merge_vf, ('root',))
585
585
def setup_plan_merge_uncommitted(self):
586
self.add_version(('root', 'A'), [], 'abc')
587
self.add_uncommitted_version(('root', 'B:'), [('root', 'A')], 'acehg')
588
self.add_uncommitted_version(('root', 'C:'), [('root', 'A')], 'fabg')
589
return _PlanMerge('B:', 'C:', self.plan_merge_vf, ('root',))
586
self.add_version((b'root', b'A'), [], b'abc')
587
self.add_uncommitted_version((b'root', b'B:'), [(b'root', b'A')], b'acehg')
588
self.add_uncommitted_version((b'root', b'C:'), [(b'root', b'A')], b'fabg')
589
return _PlanMerge(b'B:', b'C:', self.plan_merge_vf, (b'root',))
591
591
def test_base_from_plan(self):
592
592
self.setup_plan_merge()
593
plan = self.plan_merge_vf.plan_merge('B', 'C')
593
plan = self.plan_merge_vf.plan_merge(b'B', b'C')
594
594
pwm = versionedfile.PlanWeaveMerge(plan)
595
self.assertEqual(['a\n', 'b\n', 'c\n'], pwm.base_from_plan())
595
self.assertEqual([b'a\n', b'b\n', b'c\n'], pwm.base_from_plan())
597
597
def test_unique_lines(self):
598
598
plan = self.setup_plan_merge()
599
599
self.assertEqual(plan._unique_lines(
600
plan._get_matching_blocks('B', 'C')),
600
plan._get_matching_blocks(b'B', b'C')),
601
601
([1, 2, 3], [0, 2]))
603
603
def test_plan_merge(self):
604
604
self.setup_plan_merge()
605
plan = self.plan_merge_vf.plan_merge('B', 'C')
605
plan = self.plan_merge_vf.plan_merge(b'B', b'C')
606
606
self.assertEqual([
608
('unchanged', 'a\n'),
608
('unchanged', b'a\n'),
609
('killed-a', b'b\n'),
610
('killed-b', b'c\n'),
617
617
def test_plan_merge_cherrypick(self):
618
self.add_rev('root', 'A', [], 'abc')
619
self.add_rev('root', 'B', ['A'], 'abcde')
620
self.add_rev('root', 'C', ['A'], 'abcefg')
621
self.add_rev('root', 'D', ['A', 'B', 'C'], 'abcdegh')
622
my_plan = _PlanMerge('B', 'D', self.plan_merge_vf, ('root',))
618
self.add_rev(b'root', b'A', [], b'abc')
619
self.add_rev(b'root', b'B', [b'A'], b'abcde')
620
self.add_rev(b'root', b'C', [b'A'], b'abcefg')
621
self.add_rev(b'root', b'D', [b'A', b'B', b'C'], b'abcdegh')
622
my_plan = _PlanMerge(b'B', b'D', self.plan_merge_vf, (b'root',))
623
623
# We shortcut when one text supersedes the other in the per-file graph.
624
624
# We don't actually need to compare the texts at this point.
625
625
self.assertEqual([
633
633
list(my_plan.plan_merge()))
635
635
def test_plan_merge_no_common_ancestor(self):
636
self.add_rev('root', 'A', [], 'abc')
637
self.add_rev('root', 'B', [], 'xyz')
638
my_plan = _PlanMerge('A', 'B', self.plan_merge_vf, ('root',))
636
self.add_rev(b'root', b'A', [], b'abc')
637
self.add_rev(b'root', b'B', [], b'xyz')
638
my_plan = _PlanMerge(b'A', b'B', self.plan_merge_vf, (b'root',))
639
639
self.assertEqual([
646
646
list(my_plan.plan_merge()))
648
648
def test_plan_merge_tail_ancestors(self):