/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.1 by Vincent Ladeuil
Fix assert_ being deprecated by using assertTrue.
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
915 by Martin Pool
- add simple test case for bzr status
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
915 by Martin Pool
- add simple test case for bzr status
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
915 by Martin Pool
- add simple test case for bzr status
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
915 by Martin Pool
- add simple test case for bzr status
16
17
"""Tests of status command.
18
19
Most of these depend on the particular formatting used.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
20
As such they really are blackbox tests even though some of the
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
21
tests are not using self.capture. If we add tests for the programmatic
22
interface later, they will be non blackbox tests.
915 by Martin Pool
- add simple test case for bzr status
23
"""
24
1685.1.80 by Wouter van Heyst
more code cleanup
25
import codecs
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
26
from os import mkdir, chdir, rmdir, unlink
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
27
import sys
1185.33.71 by Martin Pool
Status tests include unicode character.
28
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
29
from ... import (
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
30
    conflicts,
31
    errors,
3224.5.4 by Andrew Bennetts
Fix test suite, mainly weeding out uses of bzrlib.user_encoding.
32
    osutils,
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
33
    status,
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
34
    )
6670.4.3 by Jelmer Vernooij
Fix more imports.
35
from breezy.bzr import (
36
    bzrdir,
37
    )
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
38
import breezy.branch
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
39
from ...osutils import pathjoin
40
from ...revisionspec import RevisionSpec
41
from ...sixish import (
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
42
    BytesIO,
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
43
    StringIO,
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
44
    PY3,
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
45
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
46
from ...status import show_tree_status
47
from .. import TestCaseWithTransport, TestSkipped
48
from ...workingtree import WorkingTree
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
49
915 by Martin Pool
- add simple test case for bzr status
50
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
51
class BranchStatus(TestCaseWithTransport):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
52
5508.1.1 by John Arbash Meinel
Fix bug #662053, 'bzr status' shouldn't fail
53
    def setUp(self):
54
        super(BranchStatus, self).setUp()
55
        # As TestCase.setUp clears all hooks, we install this default
56
        # post_status hook handler for the test.
57
        status.hooks.install_named_hook('post_status',
7143.15.2 by Jelmer Vernooij
Run autopep8.
58
                                        status._show_shelve_summary,
59
                                        'brz status')
5508.1.1 by John Arbash Meinel
Fix bug #662053, 'bzr status' shouldn't fail
60
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
61
    def assertStatus(self, expected_lines, working_tree, specific_files=None,
7143.15.2 by Jelmer Vernooij
Run autopep8.
62
                     revision=None, short=False, pending=True, verbose=False):
1927.2.3 by Robert Collins
review comment application - paired with Martin.
63
        """Run status in working_tree and look for output.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
64
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
65
        :param expected_lines: The lines to look for.
1927.2.3 by Robert Collins
review comment application - paired with Martin.
66
        :param working_tree: The tree to run status in.
67
        """
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
68
        output_string = self.status_string(working_tree, specific_files, revision, short,
7143.15.2 by Jelmer Vernooij
Run autopep8.
69
                                           pending, verbose)
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
70
        self.assertEqual(expected_lines, output_string.splitlines(True))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
71
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
72
    def status_string(self, wt, specific_files=None, revision=None,
7143.15.2 by Jelmer Vernooij
Run autopep8.
73
                      short=False, pending=True, verbose=False):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
74
        uio = self.make_utf8_encoded_stringio()
75
        show_tree_status(wt, specific_files=specific_files, to_file=uio,
7143.15.2 by Jelmer Vernooij
Run autopep8.
76
                         revision=revision, short=short, show_pending=pending,
77
                         verbose=verbose)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
78
        return uio.getvalue().decode('utf-8')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
79
1836.1.16 by John Arbash Meinel
Cleanup some tests which don't expect .bazaar/ to show up. Some still fail.
80
    def test_branch_status(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
81
        """Test basic branch status"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
82
        wt = self.make_branch_and_tree('.')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
83
84
        # status with no commits or files - it must
85
        # work and show no output. We do this with no
86
        # commits to be sure that it's not going to fail
87
        # as a corner case.
88
        self.assertStatus([], wt)
89
90
        self.build_tree(['hello.c', 'bye.c'])
91
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
92
            'unknown:\n',
93
            '  bye.c\n',
94
            '  hello.c\n',
1927.2.3 by Robert Collins
review comment application - paired with Martin.
95
            ],
96
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
97
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
98
            '?   bye.c\n',
99
            '?   hello.c\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
100
            ],
101
            wt, short=True)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
102
103
        # add a commit to allow showing pending merges.
1927.2.1 by Robert Collins
Alter set_pending_merges to shove the left most merge into the trees last-revision if that is not set. Related bugfixes include basis_tree handling ghosts, de-duping the merges with the last-revision and update changing where and how it adds its pending merge.
104
        wt.commit('create a parent to allow testing merge output')
915 by Martin Pool
- add simple test case for bzr status
105
6973.10.4 by Jelmer Vernooij
Update python3.passing.
106
        wt.add_parent_tree_id(b'pending@pending-0-0')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
107
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
108
            'unknown:\n',
109
            '  bye.c\n',
110
            '  hello.c\n',
111
            'pending merge tips: (use -v to see all merge revisions)\n',
112
            '  (ghost) pending@pending-0-0\n',
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
113
            ],
114
            wt)
115
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
116
            'unknown:\n',
117
            '  bye.c\n',
118
            '  hello.c\n',
119
            'pending merges:\n',
120
            '  (ghost) pending@pending-0-0\n',
1927.2.3 by Robert Collins
review comment application - paired with Martin.
121
            ],
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
122
            wt, verbose=True)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
123
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
124
            '?   bye.c\n',
125
            '?   hello.c\n',
126
            'P   (ghost) pending@pending-0-0\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
127
            ],
128
            wt, short=True)
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
129
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
130
            'unknown:\n',
131
            '  bye.c\n',
132
            '  hello.c\n',
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
133
            ],
134
            wt, pending=False)
135
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
136
            '?   bye.c\n',
137
            '?   hello.c\n',
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
138
            ],
139
            wt, short=True, pending=False)
915 by Martin Pool
- add simple test case for bzr status
140
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
141
    def test_branch_status_revisions(self):
142
        """Tests branch status with revisions"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
143
        wt = self.make_branch_and_tree('.')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
144
145
        self.build_tree(['hello.c', 'bye.c'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
146
        wt.add('hello.c')
147
        wt.add('bye.c')
148
        wt.commit('Test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
149
1948.4.36 by John Arbash Meinel
[merge] bzr.dev 1978
150
        revs = [RevisionSpec.from_string('0')]
1927.2.3 by Robert Collins
review comment application - paired with Martin.
151
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
152
            'added:\n',
153
            '  bye.c\n',
154
            '  hello.c\n'
1927.2.3 by Robert Collins
review comment application - paired with Martin.
155
            ],
156
            wt,
157
            revision=revs)
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
158
159
        self.build_tree(['more.c'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
160
        wt.add('more.c')
161
        wt.commit('Another test message')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
162
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
163
        revs.append(RevisionSpec.from_string('1'))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
164
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
165
            'added:\n',
166
            '  bye.c\n',
167
            '  hello.c\n',
1927.2.3 by Robert Collins
review comment application - paired with Martin.
168
            ],
169
            wt,
170
            revision=revs)
1185.12.27 by Aaron Bentley
Use line log for pending merges
171
172
    def test_pending(self):
1185.33.71 by Martin Pool
Status tests include unicode character.
173
        """Pending merges display works, including Unicode"""
1185.12.27 by Aaron Bentley
Use line log for pending merges
174
        mkdir("./branch")
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
175
        wt = self.make_branch_and_tree('branch')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
176
        b = wt.branch
177
        wt.commit("Empty commit 1")
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
178
        b_2_dir = b.controldir.sprout('./copy')
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
179
        b_2 = b_2_dir.open_branch()
180
        wt2 = b_2_dir.open_workingtree()
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
181
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
182
        wt2.merge_from_branch(wt.branch)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
183
        message = self.status_string(wt2, verbose=True)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
184
        self.assertStartsWith(message, "pending merges:\n")
185
        self.assertEndsWith(message, "Empty commit 2\n")
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
186
        wt2.commit("merged")
1185.16.88 by mbp at sourcefrog
Make commit message long enough in test for pending merges
187
        # must be long to make sure we see elipsis at the end
7143.15.2 by Jelmer Vernooij
Run autopep8.
188
        wt.commit("Empty commit 3 "
189
                  + "blah blah blah blah " * 100)
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
190
        wt2.merge_from_branch(wt.branch)
3936.2.1 by Ian Clatworthy
verbose flag for status - code & tests
191
        message = self.status_string(wt2, verbose=True)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
192
        self.assertStartsWith(message, "pending merges:\n")
6614.1.1 by Vincent Ladeuil
Fix assert_ being deprecated by using assertTrue.
193
        self.assertTrue("Empty commit 3" in message)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
194
        self.assertEndsWith(message, "...\n")
1185.12.27 by Aaron Bentley
Use line log for pending merges
195
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
196
    def test_tree_status_ignores(self):
197
        """Tests branch status with ignores"""
198
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
199
        self.run_bzr('ignore *~')
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
200
        wt.commit('commit .bzrignore')
201
        self.build_tree(['foo.c', 'foo.c~'])
202
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
203
            'unknown:\n',
204
            '  foo.c\n',
205
            ],
206
            wt)
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
207
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
208
            '?   foo.c\n',
209
            ],
210
            wt, short=True)
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
211
212
    def test_tree_status_specific_files(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
213
        """Tests branch status with given specific files"""
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
214
        wt = self.make_branch_and_tree('.')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
215
        b = wt.branch
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
216
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
217
        self.build_tree(['directory/', 'directory/hello.c',
218
                         'bye.c', 'test.c', 'dir2/',
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
219
                         'missing.c'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
220
        wt.add('directory')
221
        wt.add('test.c')
222
        wt.commit('testing')
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
223
        wt.add('missing.c')
224
        unlink('missing.c')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
225
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
226
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
227
            'missing:\n',
228
            '  missing.c\n',
229
            'unknown:\n',
230
            '  bye.c\n',
231
            '  dir2/\n',
232
            '  directory/hello.c\n'
233
            ],
234
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
235
236
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
237
            '?   bye.c\n',
238
            '?   dir2/\n',
239
            '?   directory/hello.c\n',
240
            '+!  missing.c\n',
241
            ],
242
            wt, short=True)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
243
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
244
        tof = StringIO()
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
245
        self.assertRaises(errors.PathsDoNotExist,
246
                          show_tree_status,
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
247
                          wt, specific_files=['bye.c', 'test.c', 'absent.c'],
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
248
                          to_file=tof)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
249
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
250
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
251
        show_tree_status(wt, specific_files=['directory'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
252
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
253
        self.assertEqual(tof.readlines(),
7143.15.2 by Jelmer Vernooij
Run autopep8.
254
                         ['unknown:\n',
255
                          '  directory/hello.c\n'
256
                          ])
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
257
        tof = StringIO()
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
258
        show_tree_status(wt, specific_files=['directory'], to_file=tof,
259
                         short=True)
260
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
261
        self.assertEqual(tof.readlines(), ['?   directory/hello.c\n'])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
262
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
263
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
264
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
265
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
266
        self.assertEqual(tof.readlines(),
7143.15.2 by Jelmer Vernooij
Run autopep8.
267
                         ['unknown:\n',
268
                          '  dir2/\n'
269
                          ])
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
270
        tof = StringIO()
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
271
        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
272
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
273
        self.assertEqual(tof.readlines(), ['?   dir2/\n'])
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
274
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
275
        tof = StringIO()
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
276
        revs = [RevisionSpec.from_string('0'), RevisionSpec.from_string('1')]
2761.1.2 by Aaron Bentley
Fix line wrapping
277
        show_tree_status(wt, specific_files=['test.c'], to_file=tof,
278
                         short=True, revision=revs)
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
279
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
280
        self.assertEqual(tof.readlines(), ['+N  test.c\n'])
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
281
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
282
        tof = StringIO()
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
283
        show_tree_status(wt, specific_files=['missing.c'], to_file=tof)
284
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
285
        self.assertEqual(tof.readlines(),
7143.15.2 by Jelmer Vernooij
Run autopep8.
286
                         ['missing:\n',
287
                          '  missing.c\n'])
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
288
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
289
        tof = StringIO()
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
290
        show_tree_status(wt, specific_files=['missing.c'], to_file=tof,
291
                         short=True)
292
        tof.seek(0)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
293
        self.assertEqual(tof.readlines(),
7143.15.2 by Jelmer Vernooij
Run autopep8.
294
                         ['+!  missing.c\n'])
5504.5.1 by Rory Yorke
Show missing files in bzr status (bug 134168).
295
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
296
    def test_specific_files_conflicts(self):
297
        tree = self.make_branch_and_tree('.')
298
        self.build_tree(['dir2/'])
299
        tree.add('dir2')
300
        tree.commit('added dir2')
301
        tree.set_conflicts(conflicts.ConflictList(
302
            [conflicts.ContentsConflict('foo')]))
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
303
        tof = BytesIO()
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
304
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
7045.2.4 by Jelmer Vernooij
Fix some more.
305
        self.assertEqualDiff(b'', tof.getvalue())
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
306
        tree.set_conflicts(conflicts.ConflictList(
307
            [conflicts.ContentsConflict('dir2')]))
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
308
        tof = StringIO()
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
309
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
7067.13.6 by Jelmer Vernooij
Fix one more test.
310
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2\n',
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
311
                             tof.getvalue())
312
313
        tree.set_conflicts(conflicts.ConflictList(
314
            [conflicts.ContentsConflict('dir2/file1')]))
7045.4.8 by Jelmer Vernooij
Fix another 128 tests on python 3.
315
        tof = StringIO()
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
316
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
7067.13.6 by Jelmer Vernooij
Fix one more test.
317
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2/file1\n',
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
318
                             tof.getvalue())
319
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
320
    def _prepare_nonexistent(self):
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
321
        wt = self.make_branch_and_tree('.')
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
322
        self.assertStatus([], wt)
323
        self.build_tree(['FILE_A', 'FILE_B', 'FILE_C', 'FILE_D', 'FILE_E', ])
324
        wt.add('FILE_A')
325
        wt.add('FILE_B')
326
        wt.add('FILE_C')
327
        wt.add('FILE_D')
328
        wt.add('FILE_E')
329
        wt.commit('Create five empty files.')
7143.15.2 by Jelmer Vernooij
Run autopep8.
330
        with open('FILE_B', 'w') as f:
331
            f.write('Modification to file FILE_B.')
332
        with open('FILE_C', 'w') as f:
333
            f.write('Modification to file FILE_C.')
4032.1.2 by John Arbash Meinel
Track down a few more files that have trailing whitespace.
334
        unlink('FILE_E')  # FILE_E will be versioned but missing
7143.15.2 by Jelmer Vernooij
Run autopep8.
335
        with open('FILE_Q', 'w') as f:
336
            f.write('FILE_Q is added but not committed.')
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
337
        wt.add('FILE_Q')  # FILE_Q will be added but not committed
338
        open('UNVERSIONED_BUT_EXISTING', 'w')
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
339
        return wt
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
340
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
341
    def test_status_nonexistent_file(self):
342
        # files that don't exist in either the basis tree or working tree
343
        # should give an error
344
        wt = self._prepare_nonexistent()
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
345
        self.assertStatus([
346
            'removed:\n',
347
            '  FILE_E\n',
348
            'added:\n',
349
            '  FILE_Q\n',
350
            'modified:\n',
351
            '  FILE_B\n',
352
            '  FILE_C\n',
353
            'unknown:\n',
354
            '  UNVERSIONED_BUT_EXISTING\n',
355
            ],
356
            wt)
357
        self.assertStatus([
358
            ' M  FILE_B\n',
359
            ' M  FILE_C\n',
360
            ' D  FILE_E\n',
361
            '+N  FILE_Q\n',
362
            '?   UNVERSIONED_BUT_EXISTING\n',
363
            ],
364
            wt, short=True)
365
366
        # Okay, everything's looking good with the existent files.
367
        # Let's see what happens when we throw in non-existent files.
368
6622.1.29 by Jelmer Vernooij
Fix some more tests.
369
        # brz st [--short] NONEXISTENT '
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
370
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
371
            'nonexistent:\n',
372
            '  NONEXISTENT\n',
373
            ]
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
374
        out, err = self.run_bzr('status NONEXISTENT', retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
375
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
376
        self.assertContainsRe(err,
7045.4.30 by Jelmer Vernooij
Fix some more tests.
377
                              r'.*ERROR: Path\(s\) do not exist: '
378
                              'NONEXISTENT.*')
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
379
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
380
            'X:   NONEXISTENT\n',
381
            ]
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
382
        out, err = self.run_bzr('status --short NONEXISTENT', retcode=3)
383
        self.assertContainsRe(err,
7045.4.30 by Jelmer Vernooij
Fix some more tests.
384
                              r'.*ERROR: Path\(s\) do not exist: '
385
                              'NONEXISTENT.*')
4032.1.2 by John Arbash Meinel
Track down a few more files that have trailing whitespace.
386
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
387
    def test_status_nonexistent_file_with_others(self):
6622.1.29 by Jelmer Vernooij
Fix some more tests.
388
        # brz st [--short] NONEXISTENT ...others..
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
389
        wt = self._prepare_nonexistent()
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
390
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
391
            'removed:\n',
392
            '  FILE_E\n',
393
            'modified:\n',
394
            '  FILE_B\n',
395
            '  FILE_C\n',
396
            'nonexistent:\n',
397
            '  NONEXISTENT\n',
398
            ]
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
399
        out, err = self.run_bzr('status NONEXISTENT '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
400
                                'FILE_A FILE_B FILE_C FILE_D FILE_E',
401
                                retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
402
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
403
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
404
                              r'.*ERROR: Path\(s\) do not exist: '
405
                              'NONEXISTENT.*')
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
406
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
407
            ' M  FILE_B\n',
408
            ' M  FILE_C\n',
409
            ' D  FILE_E\n',
410
            'X   NONEXISTENT\n',
411
            ]
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
412
        out, err = self.run_bzr('status --short NONEXISTENT '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
413
                                'FILE_A FILE_B FILE_C FILE_D FILE_E',
414
                                retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
415
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
416
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
417
                              r'.*ERROR: Path\(s\) do not exist: '
418
                              'NONEXISTENT.*')
4032.1.2 by John Arbash Meinel
Track down a few more files that have trailing whitespace.
419
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
420
    def test_status_multiple_nonexistent_files(self):
6622.1.29 by Jelmer Vernooij
Fix some more tests.
421
        # brz st [--short] NONEXISTENT ... ANOTHER_NONEXISTENT ...
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
422
        wt = self._prepare_nonexistent()
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
423
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
424
            'removed:\n',
425
            '  FILE_E\n',
426
            'modified:\n',
427
            '  FILE_B\n',
428
            '  FILE_C\n',
429
            'nonexistent:\n',
430
            '  ANOTHER_NONEXISTENT\n',
431
            '  NONEXISTENT\n',
432
            ]
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
433
        out, err = self.run_bzr('status NONEXISTENT '
434
                                'FILE_A FILE_B ANOTHER_NONEXISTENT '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
435
                                'FILE_C FILE_D FILE_E', retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
436
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
437
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
438
                              r'.*ERROR: Path\(s\) do not exist: '
439
                              'ANOTHER_NONEXISTENT NONEXISTENT.*')
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
440
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
441
            ' M  FILE_B\n',
442
            ' M  FILE_C\n',
443
            ' D  FILE_E\n',
444
            'X   ANOTHER_NONEXISTENT\n',
445
            'X   NONEXISTENT\n',
446
            ]
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
447
        out, err = self.run_bzr('status --short NONEXISTENT '
448
                                'FILE_A FILE_B ANOTHER_NONEXISTENT '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
449
                                'FILE_C FILE_D FILE_E', retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
450
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
451
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
452
                              r'.*ERROR: Path\(s\) do not exist: '
453
                              'ANOTHER_NONEXISTENT NONEXISTENT.*')
4032.1.2 by John Arbash Meinel
Track down a few more files that have trailing whitespace.
454
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
455
    def test_status_nonexistent_file_with_unversioned(self):
6622.1.29 by Jelmer Vernooij
Fix some more tests.
456
        # brz st [--short] NONEXISTENT A B UNVERSIONED_BUT_EXISTING C D E Q
3930.2.17 by Ian Clatworthy
split tests as suggested by Jelmer's review
457
        wt = self._prepare_nonexistent()
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
458
        expected = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
459
            'removed:\n',
460
            '  FILE_E\n',
461
            'added:\n',
462
            '  FILE_Q\n',
463
            'modified:\n',
464
            '  FILE_B\n',
465
            '  FILE_C\n',
466
            'unknown:\n',
467
            '  UNVERSIONED_BUT_EXISTING\n',
468
            'nonexistent:\n',
469
            '  NONEXISTENT\n',
470
            ]
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
471
        out, err = self.run_bzr('status NONEXISTENT '
472
                                'FILE_A FILE_B UNVERSIONED_BUT_EXISTING '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
473
                                'FILE_C FILE_D FILE_E FILE_Q', retcode=3)
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
474
        self.assertEqual(expected, out.splitlines(True))
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
475
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
476
                              r'.*ERROR: Path\(s\) do not exist: '
477
                              'NONEXISTENT.*')
6619.3.18 by Jelmer Vernooij
Run 2to3 idioms fixer.
478
        expected = sorted([
7143.15.2 by Jelmer Vernooij
Run autopep8.
479
            '+N  FILE_Q\n',
480
            '?   UNVERSIONED_BUT_EXISTING\n',
481
            ' D  FILE_E\n',
482
            ' M  FILE_C\n',
483
            ' M  FILE_B\n',
484
            'X   NONEXISTENT\n',
485
            ])
3930.2.12 by Karl Fogel
Part of bug #306394: Add regression tests.
486
        out, err = self.run_bzr('status --short NONEXISTENT '
487
                                'FILE_A FILE_B UNVERSIONED_BUT_EXISTING '
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
488
                                'FILE_C FILE_D FILE_E FILE_Q', retcode=3)
5861.2.7 by Wouter van Heyst
Paper over different sorting order in pypy by sorting th expected and actual lists.
489
        actual = out.splitlines(True)
490
        actual.sort()
491
        self.assertEqual(expected, actual)
3930.2.13 by Karl Fogel
Part of bug #306394: Raise an error (code 3) when status is invoked on
492
        self.assertContainsRe(err,
7045.2.4 by Jelmer Vernooij
Fix some more.
493
                              r'.*ERROR: Path\(s\) do not exist: '
494
                              'NONEXISTENT.*')
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
495
2091.4.2 by wang
add tests for "diff" and "status"
496
    def test_status_out_of_date(self):
497
        """Simulate status of out-of-date tree after remote push"""
498
        tree = self.make_branch_and_tree('.')
6855.4.1 by Jelmer Vernooij
Yet more bees.
499
        self.build_tree_contents([('a', b'foo\n')])
2091.4.2 by wang
add tests for "diff" and "status"
500
        tree.lock_write()
501
        try:
502
            tree.add(['a'])
503
            tree.commit('add test file')
504
            # simulate what happens after a remote push
6973.10.6 by Jelmer Vernooij
Fix tests.
505
            tree.set_last_revision(b"0")
2091.4.2 by wang
add tests for "diff" and "status"
506
        finally:
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
507
            # before run another commands we should unlock tree
2091.4.2 by wang
add tests for "diff" and "status"
508
            tree.unlock()
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
509
        out, err = self.run_bzr('status')
6622.1.29 by Jelmer Vernooij
Fix some more tests.
510
        self.assertEqual("working tree is out of date, run 'brz update'\n",
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
511
                         err)
2091.4.2 by wang
add tests for "diff" and "status"
512
5137.2.2 by Arnaud Jeansen
Add a unit test for LP: #40103 (status on an ignored file)
513
    def test_status_on_ignored(self):
514
        """Tests branch status on an unversioned file which is considered ignored.
515
516
        See https://bugs.launchpad.net/bzr/+bug/40103
517
        """
518
        tree = self.make_branch_and_tree('.')
519
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
520
        self.build_tree(['test1.c', 'test1.c~', 'test2.c~'])
5137.2.2 by Arnaud Jeansen
Add a unit test for LP: #40103 (status on an ignored file)
521
        result = self.run_bzr('status')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
522
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
5137.2.3 by Arnaud Jeansen
Rework unit test according to feedback
523
        short_result = self.run_bzr('status --short')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
524
        self.assertContainsRe(short_result, "\\?   test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
525
526
        result = self.run_bzr('status test1.c')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
527
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
528
        short_result = self.run_bzr('status --short test1.c')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
529
        self.assertContainsRe(short_result, "\\?   test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
530
531
        result = self.run_bzr('status test1.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
532
        self.assertContainsRe(result, "ignored:\n  test1.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
533
        short_result = self.run_bzr('status --short test1.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
534
        self.assertContainsRe(short_result, "I   test1.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
535
536
        result = self.run_bzr('status test1.c~ test2.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
537
        self.assertContainsRe(result, "ignored:\n  test1.c~\n  test2.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
538
        short_result = self.run_bzr('status --short test1.c~ test2.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
539
        self.assertContainsRe(short_result, "I   test1.c~\nI   test2.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
540
541
        result = self.run_bzr('status test1.c test1.c~ test2.c~')[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
542
        self.assertContainsRe(
543
            result, "unknown:\n  test1.c\nignored:\n  test1.c~\n  test2.c~\n")
544
        short_result = self.run_bzr(
545
            'status --short test1.c test1.c~ test2.c~')[0]
546
        self.assertContainsRe(
547
            short_result, "\\?   test1.c\nI   test1.c~\nI   test2.c~\n")
5137.2.2 by Arnaud Jeansen
Add a unit test for LP: #40103 (status on an ignored file)
548
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
549
    def test_status_write_lock(self):
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
550
        """Test that status works without fetching history and
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
551
        having a write lock.
552
553
        See https://bugs.launchpad.net/bzr/+bug/149270
554
        """
555
        mkdir('branch1')
556
        wt = self.make_branch_and_tree('branch1')
557
        b = wt.branch
558
        wt.commit('Empty commit 1')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
559
        wt2 = b.controldir.sprout('branch2').open_workingtree()
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
560
        wt2.commit('Empty commit 2')
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
561
        out, err = self.run_bzr('status branch1 -rbranch:branch2')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
562
        self.assertEqual('', out)
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
563
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
564
    def test_status_with_shelves(self):
565
        """Ensure that _show_shelve_summary handler works.
566
        """
567
        wt = self.make_branch_and_tree('.')
568
        self.build_tree(['hello.c'])
569
        wt.add('hello.c')
570
        self.run_bzr(['shelve', '--all', '-m', 'foo'])
571
        self.build_tree(['bye.c'])
572
        wt.add('bye.c')
573
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
574
            'added:\n',
575
            '  bye.c\n',
576
            '1 shelf exists. See "brz shelve --list" for details.\n',
5609.11.1 by Alexander Belchenko
use proper plural form to print status message about existing shelves.
577
            ],
578
            wt)
579
        self.run_bzr(['shelve', '--all', '-m', 'bar'])
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
580
        self.build_tree(['eggs.c', 'spam.c'])
581
        wt.add('eggs.c')
5609.11.1 by Alexander Belchenko
use proper plural form to print status message about existing shelves.
582
        wt.add('spam.c')
583
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
584
            'added:\n',
585
            '  eggs.c\n',
586
            '  spam.c\n',
587
            '2 shelves exist. See "brz shelve --list" for details.\n',
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
588
            ],
589
            wt)
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
590
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
591
            'added:\n',
592
            '  spam.c\n',
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
593
            ],
594
            wt,
595
            specific_files=['spam.c'])
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
596
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
597
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
598
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
599
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
600
    def setUp(self):
601
        super(CheckoutStatus, self).setUp()
602
        mkdir('codir')
603
        chdir('codir')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
604
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
605
    def make_branch_and_tree(self, relpath):
606
        source = self.make_branch(pathjoin('..', relpath))
607
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
6437.7.3 by Jelmer Vernooij
Use ControlDir.set_branch_reference.
608
        checkout.set_branch_reference(source)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
609
        return checkout.create_workingtree()
610
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
611
1534.4.54 by Robert Collins
Merge from integration.
612
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
613
2318.2.1 by Kent Gibson
Apply status versioned patch
614
    def test_status_plain(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
615
        tree = self.make_branch_and_tree('.')
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
616
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
617
        self.build_tree(['hello.txt'])
618
        result = self.run_bzr("status")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
619
        self.assertContainsRe(result, "unknown:\n  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
620
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
621
        tree.add("hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
622
        result = self.run_bzr("status")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
623
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
624
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
625
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
626
        result = self.run_bzr("status -r 0..1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
627
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
628
2745.4.3 by Lukáš Lalinsky
Change -C to -c.
629
        result = self.run_bzr("status -c 1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
630
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
631
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
632
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
633
        result = self.run_bzr("status -r 0")[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
634
        self.assertContainsRe(result, "added:\n  hello.txt\n"
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
635
                                      "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
636
        result2 = self.run_bzr("status -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
637
        self.assertEqual(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
638
639
    def test_status_short(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
640
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
641
642
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
643
        result = self.run_bzr("status --short")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
644
        self.assertContainsRe(result, "[?]   hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
645
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
646
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
647
        result = self.run_bzr("status --short")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
648
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
649
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
650
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
651
        result = self.run_bzr("status --short -r 0..1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
652
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
653
654
        self.build_tree(['world.txt'])
5945.1.3 by Martin von Gagern
Add blackbox tests for -S as an alias to --short.
655
        result = self.run_bzr("status -S -r 0")[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
656
        self.assertContainsRe(result, "[+]N  hello.txt\n"
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
657
                                      "[?]   world.txt\n")
5945.1.3 by Martin von Gagern
Add blackbox tests for -S as an alias to --short.
658
        result2 = self.run_bzr("status -S -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
659
        self.assertEqual(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
660
2318.2.1 by Kent Gibson
Apply status versioned patch
661
    def test_status_versioned(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
662
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
663
664
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
665
        result = self.run_bzr("status --versioned")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
666
        self.assertNotContainsRe(result, "unknown:\n  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
667
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
668
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
669
        result = self.run_bzr("status --versioned")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
670
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
671
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
672
        tree.commit("added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
673
        result = self.run_bzr("status --versioned -r 0..1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
674
        self.assertContainsRe(result, "added:\n  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
675
676
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
677
        result = self.run_bzr("status --versioned -r 0")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
678
        self.assertContainsRe(result, "added:\n  hello.txt\n")
679
        self.assertNotContainsRe(result, "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
680
        result2 = self.run_bzr("status --versioned -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
681
        self.assertEqual(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
682
2663.1.7 by Daniel Watkins
Capitalised short names.
683
    def test_status_SV(self):
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
684
        tree = self.make_branch_and_tree('.')
685
686
        self.build_tree(['hello.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
687
        result = self.run_bzr("status -SV")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
688
        self.assertNotContainsRe(result, "hello.txt")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
689
690
        tree.add("hello.txt")
2663.1.7 by Daniel Watkins
Capitalised short names.
691
        result = self.run_bzr("status -SV")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
692
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
693
694
        tree.commit(message="added")
2663.1.7 by Daniel Watkins
Capitalised short names.
695
        result = self.run_bzr("status -SV -r 0..1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
696
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
697
698
        self.build_tree(['world.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
699
        result = self.run_bzr("status -SV -r 0")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
700
        self.assertContainsRe(result, "[+]N  hello.txt\n")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
701
2663.1.7 by Daniel Watkins
Capitalised short names.
702
        result2 = self.run_bzr("status -SV -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
703
        self.assertEqual(result2, result)
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
704
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
705
    def assertStatusContains(self, pattern, short=False):
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
706
        """Run status, and assert it contains the given pattern"""
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
707
        if short:
708
            result = self.run_bzr("status --short")[0]
709
        else:
710
            result = self.run_bzr("status")[0]
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
711
        self.assertContainsRe(result, pattern)
712
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
713
    def test_kind_change_plain(self):
714
        tree = self.make_branch_and_tree('.')
715
        self.build_tree(['file'])
716
        tree.add('file')
717
        tree.commit('added file')
718
        unlink('file')
719
        self.build_tree(['file/'])
7143.15.2 by Jelmer Vernooij
Run autopep8.
720
        self.assertStatusContains(
721
            'kind changed:\n  file \\(file => directory\\)')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
722
        tree.rename_one('file', 'directory')
7143.15.2 by Jelmer Vernooij
Run autopep8.
723
        self.assertStatusContains('renamed:\n  file/ => directory/\n'
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
724
                                  'modified:\n  directory/\n')
725
        rmdir('directory')
726
        self.assertStatusContains('removed:\n  file\n')
727
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
728
    def test_kind_change_short(self):
729
        tree = self.make_branch_and_tree('.')
730
        self.build_tree(['file'])
731
        tree.add('file')
732
        tree.commit('added file')
733
        unlink('file')
734
        self.build_tree(['file/'])
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
735
        self.assertStatusContains('K  file => file/',
7143.15.2 by Jelmer Vernooij
Run autopep8.
736
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
737
        tree.rename_one('file', 'directory')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
738
        self.assertStatusContains('RK  file => directory/',
7143.15.2 by Jelmer Vernooij
Run autopep8.
739
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
740
        rmdir('directory')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
741
        self.assertStatusContains('RD  file => directory',
7143.15.2 by Jelmer Vernooij
Run autopep8.
742
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
743
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
744
    def test_status_illegal_revision_specifiers(self):
745
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
746
        self.assertContainsRe(err, 'one or two revision specifiers')
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
747
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
748
    def test_status_no_pending(self):
749
        a_tree = self.make_branch_and_tree('a')
750
        self.build_tree(['a/a'])
751
        a_tree.add('a')
752
        a_tree.commit('a')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
753
        b_tree = a_tree.controldir.sprout('b').open_workingtree()
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
754
        self.build_tree(['b/b'])
755
        b_tree.add('b')
756
        b_tree.commit('b')
757
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
758
        self.run_bzr('merge ../b', working_dir='a')
759
        out, err = self.run_bzr('status --no-pending', working_dir='a')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
760
        self.assertEqual(out, "added:\n  b\n")
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
761
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
762
    def test_pending_specific_files(self):
763
        """With a specific file list, pending merges are not shown."""
764
        tree = self.make_branch_and_tree('tree')
6855.4.1 by Jelmer Vernooij
Yet more bees.
765
        self.build_tree_contents([('tree/a', b'content of a\n')])
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
766
        tree.add('a')
767
        r1_id = tree.commit('one')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
768
        alt = tree.controldir.sprout('alt').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
769
        self.build_tree_contents([('alt/a', b'content of a\nfrom alt\n')])
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
770
        alt_id = alt.commit('alt')
771
        tree.merge_from_branch(alt.branch)
3655.2.1 by Lukáš Lalinský
Fix test_pending_specific_files
772
        output = self.make_utf8_encoded_stringio()
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
773
        show_tree_status(tree, to_file=output)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
774
        self.assertContainsRe(output.getvalue(), b'pending merge')
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
775
        out, err = self.run_bzr('status tree/a')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
776
        self.assertNotContainsRe(out, 'pending merge')
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
777
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
778
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
779
class TestStatusEncodings(TestCaseWithTransport):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
780
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
781
    def make_uncommitted_tree(self):
782
        """Build a branch with uncommitted unicode named changes in the cwd."""
783
        working_tree = self.make_branch_and_tree(u'.')
784
        filename = u'hell\u00d8'
785
        try:
6855.4.1 by Jelmer Vernooij
Yet more bees.
786
            self.build_tree_contents([(filename, b'contents of hello')])
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
787
        except UnicodeEncodeError:
788
            raise TestSkipped("can't build unicode working tree in "
7143.15.2 by Jelmer Vernooij
Run autopep8.
789
                              "filesystem encoding %s" % sys.getfilesystemencoding())
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
790
        working_tree.add(filename)
791
        return working_tree
792
793
    def test_stdout_ascii(self):
4986.2.5 by Martin Pool
Change status blackbox encoding tests to use overrideAttr.
794
        self.overrideAttr(osutils, '_cached_user_encoding', 'ascii')
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
795
        working_tree = self.make_uncommitted_tree()
796
        stdout, stderr = self.run_bzr("status")
797
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
798
        self.assertEqual(stdout, """\
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
799
added:
800
  hell?
801
""")
802
803
    def test_stdout_latin1(self):
4986.2.5 by Martin Pool
Change status blackbox encoding tests to use overrideAttr.
804
        self.overrideAttr(osutils, '_cached_user_encoding', 'latin-1')
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
805
        working_tree = self.make_uncommitted_tree()
806
        stdout, stderr = self.run_bzr('status')
807
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
808
        expected = u"""\
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
809
added:
810
  hell\u00d8
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
811
"""
812
        if not PY3:
813
            expected = expected.encode('latin-1')
814
        self.assertEqual(stdout, expected)