/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
7479.2.1 by Jelmer Vernooij
Drop python2 support.
17
from io import StringIO
1551.6.20 by Aaron Bentley
Add copyright and whitespace
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 ..status import show_pending_merges, show_tree_status
25
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.
26
27
28
class TestStatus(TestCaseWithTransport):
1551.6.20 by Aaron Bentley
Add copyright and whitespace
29
1551.6.19 by Aaron Bentley
Fix pending merge status on empty trees
30
    def test_pending_none(self):
1551.6.20 by Aaron Bentley
Add copyright and whitespace
31
        # 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.
32
        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.
33
        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.
34
        tree2 = self.make_branch_and_tree('b')
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
35
        # set a left most parent that is not a present commit
6973.10.4 by Jelmer Vernooij
Update python3.passing.
36
        tree2.add_parent_tree_id(b'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.
37
        # do a merge
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
38
        tree2.merge_from_branch(tree.branch)
7045.2.17 by Jelmer Vernooij
Some more.
39
        output = StringIO()
40
        with tree2.lock_read():
3074.3.1 by John Arbash Meinel
Fix bug #172657, use Graph.find_difference() rather than ancestry set operations.
41
            show_pending_merges(tree2, output)
1551.6.19 by Aaron Bentley
Fix pending merge status on empty trees
42
        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.
43
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
44
    def make_multiple_pending_tree(self):
6449.6.1 by Jelmer Vernooij
Use config stacks in a few more places in the test suite.
45
        config.GlobalStack().set('email', 'Joe Foo <joe@foo.com>')
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
46
        tree = self.make_branch_and_tree('a')
47
        tree.commit('commit 1', timestamp=1196796819, timezone=0)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
48
        tree2 = tree.controldir.clone('b').open_workingtree()
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
49
        tree.commit('commit 2', timestamp=1196796819, timezone=0)
50
        tree2.commit('commit 2b', timestamp=1196796819, timezone=0)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
51
        tree3 = tree2.controldir.clone('c').open_workingtree()
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
52
        tree2.commit('commit 3b', timestamp=1196796819, timezone=0)
53
        tree3.commit('commit 3c', timestamp=1196796819, timezone=0)
54
        tree.merge_from_branch(tree2.branch)
4721.3.2 by Vincent Ladeuil
Simplify mutable_tree.has_changes() and update call sites.
55
        tree.merge_from_branch(tree3.branch, force=True)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
56
        return tree
57
58
    def test_multiple_pending(self):
59
        tree = self.make_multiple_pending_tree()
7045.2.17 by Jelmer Vernooij
Some more.
60
        output = StringIO()
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
61
        tree.lock_read()
3377.3.42 by John Arbash Meinel
Get the tests to actually work, and get the code to go along with.
62
        self.addCleanup(tree.unlock)
63
        show_pending_merges(tree, output)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
64
        # 2b doesn't appear because it's an ancestor of 3b
3936.2.3 by Ian Clatworthy
feedback from jameinel
65
        self.assertEqualDiff(
66
            'pending merge tips: (use -v to see all merge revisions)\n'
67
            '  Joe Foo 2007-12-04 commit 3b\n'
68
            '  Joe Foo 2007-12-04 commit 3c\n',
69
            output.getvalue())
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
70
71
    def test_multiple_pending_verbose(self):
72
        tree = self.make_multiple_pending_tree()
7045.2.17 by Jelmer Vernooij
Some more.
73
        output = StringIO()
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
74
        tree.lock_read()
75
        self.addCleanup(tree.unlock)
76
        show_pending_merges(tree, output, verbose=True)
3377.3.37 by John Arbash Meinel
Ian's first review comments.
77
        # Even though 2b is in the ancestry of 3c, it should only be displayed
78
        # 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.
79
        self.assertEqualDiff('pending merges:\n'
80
                             '  Joe Foo 2007-12-04 commit 3b\n'
81
                             '    Joe Foo 2007-12-04 commit 2b\n'
82
                             '  Joe Foo 2007-12-04 commit 3c\n',
83
                             output.getvalue())
3074.3.2 by John Arbash Meinel
update the ignore list in one-go.
84
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
85
    def test_with_pending_ghost(self):
86
        """Test when a pending merge is itself a ghost"""
87
        tree = self.make_branch_and_tree('a')
88
        tree.commit('first')
6973.10.4 by Jelmer Vernooij
Update python3.passing.
89
        tree.add_parent_tree_id(b'a-ghost-revision')
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
90
        tree.lock_read()
91
        self.addCleanup(tree.unlock)
7045.2.17 by Jelmer Vernooij
Some more.
92
        output = StringIO()
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
93
        show_pending_merges(tree, output)
3936.2.3 by Ian Clatworthy
feedback from jameinel
94
        self.assertEqualDiff(
95
            'pending merge tips: (use -v to see all merge revisions)\n'
96
            '  (ghost) a-ghost-revision\n',
97
            output.getvalue())
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
98
99
    def test_pending_with_ghosts(self):
100
        """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.
101
        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
102
        tree = self.make_branch_and_tree('a')
103
        tree.commit('empty commit')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
104
        tree2 = tree.controldir.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.
105
        tree2.commit('a non-ghost', timestamp=1196796819, timezone=0)
6973.10.4 by Jelmer Vernooij
Update python3.passing.
106
        tree2.add_parent_tree_id(b'a-ghost-revision')
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
107
        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.
108
        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
109
        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.
110
        tree.lock_read()
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
111
        self.addCleanup(tree.unlock)
7045.2.17 by Jelmer Vernooij
Some more.
112
        output = StringIO()
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
113
        show_pending_merges(tree, output, verbose=True)
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
114
        self.assertEqualDiff(
115
            '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())
3377.3.40 by John Arbash Meinel
a little bit more cleanup, change how ghosts are handled
121
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
122
    def tests_revision_to_revision(self):
123
        """doing a status between two revision trees should work."""
124
        tree = self.make_branch_and_tree('.')
125
        r1_id = tree.commit('one', allow_pointless=True)
126
        r2_id = tree.commit('two', allow_pointless=True)
7045.2.17 by Jelmer Vernooij
Some more.
127
        output = StringIO()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
128
        show_tree_status(tree, to_file=output, revision=[
129
            RevisionSpec.from_string("revid:%s" % r1_id.decode('utf-8')),
130
            RevisionSpec.from_string("revid:%s" % r2_id.decode('utf-8'))])
1852.2.1 by Robert Collins
General cleanups - status, add a status test with two revision trees, and commands.py importing of bzrlib.trace.
131
        # return does not matter as long as it did not raise.
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
132
133
134
class TestHooks(TestCaseWithTransport):
135
136
    def test_constructor(self):
137
        """Check that creating a StatusHooks instance has the right defaults.
138
        """
5622.3.10 by Jelmer Vernooij
Don't require arguments to hooks.
139
        hooks = _mod_status.StatusHooks()
7143.15.2 by Jelmer Vernooij
Run autopep8.
140
        self.assertTrue("post_status" in hooks,
141
                        "post_status not in %s" % hooks)
5393.3.7 by Parth Malwankar
added pre_status hook
142
        self.assertTrue("pre_status" in hooks, "pre_status not in %s" % hooks)
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
143
144
    def test_installed_hooks_are_StatusHooks(self):
145
        """The installed hooks object should be a StatusHooks.
146
        """
147
        # the installed hooks are saved in self._preserved_hooks.
148
        self.assertIsInstance(self._preserved_hooks[_mod_status][1],
7143.15.2 by Jelmer Vernooij
Run autopep8.
149
                              _mod_status.StatusHooks)
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
150
151
    def test_post_status_hook(self):
152
        """Ensure that post_status hook is invoked with the right args.
153
        """
154
        calls = []
155
        _mod_status.hooks.install_named_hook('post_status', calls.append, None)
156
        self.assertLength(0, calls)
157
        tree = self.make_branch_and_tree('.')
158
        r1_id = tree.commit('one', allow_pointless=True)
159
        r2_id = tree.commit('two', allow_pointless=True)
7045.2.17 by Jelmer Vernooij
Some more.
160
        output = StringIO()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
161
        show_tree_status(tree, to_file=output, revision=[
162
            RevisionSpec.from_string("revid:%s" % r1_id.decode('utf-8')),
163
            RevisionSpec.from_string("revid:%s" % r2_id.decode('utf-8'))])
5393.3.2 by Parth Malwankar
added StatusPostHookParams and test cases
164
        self.assertLength(1, calls)
165
        params = calls[0]
5393.3.7 by Parth Malwankar
added pre_status hook
166
        self.assertIsInstance(params, _mod_status.StatusHookParams)
167
        attrs = ['old_tree', 'new_tree', 'to_file', 'versioned',
7143.15.2 by Jelmer Vernooij
Run autopep8.
168
                 'show_ids', 'short', 'verbose', 'specific_files']
5393.3.7 by Parth Malwankar
added pre_status hook
169
        for a in attrs:
170
            self.assertTrue(hasattr(params, a),
7143.15.2 by Jelmer Vernooij
Run autopep8.
171
                            'Attribute "%s" not found in StatusHookParam' % a)
5393.3.7 by Parth Malwankar
added pre_status hook
172
173
    def test_pre_status_hook(self):
174
        """Ensure that pre_status hook is invoked with the right args.
175
        """
176
        calls = []
177
        _mod_status.hooks.install_named_hook('pre_status', calls.append, None)
178
        self.assertLength(0, calls)
179
        tree = self.make_branch_and_tree('.')
180
        r1_id = tree.commit('one', allow_pointless=True)
181
        r2_id = tree.commit('two', allow_pointless=True)
7045.2.17 by Jelmer Vernooij
Some more.
182
        output = StringIO()
7143.15.5 by Jelmer Vernooij
More PEP8 fixes.
183
        show_tree_status(
184
            tree, to_file=output,
185
            revision=[
186
                RevisionSpec.from_string("revid:%s" % r1_id.decode('utf-8')),
187
                RevisionSpec.from_string("revid:%s" % r2_id.decode('utf-8'))])
5393.3.7 by Parth Malwankar
added pre_status hook
188
        self.assertLength(1, calls)
189
        params = calls[0]
190
        self.assertIsInstance(params, _mod_status.StatusHookParams)
191
        attrs = ['old_tree', 'new_tree', 'to_file', 'versioned',
7143.15.2 by Jelmer Vernooij
Run autopep8.
192
                 'show_ids', 'short', 'verbose', 'specific_files']
5393.3.7 by Parth Malwankar
added pre_status hook
193
        for a in attrs:
194
            self.assertTrue(hasattr(params, a),
7143.15.2 by Jelmer Vernooij
Run autopep8.
195
                            'Attribute "%s" not found in StatusHookParam' % a)