/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-08 14:55:19 UTC
  • mfrom: (3530 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3532.
  • Revision ID: john@arbash-meinel.com-20080708145519-paqg4kjwbpgs2xmq
Merge bzr.dev 3530

Show diffs side-by-side

added added

removed removed

Lines of Context:
450
450
        finally:
451
451
            tree_file.close()
452
452
 
 
453
    def test_merge_add_into_deleted_root(self):
 
454
        # Yes, people actually do this.  And report bugs if it breaks.
 
455
        source = self.make_branch_and_tree('source', format='rich-root-pack')
 
456
        self.build_tree(['source/foo/'])
 
457
        source.add('foo', 'foo-id')
 
458
        source.commit('Add foo')
 
459
        target = source.bzrdir.sprout('target').open_workingtree()
 
460
        subtree = target.extract('foo-id')
 
461
        subtree.commit('Delete root')
 
462
        self.build_tree(['source/bar'])
 
463
        source.add('bar', 'bar-id')
 
464
        source.commit('Add bar')
 
465
        subtree.merge_from_branch(source.branch)
 
466
 
453
467
 
454
468
class TestPlanMerge(TestCaseWithMemoryTransport):
455
469
 
456
470
    def setUp(self):
457
471
        TestCaseWithMemoryTransport.setUp(self)
458
 
        self.vf = knit.KnitVersionedFile('root', self.get_transport(),
459
 
                                         create=True)
460
 
        self.plan_merge_vf = versionedfile._PlanMergeVersionedFile('root',
461
 
                                                                   [self.vf])
462
 
 
463
 
    def add_version(self, version_id, parents, text):
464
 
        self.vf.add_lines(version_id, parents, [c+'\n' for c in text])
465
 
 
466
 
    def add_uncommitted_version(self, version_id, parents, text):
467
 
        self.plan_merge_vf.add_lines(version_id, parents,
 
472
        mapper = versionedfile.PrefixMapper()
 
473
        factory = knit.make_file_factory(True, mapper)
 
474
        self.vf = factory(self.get_transport())
 
475
        self.plan_merge_vf = versionedfile._PlanMergeVersionedFile('root')
 
476
        self.plan_merge_vf.fallback_versionedfiles.append(self.vf)
 
477
 
 
478
    def add_version(self, key, parents, text):
 
479
        self.vf.add_lines(key, parents, [c+'\n' for c in text])
 
480
 
 
481
    def add_uncommitted_version(self, key, parents, text):
 
482
        self.plan_merge_vf.add_lines(key, parents,
468
483
                                     [c+'\n' for c in text])
469
484
 
470
485
    def setup_plan_merge(self):
471
 
        self.add_version('A', [], 'abc')
472
 
        self.add_version('B', ['A'], 'acehg')
473
 
        self.add_version('C', ['A'], 'fabg')
474
 
        return _PlanMerge('B', 'C', self.plan_merge_vf)
 
486
        self.add_version(('root', 'A'), [], 'abc')
 
487
        self.add_version(('root', 'B'), [('root', 'A')], 'acehg')
 
488
        self.add_version(('root', 'C'), [('root', 'A')], 'fabg')
 
489
        return _PlanMerge('B', 'C', self.plan_merge_vf, ('root',))
475
490
 
476
491
    def setup_plan_merge_uncommitted(self):
477
 
        self.add_version('A', [], 'abc')
478
 
        self.add_uncommitted_version('B:', ['A'], 'acehg')
479
 
        self.add_uncommitted_version('C:', ['A'], 'fabg')
480
 
        return _PlanMerge('B:', 'C:', self.plan_merge_vf)
 
492
        self.add_version(('root', 'A'), [], 'abc')
 
493
        self.add_uncommitted_version(('root', 'B:'), [('root', 'A')], 'acehg')
 
494
        self.add_uncommitted_version(('root', 'C:'), [('root', 'A')], 'fabg')
 
495
        return _PlanMerge('B:', 'C:', self.plan_merge_vf, ('root',))
481
496
 
482
497
    def test_unique_lines(self):
483
498
        plan = self.setup_plan_merge()
491
506
        self.assertEqual(set([0, 3]), plan._find_new('C'))
492
507
 
493
508
    def test_find_new2(self):
494
 
        self.add_version('A', [], 'abc')
495
 
        self.add_version('B', ['A'], 'abcde')
496
 
        self.add_version('C', ['A'], 'abcefg')
497
 
        self.add_version('D', ['A', 'B', 'C'], 'abcdegh')
498
 
        my_plan = _PlanMerge('B', 'D', self.plan_merge_vf)
 
509
        self.add_version(('root', 'A'), [], 'abc')
 
510
        self.add_version(('root', 'B'), [('root', 'A')], 'abcde')
 
511
        self.add_version(('root', 'C'), [('root', 'A')], 'abcefg')
 
512
        self.add_version(('root', 'D'),
 
513
            [('root', 'A'), ('root', 'B'), ('root', 'C')], 'abcdegh')
 
514
        my_plan = _PlanMerge('B', 'D', self.plan_merge_vf, ('root',))
499
515
        self.assertEqual(set([5, 6]), my_plan._find_new('D'))
500
516
        self.assertEqual(set(), my_plan._find_new('A'))
501
517
 
502
518
    def test_find_new_no_ancestors(self):
503
 
        self.add_version('A', [], 'abc')
504
 
        self.add_version('B', [], 'xyz')
505
 
        my_plan = _PlanMerge('A', 'B', self.vf)
 
519
        self.add_version(('root', 'A'), [], 'abc')
 
520
        self.add_version(('root', 'B'), [], 'xyz')
 
521
        my_plan = _PlanMerge('A', 'B', self.vf, ('root',))
506
522
        self.assertEqual(set([0, 1, 2]), my_plan._find_new('A'))
507
523
 
508
524
    def test_plan_merge(self):
562
578
            list(_PlanMerge._subtract_plans(old_plan, new_plan)))
563
579
 
564
580
    def setup_merge_with_base(self):
565
 
        self.add_version('COMMON', [], 'abc')
566
 
        self.add_version('THIS', ['COMMON'], 'abcd')
567
 
        self.add_version('BASE', ['COMMON'], 'eabc')
568
 
        self.add_version('OTHER', ['BASE'], 'eafb')
 
581
        self.add_version(('root', 'COMMON'), [], 'abc')
 
582
        self.add_version(('root', 'THIS'), [('root', 'COMMON')], 'abcd')
 
583
        self.add_version(('root', 'BASE'), [('root', 'COMMON')], 'eabc')
 
584
        self.add_version(('root', 'OTHER'), [('root', 'BASE')], 'eafb')
569
585
 
570
586
    def test_plan_merge_with_base(self):
571
587
        self.setup_merge_with_base()
614
630
                         ], list(plan))
615
631
 
616
632
    def test_plan_lca_merge_with_criss_cross(self):
617
 
        self.add_version('ROOT', [], 'abc')
 
633
        self.add_version(('root', 'ROOT'), [], 'abc')
618
634
        # each side makes a change
619
 
        self.add_version('REV1', ['ROOT'], 'abcd')
620
 
        self.add_version('REV2', ['ROOT'], 'abce')
 
635
        self.add_version(('root', 'REV1'), [('root', 'ROOT')], 'abcd')
 
636
        self.add_version(('root', 'REV2'), [('root', 'ROOT')], 'abce')
621
637
        # both sides merge, discarding others' changes
622
 
        self.add_version('LCA1', ['REV1', 'REV2'], 'abcd')
623
 
        self.add_version('LCA2', ['REV1', 'REV2'], 'fabce')
 
638
        self.add_version(('root', 'LCA1'),
 
639
            [('root', 'REV1'), ('root', 'REV2')], 'abcd')
 
640
        self.add_version(('root', 'LCA2'),
 
641
            [('root', 'REV1'), ('root', 'REV2')], 'fabce')
624
642
        plan = self.plan_merge_vf.plan_lca_merge('LCA1', 'LCA2')
625
643
        self.assertEqual([('new-b', 'f\n'),
626
644
                          ('unchanged', 'a\n'),
630
648
                          ('conflicted-b', 'e\n'),
631
649
                         ], list(plan))
632
650
 
 
651
    def test_plan_lca_merge_with_null(self):
 
652
        self.add_version(('root', 'A'), [], 'ab')
 
653
        self.add_version(('root', 'B'), [], 'bc')
 
654
        plan = self.plan_merge_vf.plan_lca_merge('A', 'B')
 
655
        self.assertEqual([('new-a', 'a\n'),
 
656
                          ('unchanged', 'b\n'),
 
657
                          ('new-b', 'c\n'),
 
658
                         ], list(plan))
 
659
 
633
660
 
634
661
class TestMergeImplementation(object):
635
662