/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5387.2.7 by John Arbash Meinel
Merge bzr.dev 5444 to resolve some small text conflicts.
1
# Copyright (C) 2006-2010 Canonical Ltd
1551.6.20 by Aaron Bentley
Add copyright and whitespace
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
1551.6.20 by Aaron Bentley
Add copyright and whitespace
16
17
1551.6.19 by Aaron Bentley
Fix pending merge status on empty trees
18
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
19
from .. import (
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
20
    config,
21
    status as _mod_status,
22
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
23
from ..revisionspec import RevisionSpec
24
from ..sixish import (
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
25
    BytesIO,
26
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
27
from ..status import show_pending_merges, show_tree_status
28
from . import TestCaseWithTransport
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
29
30
31
class TestStatus(TestCaseWithTransport):
1551.6.20 by Aaron Bentley
Add copyright and whitespace
32
1551.6.19 by Aaron Bentley
Fix pending merge status on empty trees
33
    def test_pending_none(self):
1551.6.20 by Aaron Bentley
Add copyright and whitespace
34
        # Test whether show_pending_merges works in a tree with no commits
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
35
        tree = self.make_branch_and_tree('a')
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
36
        tree.commit('empty commit')
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
37
        tree2 = self.make_branch_and_tree('b')
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
38
        # set a left most parent that is not a present commit
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
39
        tree2.add_parent_tree_id('some-ghost', allow_leftmost_as_ghost=True)
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
40
        # do a merge
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
41
        tree2.merge_from_branch(tree.branch)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
42
        output = BytesIO()
3074.3.1 by John Arbash Meinel
Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.
43
        tree2.lock_read()
44
        try:
45
            show_pending_merges(tree2, output)
46
        finally:
47
            tree2.unlock()
1551.6.19 by Aaron Bentley
Fix pending merge status on empty trees
48
        self.assertContainsRe(output.getvalue(), 'empty commit')
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
49
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
50
    def make_multiple_pending_tree(self):
6449.6.1 by Jelmer Vernooij
Use config stacks in a few more places in the test suite.
51
        config.GlobalStack().set('email', 'Joe Foo <joe@foo.com>')
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
52
        tree = self.make_branch_and_tree('a')
53
        tree.commit('commit 1', timestamp=1196796819, timezone=0)
54
        tree2 = tree.bzrdir.clone('b').open_workingtree()
55
        tree.commit('commit 2', timestamp=1196796819, timezone=0)
56
        tree2.commit('commit 2b', timestamp=1196796819, timezone=0)
3377.3.37 by John Arbash Meinel
Ian's first review comments.
57
        tree3 = tree2.bzrdir.clone('c').open_workingtree()
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
58
        tree2.commit('commit 3b', timestamp=1196796819, timezone=0)
59
        tree3.commit('commit 3c', timestamp=1196796819, timezone=0)
60
        tree.merge_from_branch(tree2.branch)
4721.3.2 by Vincent Ladeuil
Simplify mutable_tree.has_changes() and update call sites.
61
        tree.merge_from_branch(tree3.branch, force=True)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
62
        return tree
63
64
    def test_multiple_pending(self):
65
        tree = self.make_multiple_pending_tree()
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
66
        output = BytesIO()
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
67
        tree.lock_read()
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
68
        self.addCleanup(tree.unlock)
69
        show_pending_merges(tree, output)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
70
        # 2b doesn't appear because it's an ancestor of 3b
3936.2.3 by Ian Clatworthy
feedback from jameinel
71
        self.assertEqualDiff(
72
            'pending merge tips: (use -v to see all merge revisions)\n'
73
            '  Joe Foo 2007-12-04 commit 3b\n'
74
            '  Joe Foo 2007-12-04 commit 3c\n',
75
            output.getvalue())
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
76
77
    def test_multiple_pending_verbose(self):
78
        tree = self.make_multiple_pending_tree()
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
79
        output = BytesIO()
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
80
        tree.lock_read()
81
        self.addCleanup(tree.unlock)
82
        show_pending_merges(tree, output, verbose=True)
3377.3.37 by John Arbash Meinel
Ian's first review comments.
83
        # Even though 2b is in the ancestry of 3c, it should only be displayed
84
        # under the first merge parent.
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
85
        self.assertEqualDiff('pending merges:\n'
86
                             '  Joe Foo 2007-12-04 commit 3b\n'
87
                             '    Joe Foo 2007-12-04 commit 2b\n'
88
                             '  Joe Foo 2007-12-04 commit 3c\n',
89
                             output.getvalue())
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
90
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
91
    def test_with_pending_ghost(self):
92
        """Test when a pending merge is itself a ghost"""
93
        tree = self.make_branch_and_tree('a')
94
        tree.commit('first')
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
95
        tree.add_parent_tree_id('a-ghost-revision')
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
96
        tree.lock_read()
97
        self.addCleanup(tree.unlock)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
98
        output = BytesIO()
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
99
        show_pending_merges(tree, output)
3936.2.3 by Ian Clatworthy
feedback from jameinel
100
        self.assertEqualDiff(
101
            'pending merge tips: (use -v to see all merge revisions)\n'
102
            '  (ghost) a-ghost-revision\n',
103
            output.getvalue())
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
104
105
    def test_pending_with_ghosts(self):
106
        """Test when a pending merge's ancestry includes ghosts."""
6449.6.1 by Jelmer Vernooij
Use config stacks in a few more places in the test suite.
107
        config.GlobalStack().set('email', 'Joe Foo <joe@foo.com>')
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
108
        tree = self.make_branch_and_tree('a')
109
        tree.commit('empty commit')
110
        tree2 = tree.bzrdir.clone('b').open_workingtree()
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
111
        tree2.commit('a non-ghost', timestamp=1196796819, timezone=0)
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
112
        tree2.add_parent_tree_id('a-ghost-revision')
113
        tree2.commit('commit with ghost', timestamp=1196796819, timezone=0)
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
114
        tree2.commit('another non-ghost', timestamp=1196796819, timezone=0)
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
115
        tree.merge_from_branch(tree2.branch)
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
116
        tree.lock_read()
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
117
        self.addCleanup(tree.unlock)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
118
        output = BytesIO()
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
119
        show_pending_merges(tree, output, verbose=True)
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
120
        self.assertEqualDiff('pending merges:\n'
121
                             '  Joe Foo 2007-12-04 another non-ghost\n'
3998.1.1 by Ian Clatworthy
Add merge indication to line format (Neil Martinsen-Burrell)
122
                             '    Joe Foo 2007-12-04 [merge] commit with ghost\n'
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
123
                             '    (ghost) a-ghost-revision\n'
124
                             '    Joe Foo 2007-12-04 a non-ghost\n',
125
                             output.getvalue())
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
126
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
127
    def tests_revision_to_revision(self):
128
        """doing a status between two revision trees should work."""
129
        tree = self.make_branch_and_tree('.')
130
        r1_id = tree.commit('one', allow_pointless=True)
131
        r2_id = tree.commit('two', allow_pointless=True)
132
        r2_tree = tree.branch.repository.revision_tree(r2_id)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
133
        output = BytesIO()
1948.4.29 by John Arbash Meinel
Remove a few more direct references to RevisionSpec
134
        show_tree_status(tree, to_file=output,
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
135
                     revision=[RevisionSpec.from_string("revid:%s" % r1_id),
136
                               RevisionSpec.from_string("revid:%s" % r2_id)])
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
137
        # return does not matter as long as it did not raise.
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
138
139
140
class TestHooks(TestCaseWithTransport):
141
142
    def test_constructor(self):
143
        """Check that creating a StatusHooks instance has the right defaults.
144
        """
5622.3.10 by Jelmer Vernooij
Don't require arguments to hooks.
145
        hooks = _mod_status.StatusHooks()
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
146
        self.assertTrue("post_status" in hooks, "post_status not in %s" % hooks)
5393.3.7 by Parth Malwankar
added pre_status hook
147
        self.assertTrue("pre_status" in hooks, "pre_status not in %s" % hooks)
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
148
149
    def test_installed_hooks_are_StatusHooks(self):
150
        """The installed hooks object should be a StatusHooks.
151
        """
152
        # the installed hooks are saved in self._preserved_hooks.
153
        self.assertIsInstance(self._preserved_hooks[_mod_status][1],
154
            _mod_status.StatusHooks)
155
156
    def test_post_status_hook(self):
157
        """Ensure that post_status hook is invoked with the right args.
158
        """
159
        calls = []
160
        _mod_status.hooks.install_named_hook('post_status', calls.append, None)
161
        self.assertLength(0, calls)
162
        tree = self.make_branch_and_tree('.')
163
        r1_id = tree.commit('one', allow_pointless=True)
164
        r2_id = tree.commit('two', allow_pointless=True)
165
        r2_tree = tree.branch.repository.revision_tree(r2_id)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
166
        output = BytesIO()
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
167
        show_tree_status(tree, to_file=output,
168
            revision=[RevisionSpec.from_string("revid:%s" % r1_id),
169
                RevisionSpec.from_string("revid:%s" % r2_id)])
170
        self.assertLength(1, calls)
171
        params = calls[0]
5393.3.7 by Parth Malwankar
added pre_status hook
172
        self.assertIsInstance(params, _mod_status.StatusHookParams)
173
        attrs = ['old_tree', 'new_tree', 'to_file', 'versioned',
6282.4.1 by Francis Devereux
Pass specific_files to status hooks
174
            'show_ids', 'short', 'verbose', 'specific_files']
5393.3.7 by Parth Malwankar
added pre_status hook
175
        for a in attrs:
176
            self.assertTrue(hasattr(params, a),
177
                'Attribute "%s" not found in StatusHookParam' % a)
178
179
    def test_pre_status_hook(self):
180
        """Ensure that pre_status hook is invoked with the right args.
181
        """
182
        calls = []
183
        _mod_status.hooks.install_named_hook('pre_status', calls.append, None)
184
        self.assertLength(0, calls)
185
        tree = self.make_branch_and_tree('.')
186
        r1_id = tree.commit('one', allow_pointless=True)
187
        r2_id = tree.commit('two', allow_pointless=True)
188
        r2_tree = tree.branch.repository.revision_tree(r2_id)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
189
        output = BytesIO()
5393.3.7 by Parth Malwankar
added pre_status hook
190
        show_tree_status(tree, to_file=output,
191
            revision=[RevisionSpec.from_string("revid:%s" % r1_id),
192
                RevisionSpec.from_string("revid:%s" % r2_id)])
193
        self.assertLength(1, calls)
194
        params = calls[0]
195
        self.assertIsInstance(params, _mod_status.StatusHookParams)
196
        attrs = ['old_tree', 'new_tree', 'to_file', 'versioned',
6282.4.1 by Francis Devereux
Pass specific_files to status hooks
197
            'show_ids', 'short', 'verbose', 'specific_files']
5393.3.7 by Parth Malwankar
added pre_status hook
198
        for a in attrs:
199
            self.assertTrue(hasattr(params, a),
200
                'Attribute "%s" not found in StatusHookParam' % a)
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
201