~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_status.py

  • Committer: Vincent Ladeuil
  • Date: 2010-02-03 07:18:36 UTC
  • mto: (5008.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5009.
  • Revision ID: v.ladeuil+lp@free.fr-20100203071836-u9b86q68fr9ri5s6
Fix NEWS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Development Ltd
 
1
# Copyright (C) 2005 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
18
from StringIO import StringIO
19
19
 
 
20
from bzrlib import config
20
21
from bzrlib.revisionspec import RevisionSpec
21
22
from bzrlib.status import show_pending_merges, show_tree_status
22
23
from bzrlib.tests import TestCaseWithTransport
29
30
        tree = self.make_branch_and_tree('a')
30
31
        tree.commit('empty commit')
31
32
        tree2 = self.make_branch_and_tree('b')
32
 
        tree2.branch.fetch(tree.branch)
33
 
        tree2.set_pending_merges([tree.last_revision()])
 
33
        # set a left most parent that is not a present commit
 
34
        tree2.add_parent_tree_id('some-ghost', allow_leftmost_as_ghost=True)
 
35
        # do a merge
 
36
        tree2.merge_from_branch(tree.branch)
34
37
        output = StringIO()
35
 
        show_pending_merges(tree2, output)
 
38
        tree2.lock_read()
 
39
        try:
 
40
            show_pending_merges(tree2, output)
 
41
        finally:
 
42
            tree2.unlock()
36
43
        self.assertContainsRe(output.getvalue(), 'empty commit')
37
44
 
 
45
    def make_multiple_pending_tree(self):
 
46
        config.GlobalConfig().set_user_option('email', 'Joe Foo <joe@foo.com>')
 
47
        tree = self.make_branch_and_tree('a')
 
48
        tree.commit('commit 1', timestamp=1196796819, timezone=0)
 
49
        tree2 = tree.bzrdir.clone('b').open_workingtree()
 
50
        tree.commit('commit 2', timestamp=1196796819, timezone=0)
 
51
        tree2.commit('commit 2b', timestamp=1196796819, timezone=0)
 
52
        tree3 = tree2.bzrdir.clone('c').open_workingtree()
 
53
        tree2.commit('commit 3b', timestamp=1196796819, timezone=0)
 
54
        tree3.commit('commit 3c', timestamp=1196796819, timezone=0)
 
55
        tree.merge_from_branch(tree2.branch)
 
56
        tree.merge_from_branch(tree3.branch, force=True)
 
57
        return tree
 
58
 
 
59
    def test_multiple_pending(self):
 
60
        tree = self.make_multiple_pending_tree()
 
61
        output = StringIO()
 
62
        tree.lock_read()
 
63
        self.addCleanup(tree.unlock)
 
64
        show_pending_merges(tree, output)
 
65
        # 2b doesn't appear because it's an ancestor of 3b
 
66
        self.assertEqualDiff(
 
67
            'pending merge tips: (use -v to see all merge revisions)\n'
 
68
            '  Joe Foo 2007-12-04 commit 3b\n'
 
69
            '  Joe Foo 2007-12-04 commit 3c\n',
 
70
            output.getvalue())
 
71
 
 
72
    def test_multiple_pending_verbose(self):
 
73
        tree = self.make_multiple_pending_tree()
 
74
        output = StringIO()
 
75
        tree.lock_read()
 
76
        self.addCleanup(tree.unlock)
 
77
        show_pending_merges(tree, output, verbose=True)
 
78
        # Even though 2b is in the ancestry of 3c, it should only be displayed
 
79
        # under the first merge parent.
 
80
        self.assertEqualDiff('pending merges:\n'
 
81
                             '  Joe Foo 2007-12-04 commit 3b\n'
 
82
                             '    Joe Foo 2007-12-04 commit 2b\n'
 
83
                             '  Joe Foo 2007-12-04 commit 3c\n',
 
84
                             output.getvalue())
 
85
 
 
86
    def test_with_pending_ghost(self):
 
87
        """Test when a pending merge is itself a ghost"""
 
88
        tree = self.make_branch_and_tree('a')
 
89
        tree.commit('first')
 
90
        tree.add_parent_tree_id('a-ghost-revision')
 
91
        tree.lock_read()
 
92
        self.addCleanup(tree.unlock)
 
93
        output = StringIO()
 
94
        show_pending_merges(tree, output)
 
95
        self.assertEqualDiff(
 
96
            'pending merge tips: (use -v to see all merge revisions)\n'
 
97
            '  (ghost) a-ghost-revision\n',
 
98
            output.getvalue())
 
99
 
 
100
    def test_pending_with_ghosts(self):
 
101
        """Test when a pending merge's ancestry includes ghosts."""
 
102
        config.GlobalConfig().set_user_option('email', 'Joe Foo <joe@foo.com>')
 
103
        tree = self.make_branch_and_tree('a')
 
104
        tree.commit('empty commit')
 
105
        tree2 = tree.bzrdir.clone('b').open_workingtree()
 
106
        tree2.commit('a non-ghost', timestamp=1196796819, timezone=0)
 
107
        tree2.add_parent_tree_id('a-ghost-revision')
 
108
        tree2.commit('commit with ghost', timestamp=1196796819, timezone=0)
 
109
        tree2.commit('another non-ghost', timestamp=1196796819, timezone=0)
 
110
        tree.merge_from_branch(tree2.branch)
 
111
        tree.lock_read()
 
112
        self.addCleanup(tree.unlock)
 
113
        output = StringIO()
 
114
        show_pending_merges(tree, output, verbose=True)
 
115
        self.assertEqualDiff('pending merges:\n'
 
116
                             '  Joe Foo 2007-12-04 another non-ghost\n'
 
117
                             '    Joe Foo 2007-12-04 [merge] commit with ghost\n'
 
118
                             '    (ghost) a-ghost-revision\n'
 
119
                             '    Joe Foo 2007-12-04 a non-ghost\n',
 
120
                             output.getvalue())
 
121
 
38
122
    def tests_revision_to_revision(self):
39
123
        """doing a status between two revision trees should work."""
40
124
        tree = self.make_branch_and_tree('.')
42
126
        r2_id = tree.commit('two', allow_pointless=True)
43
127
        r2_tree = tree.branch.repository.revision_tree(r2_id)
44
128
        output = StringIO()
45
 
        show_tree_status(tree, to_file=output, revision=[RevisionSpec("revid:%s" % r1_id), RevisionSpec("revid:%s" % r2_id)])
 
129
        show_tree_status(tree, to_file=output,
 
130
                     revision=[RevisionSpec.from_string("revid:%s" % r1_id),
 
131
                               RevisionSpec.from_string("revid:%s" % r2_id)])
46
132
        # return does not matter as long as it did not raise.