/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')])
7356.1.5 by Jelmer Vernooij
Use more ExitStacks.
500
        with tree.lock_write():
2091.4.2 by wang
add tests for "diff" and "status"
501
            tree.add(['a'])
502
            tree.commit('add test file')
503
            # simulate what happens after a remote push
6973.10.6 by Jelmer Vernooij
Fix tests.
504
            tree.set_last_revision(b"0")
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
505
        out, err = self.run_bzr('status')
6622.1.29 by Jelmer Vernooij
Fix some more tests.
506
        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
507
                         err)
2091.4.2 by wang
add tests for "diff" and "status"
508
5137.2.2 by Arnaud Jeansen
Add a unit test for LP: #40103 (status on an ignored file)
509
    def test_status_on_ignored(self):
510
        """Tests branch status on an unversioned file which is considered ignored.
511
512
        See https://bugs.launchpad.net/bzr/+bug/40103
513
        """
514
        tree = self.make_branch_and_tree('.')
515
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
516
        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)
517
        result = self.run_bzr('status')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
518
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
5137.2.3 by Arnaud Jeansen
Rework unit test according to feedback
519
        short_result = self.run_bzr('status --short')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
520
        self.assertContainsRe(short_result, "\\?   test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
521
522
        result = self.run_bzr('status test1.c')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
523
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
524
        short_result = self.run_bzr('status --short test1.c')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
525
        self.assertContainsRe(short_result, "\\?   test1.c\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
526
527
        result = self.run_bzr('status test1.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
528
        self.assertContainsRe(result, "ignored:\n  test1.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
529
        short_result = self.run_bzr('status --short test1.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
530
        self.assertContainsRe(short_result, "I   test1.c~\n")
5137.2.4 by Arnaud Jeansen
Make new unit test easier to read wrt. sorting
531
532
        result = self.run_bzr('status test1.c~ test2.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
533
        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
534
        short_result = self.run_bzr('status --short test1.c~ test2.c~')[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
535
        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
536
537
        result = self.run_bzr('status test1.c test1.c~ test2.c~')[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
538
        self.assertContainsRe(
539
            result, "unknown:\n  test1.c\nignored:\n  test1.c~\n  test2.c~\n")
540
        short_result = self.run_bzr(
541
            'status --short test1.c test1.c~ test2.c~')[0]
542
        self.assertContainsRe(
543
            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)
544
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
545
    def test_status_write_lock(self):
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
546
        """Test that status works without fetching history and
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
547
        having a write lock.
548
549
        See https://bugs.launchpad.net/bzr/+bug/149270
550
        """
551
        mkdir('branch1')
552
        wt = self.make_branch_and_tree('branch1')
553
        b = wt.branch
554
        wt.commit('Empty commit 1')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
555
        wt2 = b.controldir.sprout('branch2').open_workingtree()
3732.1.1 by Ian Clatworthy
fix bzr st -rbranch:path-to-branch (Lukas Lalinsky)
556
        wt2.commit('Empty commit 2')
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
557
        out, err = self.run_bzr('status branch1 -rbranch:branch2')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
558
        self.assertEqual('', out)
3655.3.1 by Lukáš Lalinský
Fix `bzr st -rbranch:PATH_TO_BRANCH`
559
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
560
    def test_status_with_shelves(self):
561
        """Ensure that _show_shelve_summary handler works.
562
        """
563
        wt = self.make_branch_and_tree('.')
564
        self.build_tree(['hello.c'])
565
        wt.add('hello.c')
566
        self.run_bzr(['shelve', '--all', '-m', 'foo'])
567
        self.build_tree(['bye.c'])
568
        wt.add('bye.c')
569
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
570
            'added:\n',
571
            '  bye.c\n',
572
            '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.
573
            ],
574
            wt)
575
        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
576
        self.build_tree(['eggs.c', 'spam.c'])
577
        wt.add('eggs.c')
5609.11.1 by Alexander Belchenko
use proper plural form to print status message about existing shelves.
578
        wt.add('spam.c')
579
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
580
            'added:\n',
581
            '  eggs.c\n',
582
            '  spam.c\n',
583
            '2 shelves exist. See "brz shelve --list" for details.\n',
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
584
            ],
585
            wt)
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
586
        self.assertStatus([
7143.15.2 by Jelmer Vernooij
Run autopep8.
587
            'added:\n',
588
            '  spam.c\n',
6282.4.3 by Francis Devereux
Test that shelf summary is not included in status when files are specified
589
            ],
590
            wt,
591
            specific_files=['spam.c'])
5418.4.2 by Parth Malwankar
blackbox test for shelve summary in status
592
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
593
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
594
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
595
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
596
    def setUp(self):
597
        super(CheckoutStatus, self).setUp()
598
        mkdir('codir')
599
        chdir('codir')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
600
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
601
    def make_branch_and_tree(self, relpath):
602
        source = self.make_branch(pathjoin('..', relpath))
603
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
6437.7.3 by Jelmer Vernooij
Use ControlDir.set_branch_reference.
604
        checkout.set_branch_reference(source)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
605
        return checkout.create_workingtree()
606
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
607
1534.4.54 by Robert Collins
Merge from integration.
608
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
609
2318.2.1 by Kent Gibson
Apply status versioned patch
610
    def test_status_plain(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
611
        tree = self.make_branch_and_tree('.')
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
612
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
613
        self.build_tree(['hello.txt'])
614
        result = self.run_bzr("status")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
615
        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.
616
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
617
        tree.add("hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
618
        result = self.run_bzr("status")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
619
        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.
620
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
621
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
622
        result = self.run_bzr("status -r 0..1")[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
2745.4.3 by Lukáš Lalinsky
Change -C to -c.
625
        result = self.run_bzr("status -c 1")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
626
        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)
627
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
628
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
629
        result = self.run_bzr("status -r 0")[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
630
        self.assertContainsRe(result, "added:\n  hello.txt\n"
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
631
                                      "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
632
        result2 = self.run_bzr("status -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
633
        self.assertEqual(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
634
635
    def test_status_short(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
636
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
637
638
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
639
        result = self.run_bzr("status --short")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
640
        self.assertContainsRe(result, "[?]   hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
641
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
642
        tree.add("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, "[+]N  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.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
647
        result = self.run_bzr("status --short -r 0..1")[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
650
        self.build_tree(['world.txt'])
5945.1.3 by Martin von Gagern
Add blackbox tests for -S as an alias to --short.
651
        result = self.run_bzr("status -S -r 0")[0]
7143.15.2 by Jelmer Vernooij
Run autopep8.
652
        self.assertContainsRe(result, "[+]N  hello.txt\n"
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
653
                                      "[?]   world.txt\n")
5945.1.3 by Martin von Gagern
Add blackbox tests for -S as an alias to --short.
654
        result2 = self.run_bzr("status -S -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
655
        self.assertEqual(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
656
2318.2.1 by Kent Gibson
Apply status versioned patch
657
    def test_status_versioned(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
658
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
659
660
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
661
        result = self.run_bzr("status --versioned")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
662
        self.assertNotContainsRe(result, "unknown:\n  hello.txt\n")
2318.2.1 by Kent Gibson
Apply status versioned patch
663
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
664
        tree.add("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.assertContainsRe(result, "added:\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.commit("added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
669
        result = self.run_bzr("status --versioned -r 0..1")[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
672
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
673
        result = self.run_bzr("status --versioned -r 0")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
674
        self.assertContainsRe(result, "added:\n  hello.txt\n")
675
        self.assertNotContainsRe(result, "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
676
        result2 = self.run_bzr("status --versioned -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
677
        self.assertEqual(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
678
2663.1.7 by Daniel Watkins
Capitalised short names.
679
    def test_status_SV(self):
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
680
        tree = self.make_branch_and_tree('.')
681
682
        self.build_tree(['hello.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
683
        result = self.run_bzr("status -SV")[0]
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
684
        self.assertNotContainsRe(result, "hello.txt")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
685
686
        tree.add("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.assertContainsRe(result, "[+]N  hello.txt\n")
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
689
690
        tree.commit(message="added")
2663.1.7 by Daniel Watkins
Capitalised short names.
691
        result = self.run_bzr("status -SV -r 0..1")[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
        self.build_tree(['world.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
695
        result = self.run_bzr("status -SV -r 0")[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
2663.1.7 by Daniel Watkins
Capitalised short names.
698
        result2 = self.run_bzr("status -SV -r 0..")[0]
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
699
        self.assertEqual(result2, result)
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
700
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
701
    def assertStatusContains(self, pattern, short=False):
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
702
        """Run status, and assert it contains the given pattern"""
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
703
        if short:
704
            result = self.run_bzr("status --short")[0]
705
        else:
706
            result = self.run_bzr("status")[0]
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
707
        self.assertContainsRe(result, pattern)
708
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
709
    def test_kind_change_plain(self):
710
        tree = self.make_branch_and_tree('.')
711
        self.build_tree(['file'])
712
        tree.add('file')
713
        tree.commit('added file')
714
        unlink('file')
715
        self.build_tree(['file/'])
7143.15.2 by Jelmer Vernooij
Run autopep8.
716
        self.assertStatusContains(
717
            'kind changed:\n  file \\(file => directory\\)')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
718
        tree.rename_one('file', 'directory')
7358.11.3 by Jelmer Vernooij
TreeDelta holds TreeChange objects rather than tuples of various sizes.
719
        self.assertStatusContains('renamed:\n  file => directory/\n'
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
720
                                  'modified:\n  directory/\n')
721
        rmdir('directory')
722
        self.assertStatusContains('removed:\n  file\n')
723
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
724
    def test_kind_change_short(self):
725
        tree = self.make_branch_and_tree('.')
726
        self.build_tree(['file'])
727
        tree.add('file')
728
        tree.commit('added file')
729
        unlink('file')
730
        self.build_tree(['file/'])
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
731
        self.assertStatusContains('K  file => file/',
7143.15.2 by Jelmer Vernooij
Run autopep8.
732
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
733
        tree.rename_one('file', 'directory')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
734
        self.assertStatusContains('RK  file => directory/',
7143.15.2 by Jelmer Vernooij
Run autopep8.
735
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
736
        rmdir('directory')
5076.3.1 by Arnaud Jeansen
Add test to the status for kind-changed elements
737
        self.assertStatusContains('RD  file => directory',
7143.15.2 by Jelmer Vernooij
Run autopep8.
738
                                  short=True)
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
739
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
740
    def test_status_illegal_revision_specifiers(self):
741
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
742
        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)
743
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
744
    def test_status_no_pending(self):
745
        a_tree = self.make_branch_and_tree('a')
746
        self.build_tree(['a/a'])
747
        a_tree.add('a')
748
        a_tree.commit('a')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
749
        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)
750
        self.build_tree(['b/b'])
751
        b_tree.add('b')
752
        b_tree.commit('b')
753
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
754
        self.run_bzr('merge ../b', working_dir='a')
755
        out, err = self.run_bzr('status --no-pending', working_dir='a')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
756
        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)
757
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
758
    def test_pending_specific_files(self):
759
        """With a specific file list, pending merges are not shown."""
760
        tree = self.make_branch_and_tree('tree')
6855.4.1 by Jelmer Vernooij
Yet more bees.
761
        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
762
        tree.add('a')
763
        r1_id = tree.commit('one')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
764
        alt = tree.controldir.sprout('alt').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
765
        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
766
        alt_id = alt.commit('alt')
767
        tree.merge_from_branch(alt.branch)
3655.2.1 by Lukáš Lalinský
Fix test_pending_specific_files
768
        output = self.make_utf8_encoded_stringio()
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
769
        show_tree_status(tree, to_file=output)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
770
        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
771
        out, err = self.run_bzr('status tree/a')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
772
        self.assertNotContainsRe(out, 'pending merge')
3636.1.1 by Robert Collins
Stop passing specific_file lists to show_tree_status when the specific
773
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
774
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
775
class TestStatusEncodings(TestCaseWithTransport):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
776
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
777
    def make_uncommitted_tree(self):
778
        """Build a branch with uncommitted unicode named changes in the cwd."""
779
        working_tree = self.make_branch_and_tree(u'.')
780
        filename = u'hell\u00d8'
781
        try:
6855.4.1 by Jelmer Vernooij
Yet more bees.
782
            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
783
        except UnicodeEncodeError:
784
            raise TestSkipped("can't build unicode working tree in "
7143.15.2 by Jelmer Vernooij
Run autopep8.
785
                              "filesystem encoding %s" % sys.getfilesystemencoding())
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
786
        working_tree.add(filename)
787
        return working_tree
788
789
    def test_stdout_ascii(self):
4986.2.5 by Martin Pool
Change status blackbox encoding tests to use overrideAttr.
790
        self.overrideAttr(osutils, '_cached_user_encoding', 'ascii')
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
791
        working_tree = self.make_uncommitted_tree()
792
        stdout, stderr = self.run_bzr("status")
793
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
794
        self.assertEqual(stdout, """\
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
795
added:
796
  hell?
797
""")
798
799
    def test_stdout_latin1(self):
4986.2.5 by Martin Pool
Change status blackbox encoding tests to use overrideAttr.
800
        self.overrideAttr(osutils, '_cached_user_encoding', 'latin-1')
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
801
        working_tree = self.make_uncommitted_tree()
802
        stdout, stderr = self.run_bzr('status')
803
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
804
        expected = u"""\
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
805
added:
806
  hell\u00d8
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
807
"""
808
        if not PY3:
809
            expected = expected.encode('latin-1')
810
        self.assertEqual(stdout, expected)