~bzr-pqm/bzr/bzr.dev

3389.2.5 by John Arbash Meinel
Fix the line endings on test_check and test_reconcile
1
# Copyright (C) 2008 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3389.2.5 by John Arbash Meinel
Fix the line endings on test_check and test_reconcile
16
17
"""Tests for branch implementations - test reconcile() functionality"""
18
19
from bzrlib import errors, reconcile
4523.1.1 by Martin Pool
Rename tests.branch_implementations to per_branch
20
from bzrlib.tests.per_branch import TestCaseWithBranch
3389.2.5 by John Arbash Meinel
Fix the line endings on test_check and test_reconcile
21
22
23
class TestBranchReconcile(TestCaseWithBranch):
24
25
    def test_reconcile_fixes_invalid_revhistory(self):
26
        # Different formats have different ways of handling invalid revision
27
        # histories, so the setup portion is customized
28
        tree = self.make_branch_and_tree('test')
29
        r1 = tree.commit('one')
30
        r2 = tree.commit('two')
31
        r3 = tree.commit('three')
32
        r4 = tree.commit('four')
33
        # create an alternate branch
34
        tree.set_parent_ids([r1])
35
        tree.branch.set_last_revision_info(1, r1)
36
        r2b = tree.commit('two-b')
37
38
        # now go back and merge the commit
39
        tree.set_parent_ids([r4, r2b])
40
        tree.branch.set_last_revision_info(4, r4)
41
42
        r5 = tree.commit('five')
43
        # Now, try to set an invalid history
44
        try:
45
            tree.branch.set_revision_history([r1, r2b, r5])
3489.2.4 by Andrew Bennetts
Fix all tests broken by fixing make_branch_and_tree.
46
            if tree.branch.last_revision_info() != (3, r5):
47
                # RemoteBranch silently corrects an impossible revision
48
                # history given to set_revision_history.  It can be tricked
49
                # with set_last_revision_info though.
50
                tree.branch.set_last_revision_info(3, r5)
3389.2.5 by John Arbash Meinel
Fix the line endings on test_check and test_reconcile
51
        except errors.NotLefthandHistory:
52
            # Branch5 allows set_revision_history to be wrong
53
            # Branch6 raises NotLefthandHistory, but we can force bogus stuff
54
            # with set_last_revision_info
55
            tree.branch.set_last_revision_info(3, r5)
56
57
        self.assertEqual((3, r5), tree.branch.last_revision_info())
58
        reconciler = tree.branch.reconcile()
59
        self.assertEqual((5, r5), tree.branch.last_revision_info())
60
        self.assertIs(True, reconciler.fixed_history)
61
62
    def test_reconcile_returns_reconciler(self):
63
        a_branch = self.make_branch('a_branch')
64
        result = a_branch.reconcile()
65
        self.assertIsInstance(result, reconcile.BranchReconciler)
66
        # No history to fix
67
        self.assertIs(False, result.fixed_history)
68
69
    def test_reconcile_supports_thorough(self):
70
        a_branch = self.make_branch('a_branch')
71
        a_branch.reconcile(thorough=False)
72
        a_branch.reconcile(thorough=True)
4266.3.11 by Jelmer Vernooij
Support reconcile on branches with ghosts in their mainline.
73
74
    def test_reconcile_handles_ghosts_in_revhistory(self):
75
        tree = self.make_branch_and_tree('test')
76
        tree.set_parent_ids(["spooky"], allow_leftmost_as_ghost=True)
77
        r1 = tree.commit('one')
78
        r2 = tree.commit('two')
79
        tree.branch.set_last_revision_info(2, r2)
80
81
        reconciler = tree.branch.reconcile()
82
        self.assertEquals([r1, r2], tree.branch.revision_history())