~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_merge.py

  • Committer: Vincent Ladeuil
  • Date: 2011-07-06 09:22:00 UTC
  • mfrom: (6008 +trunk)
  • mto: (6012.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6013.
  • Revision ID: v.ladeuil+lp@free.fr-20110706092200-7iai2mwzc0sqdsvf
MergingĀ inĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
26
26
 
27
27
from bzrlib import (
28
28
    branch,
29
 
    branchbuilder,
30
29
    bzrdir,
31
30
    conflicts,
32
31
    merge_directive,
35
34
    urlutils,
36
35
    workingtree,
37
36
    )
 
37
from bzrlib.tests import (
 
38
    scenarios,
 
39
    script,
 
40
    )
 
41
 
 
42
 
 
43
load_tests = scenarios.load_tests_apply_scenarios
38
44
 
39
45
 
40
46
class TestMerge(tests.TestCaseWithTransport):
353
359
        self.assertPathExists('file1')
354
360
        self.assertPathDoesNotExist('file2')
355
361
 
 
362
    def test_merge_nonexistent_file(self):
 
363
        """It should not be possible to merge changes from a file which
 
364
        does not exist."""
 
365
        tree_a = self.make_branch_and_tree('tree_a')
 
366
        self.build_tree_contents([('tree_a/file', 'bar\n')])
 
367
        tree_a.add(['file'])
 
368
        tree_a.commit('commit 1')
 
369
        os.chdir('tree_a')
 
370
        self.run_bzr_error(('Path\(s\) do not exist: non/existing',),
 
371
                           ['merge', 'non/existing'])
 
372
 
356
373
    def pullable_branch(self):
357
374
        tree_a = self.make_branch_and_tree('a')
358
375
        self.build_tree_contents([('a/file', 'bar\n')])
534
551
 
535
552
    def test_merge_from_submit(self):
536
553
        tree_a = self.make_branch_and_tree('a')
 
554
        tree_a.commit('test')
537
555
        tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
538
556
        tree_c = tree_a.bzrdir.sprout('c').open_workingtree()
539
557
        out, err = self.run_bzr(['merge', '-d', 'c'])
544
562
 
545
563
    def test_remember_sets_submit(self):
546
564
        tree_a = self.make_branch_and_tree('a')
 
565
        tree_a.commit('rev1')
547
566
        tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
548
567
        self.assertIs(tree_b.branch.get_submit_branch(), None)
549
568
 
556
575
        self.assertEqual(tree_b.branch.get_submit_branch(),
557
576
                         tree_a.bzrdir.root_transport.base)
558
577
 
 
578
    def test_no_remember_dont_set_submit(self):
 
579
        tree_a = self.make_branch_and_tree('a')
 
580
        self.build_tree_contents([('a/file', "a\n")])
 
581
        tree_a.add('file')
 
582
        tree_a.commit('rev1')
 
583
        tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
 
584
        self.assertIs(tree_b.branch.get_submit_branch(), None)
 
585
 
 
586
        # Remember should not happen if using default from parent
 
587
        out, err = self.run_bzr(['merge', '-d', 'b', '--no-remember'])
 
588
        self.assertEquals(None, tree_b.branch.get_submit_branch())
 
589
 
 
590
        # Remember should not happen if user supplies location but ask for not
 
591
        # remembering it
 
592
        out, err = self.run_bzr(['merge', '-d', 'b', '--no-remember', 'a'])
 
593
        self.assertEqual(None, tree_b.branch.get_submit_branch())
 
594
 
559
595
    def test_weave_cherrypick(self):
560
596
        this_tree = self.make_branch_and_tree('this')
561
597
        self.build_tree_contents([('this/file', "a\n")])
625
661
 
626
662
    def test_merge_interactive_unlocks_branch(self):
627
663
        this = self.make_branch_and_tree('this')
628
 
        other = self.make_branch_and_tree('other')
629
 
        other.commit('empty commit')
 
664
        this.commit('empty commit')
 
665
        other = this.bzrdir.sprout('other').open_workingtree()
 
666
        other.commit('empty commit 2')
630
667
        self.run_bzr('merge -i -d this other')
631
668
        this.lock_write()
632
669
        this.unlock()
633
670
 
634
 
    def test_merge_reversed_revision_range(self):
635
 
        tree = self.make_branch_and_tree(".")
 
671
    def test_merge_fetches_tags(self):
 
672
        """Tags are updated by merge, and revisions named in those tags are
 
673
        fetched.
 
674
        """
 
675
        # Make a source, sprout a target off it
 
676
        builder = self.make_branch_builder('source')
 
677
        builder.build_commit(message="Rev 1", rev_id='rev-1')
 
678
        source = builder.get_branch()
 
679
        target_bzrdir = source.bzrdir.sprout('target')
 
680
        # Add a non-ancestry tag to source
 
681
        builder.build_commit(message="Rev 2a", rev_id='rev-2a')
 
682
        source.tags.set_tag('tag-a', 'rev-2a')
 
683
        source.set_last_revision_info(1, 'rev-1')
 
684
        builder.build_commit(message="Rev 2b", rev_id='rev-2b')
 
685
        # Merge from source
 
686
        self.run_bzr('merge -d target source')
 
687
        target = target_bzrdir.open_branch()
 
688
        # The tag is present, and so is its revision.
 
689
        self.assertEqual('rev-2a', target.tags.lookup_tag('tag-a'))
 
690
        target.repository.get_revision('rev-2a')
 
691
 
 
692
 
 
693
class TestMergeRevisionRange(tests.TestCaseWithTransport):
 
694
 
 
695
    scenarios = (('whole-tree', dict(context='.')),
 
696
                 ('file-only', dict(context='a')))
 
697
 
 
698
    def setUp(self):
 
699
        super(TestMergeRevisionRange, self).setUp()
 
700
        self.tree = self.make_branch_and_tree(".")
 
701
        self.tree.commit('initial commit')
636
702
        for f in ("a", "b"):
637
703
            self.build_tree([f])
638
 
            tree.add(f)
639
 
            tree.commit("added "+f)
640
 
        for context in (".", "", "a"):
641
 
            self.run_bzr("merge -r 1..0 " + context)
642
 
            self.assertPathDoesNotExist("a")
643
 
            tree.revert()
644
 
            self.assertPathExists("a")
645
 
 
 
704
            self.tree.add(f)
 
705
            self.tree.commit("added " + f)
 
706
 
 
707
    def test_merge_reversed_revision_range(self):
 
708
        self.run_bzr("merge -r 2..1 " + self.context)
 
709
        self.assertPathDoesNotExist("a")
 
710
        self.assertPathExists("b")
 
711
 
 
712
 
 
713
class TestMergeScript(script.TestCaseWithTransportAndScript):
 
714
    def test_merge_empty_branch(self):
 
715
        source = self.make_branch_and_tree('source')
 
716
        self.build_tree(['source/a'])
 
717
        source.add('a')
 
718
        source.commit('Added a', rev_id='rev1')
 
719
        target = self.make_branch_and_tree('target')
 
720
        self.run_script("""\
 
721
$ bzr merge -d target source
 
722
2>bzr: ERROR: Merging into empty branches not currently supported, https://bugs.launchpad.net/bzr/+bug/308562
 
723
""")
646
724
 
647
725
class TestMergeForce(tests.TestCaseWithTransport):
648
726