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