/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2005, 2006 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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Tests of status command.
18
19
Most of these depend on the particular formatting used.
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
20
As such they really are blackbox tests even though some of the 
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
1185.33.71 by Martin Pool
Status tests include unicode character.
25
from cStringIO import StringIO
1685.1.80 by Wouter van Heyst
more code cleanup
26
import codecs
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
27
from os import mkdir, chdir, rmdir, unlink
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
28
import sys
1185.33.71 by Martin Pool
Status tests include unicode character.
29
from tempfile import TemporaryFile
30
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
31
from bzrlib import (
32
    bzrdir,
33
    conflicts,
34
    errors,
35
    )
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
36
import bzrlib.branch
37
from bzrlib.osutils import pathjoin
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
38
from bzrlib.revisionspec import RevisionSpec
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
39
from bzrlib.status import show_tree_status
1685.1.75 by Wouter van Heyst
more tests handle LANG=C
40
from bzrlib.tests import TestCaseWithTransport, TestSkipped
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
41
from bzrlib.workingtree import WorkingTree
42
915 by Martin Pool
- add simple test case for bzr status
43
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.
44
class BranchStatus(TestCaseWithTransport):
1102 by Martin Pool
- merge test refactoring from robertc
45
    
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
46
    def assertStatus(self, expected_lines, working_tree,
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
47
        revision=None, short=False, pending=True):
1927.2.3 by Robert Collins
review comment application - paired with Martin.
48
        """Run status in working_tree and look for output.
49
        
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
50
        :param expected_lines: The lines to look for.
1927.2.3 by Robert Collins
review comment application - paired with Martin.
51
        :param working_tree: The tree to run status in.
52
        """
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
53
        output_string = self.status_string(working_tree, revision, short,
54
                pending)
2255.7.60 by Robert Collins
Make the assertStatus blackbox helper clearer.
55
        self.assertEqual(expected_lines, output_string.splitlines(True))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
56
    
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
57
    def status_string(self, wt, revision=None, short=False, pending=True):
1927.2.3 by Robert Collins
review comment application - paired with Martin.
58
        # use a real file rather than StringIO because it doesn't handle
59
        # Unicode very well.
60
        tof = codecs.getwriter('utf-8')(TemporaryFile())
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
61
        show_tree_status(wt, to_file=tof, revision=revision, short=short,
62
                show_pending=pending)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
63
        tof.seek(0)
64
        return tof.read().decode('utf-8')
65
1836.1.16 by John Arbash Meinel
Cleanup some tests which don't expect .bazaar/ to show up. Some still fail.
66
    def test_branch_status(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
67
        """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.
68
        wt = self.make_branch_and_tree('.')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
69
70
        # status with no commits or files - it must
71
        # work and show no output. We do this with no
72
        # commits to be sure that it's not going to fail
73
        # as a corner case.
74
        self.assertStatus([], wt)
75
76
        self.build_tree(['hello.c', 'bye.c'])
77
        self.assertStatus([
78
                'unknown:\n',
79
                '  bye.c\n',
80
                '  hello.c\n',
81
            ],
82
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
83
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
84
                '?   bye.c\n',
85
                '?   hello.c\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
86
            ],
87
            wt, short=True)
1927.2.3 by Robert Collins
review comment application - paired with Martin.
88
89
        # 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.
90
        wt.commit('create a parent to allow testing merge output')
915 by Martin Pool
- add simple test case for bzr status
91
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
92
        wt.add_parent_tree_id('pending@pending-0-0')
1927.2.3 by Robert Collins
review comment application - paired with Martin.
93
        self.assertStatus([
94
                'unknown:\n',
95
                '  bye.c\n',
96
                '  hello.c\n',
97
                'pending merges:\n',
3377.3.41 by John Arbash Meinel
Fix up a couple of the tests
98
                '  (ghost) pending@pending-0-0\n',
1927.2.3 by Robert Collins
review comment application - paired with Martin.
99
            ],
100
            wt)
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
101
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
102
                '?   bye.c\n',
103
                '?   hello.c\n',
3377.3.41 by John Arbash Meinel
Fix up a couple of the tests
104
                'P   (ghost) pending@pending-0-0\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
105
            ],
106
            wt, short=True)
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
107
        self.assertStatus([
108
                'unknown:\n',
109
                '  bye.c\n',
110
                '  hello.c\n',
111
            ],
112
            wt, pending=False)
113
        self.assertStatus([
114
                '?   bye.c\n',
115
                '?   hello.c\n',
116
            ],
117
            wt, short=True, pending=False)
915 by Martin Pool
- add simple test case for bzr status
118
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
119
    def test_branch_status_revisions(self):
120
        """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.
121
        wt = self.make_branch_and_tree('.')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
122
123
        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.
124
        wt.add('hello.c')
125
        wt.add('bye.c')
126
        wt.commit('Test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
127
1948.4.36 by John Arbash Meinel
[merge] bzr.dev 1978
128
        revs = [RevisionSpec.from_string('0')]
1927.2.3 by Robert Collins
review comment application - paired with Martin.
129
        self.assertStatus([
130
                'added:\n',
131
                '  bye.c\n',
132
                '  hello.c\n'
133
            ],
134
            wt,
135
            revision=revs)
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
136
137
        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.
138
        wt.add('more.c')
139
        wt.commit('Another test message')
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
140
        
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
141
        revs.append(RevisionSpec.from_string('1'))
1927.2.3 by Robert Collins
review comment application - paired with Martin.
142
        self.assertStatus([
143
                'added:\n',
144
                '  bye.c\n',
145
                '  hello.c\n',
146
            ],
147
            wt,
148
            revision=revs)
1185.12.27 by Aaron Bentley
Use line log for pending merges
149
150
    def test_pending(self):
1185.33.71 by Martin Pool
Status tests include unicode character.
151
        """Pending merges display works, including Unicode"""
1185.12.27 by Aaron Bentley
Use line log for pending merges
152
        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.
153
        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.
154
        b = wt.branch
155
        wt.commit("Empty commit 1")
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.
156
        b_2_dir = b.bzrdir.sprout('./copy')
157
        b_2 = b_2_dir.open_branch()
158
        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.
159
        wt.commit(u"\N{TIBETAN DIGIT TWO} Empty commit 2")
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
160
        wt2.merge_from_branch(wt.branch)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
161
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
162
        self.assertStartsWith(message, "pending merges:\n")
163
        self.assertEndsWith(message, "Empty commit 2\n")
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
164
        wt2.commit("merged")
1185.16.88 by mbp at sourcefrog
Make commit message long enough in test for pending merges
165
        # must be long to make sure we see elipsis at the end
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
166
        wt.commit("Empty commit 3 " +
167
                   "blah blah blah blah " * 100)
1551.15.70 by Aaron Bentley
Avoid using builtins.merge
168
        wt2.merge_from_branch(wt.branch)
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
169
        message = self.status_string(wt2)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
170
        self.assertStartsWith(message, "pending merges:\n")
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
171
        self.assert_("Empty commit 3" in message)
2296.1.1 by Martin Pool
Make tests for truncation of status output more robust on wide terminals.
172
        self.assertEndsWith(message, "...\n")
1185.12.27 by Aaron Bentley
Use line log for pending merges
173
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
174
    def test_tree_status_ignores(self):
175
        """Tests branch status with ignores"""
176
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
177
        self.run_bzr('ignore *~')
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
178
        wt.commit('commit .bzrignore')
179
        self.build_tree(['foo.c', 'foo.c~'])
180
        self.assertStatus([
181
                'unknown:\n',
182
                '  foo.c\n',
183
                ],
184
                wt)
185
        self.assertStatus([
186
                '?   foo.c\n',
187
                ],
188
                wt, short=True)
189
190
    def test_tree_status_specific_files(self):
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
191
        """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.
192
        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.
193
        b = wt.branch
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
194
195
        self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
196
        wt.add('directory')
197
        wt.add('test.c')
198
        wt.commit('testing')
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
199
        
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
200
        self.assertStatus([
201
                'unknown:\n',
202
                '  bye.c\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
203
                '  dir2/\n',
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
204
                '  directory/hello.c\n'
205
                ],
206
                wt)
207
208
        self.assertStatus([
1551.10.7 by Aaron Bentley
Use new-style output for status
209
                '?   bye.c\n',
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
210
                '?   dir2/\n',
1551.10.7 by Aaron Bentley
Use new-style output for status
211
                '?   directory/hello.c\n'
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
212
                ],
213
                wt, short=True)
214
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
215
        tof = StringIO()
1662.1.13 by Martin Pool
Fix up blackbox test for error on status of nonexistent files
216
        self.assertRaises(errors.PathsDoNotExist,
217
                          show_tree_status,
218
                          wt, specific_files=['bye.c','test.c','absent.c'], 
219
                          to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
220
        
221
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
222
        show_tree_status(wt, specific_files=['directory'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
223
        tof.seek(0)
224
        self.assertEquals(tof.readlines(),
225
                          ['unknown:\n',
226
                           '  directory/hello.c\n'
227
                           ])
228
        tof = StringIO()
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
229
        show_tree_status(wt, specific_files=['directory'], to_file=tof,
230
                         short=True)
231
        tof.seek(0)
1551.10.7 by Aaron Bentley
Use new-style output for status
232
        self.assertEquals(tof.readlines(), ['?   directory/hello.c\n'])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
233
234
        tof = StringIO()
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
235
        show_tree_status(wt, specific_files=['dir2'], to_file=tof)
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
236
        tof.seek(0)
237
        self.assertEquals(tof.readlines(),
238
                          ['unknown:\n',
2255.7.91 by Robert Collins
Move unknown detection in long status into the delta creation, saving a tree-scan.
239
                           '  dir2/\n'
1399 by Robert Collins
Patch from Heikki Paajanen testing status on specific files
240
                           ])
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
241
        tof = StringIO()
242
        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
243
        tof.seek(0)
2255.7.97 by Robert Collins
Teach delta.report_changes about unversioned files, removing all inventory access during status --short.
244
        self.assertEquals(tof.readlines(), ['?   dir2/\n'])
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
245
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
246
        tof = StringIO()
247
        revs = [RevisionSpec.from_string('0'), RevisionSpec.from_string('1')]
2761.1.2 by Aaron Bentley
Fix line wrapping
248
        show_tree_status(wt, specific_files=['test.c'], to_file=tof,
249
                         short=True, revision=revs)
2748.2.1 by Lukáš Lalinsky
Return ConflictsList() instead of [] from Tree.conflicts.
250
        tof.seek(0)
251
        self.assertEquals(tof.readlines(), ['+N  test.c\n'])
252
1551.15.58 by Aaron Bentley
Status honours selected paths for conflicts (#127606)
253
    def test_specific_files_conflicts(self):
254
        tree = self.make_branch_and_tree('.')
255
        self.build_tree(['dir2/'])
256
        tree.add('dir2')
257
        tree.commit('added dir2')
258
        tree.set_conflicts(conflicts.ConflictList(
259
            [conflicts.ContentsConflict('foo')]))
260
        tof = StringIO()
261
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
262
        self.assertEqualDiff('', tof.getvalue())
263
        tree.set_conflicts(conflicts.ConflictList(
264
            [conflicts.ContentsConflict('dir2')]))
265
        tof = StringIO()
266
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
267
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2\n',
268
                             tof.getvalue())
269
270
        tree.set_conflicts(conflicts.ConflictList(
271
            [conflicts.ContentsConflict('dir2/file1')]))
272
        tof = StringIO()
273
        show_tree_status(tree, specific_files=['dir2'], to_file=tof)
274
        self.assertEqualDiff('conflicts:\n  Contents conflict in dir2/file1\n',
275
                             tof.getvalue())
276
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
277
    def test_status_nonexistent_file(self):
278
        # files that don't exist in either the basis tree or working tree
279
        # should give an error
280
        wt = self.make_branch_and_tree('.')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
281
        out, err = self.run_bzr('status does-not-exist', retcode=3)
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
282
        self.assertContainsRe(err, r'do not exist.*does-not-exist')
283
2091.4.2 by wang
add tests for "diff" and "status"
284
    def test_status_out_of_date(self):
285
        """Simulate status of out-of-date tree after remote push"""
286
        tree = self.make_branch_and_tree('.')
287
        self.build_tree_contents([('a', 'foo\n')])
288
        tree.lock_write()
289
        try:
290
            tree.add(['a'])
291
            tree.commit('add test file')
292
            # simulate what happens after a remote push
293
            tree.set_last_revision("0")
294
        finally:
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
295
            # before run another commands we should unlock tree
2091.4.2 by wang
add tests for "diff" and "status"
296
            tree.unlock()
2408.1.7 by Alexander Belchenko
Fix blackbox test_status_out_of_date: unlock WT before next command running
297
        out, err = self.run_bzr('status')
298
        self.assertEqual("working tree is out of date, run 'bzr update'\n",
299
                         err)
2091.4.2 by wang
add tests for "diff" and "status"
300
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
301
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
302
class CheckoutStatus(BranchStatus):
1551.2.12 by Aaron Bentley
whitespace fixups
303
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
304
    def setUp(self):
305
        super(CheckoutStatus, self).setUp()
306
        mkdir('codir')
307
        chdir('codir')
308
        
309
    def make_branch_and_tree(self, relpath):
310
        source = self.make_branch(pathjoin('..', relpath))
311
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
312
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
313
        return checkout.create_workingtree()
314
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
315
1534.4.54 by Robert Collins
Merge from integration.
316
class TestStatus(TestCaseWithTransport):
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
317
2318.2.1 by Kent Gibson
Apply status versioned patch
318
    def test_status_plain(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
319
        tree = self.make_branch_and_tree('.')
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
320
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
321
        self.build_tree(['hello.txt'])
322
        result = self.run_bzr("status")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
323
        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.
324
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
325
        tree.add("hello.txt")
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
326
        result = self.run_bzr("status")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
327
        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.
328
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
329
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
330
        result = self.run_bzr("status -r 0..1")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
331
        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.
332
2745.4.3 by Lukáš Lalinsky
Change -C to -c.
333
        result = self.run_bzr("status -c 1")[0]
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
334
        self.assertContainsRe(result, "added:\n  hello.txt\n")
335
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
336
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
337
        result = self.run_bzr("status -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
338
        self.assertContainsRe(result, "added:\n  hello.txt\n" \
339
                                      "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
340
        result2 = self.run_bzr("status -r 0..")[0]
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
341
        self.assertEquals(result2, result)
2318.2.1 by Kent Gibson
Apply status versioned patch
342
343
    def test_status_short(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
344
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
345
346
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
347
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
348
        self.assertContainsRe(result, "[?]   hello.txt\n")
349
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
350
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
351
        result = self.run_bzr("status --short")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
352
        self.assertContainsRe(result, "[+]N  hello.txt\n")
353
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
354
        tree.commit(message="added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
355
        result = self.run_bzr("status --short -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
356
        self.assertContainsRe(result, "[+]N  hello.txt\n")
357
358
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
359
        result = self.run_bzr("status --short -r 0")[0]
1551.10.7 by Aaron Bentley
Use new-style output for status
360
        self.assertContainsRe(result, "[+]N  hello.txt\n" \
361
                                      "[?]   world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
362
        result2 = self.run_bzr("status --short -r 0..")[0]
2147.2.2 by Keir Mierle
Fix spacing error and add tests for status --short command flag.
363
        self.assertEquals(result2, result)
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
364
2318.2.1 by Kent Gibson
Apply status versioned patch
365
    def test_status_versioned(self):
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
366
        tree = self.make_branch_and_tree('.')
2318.2.1 by Kent Gibson
Apply status versioned patch
367
368
        self.build_tree(['hello.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
369
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
370
        self.assertNotContainsRe(result, "unknown:\n  hello.txt\n")
371
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
372
        tree.add("hello.txt")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
373
        result = self.run_bzr("status --versioned")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
374
        self.assertContainsRe(result, "added:\n  hello.txt\n")
375
2664.7.1 by Daniel Watkins
tests.blackbox.test_status now uses internals where appropriate.
376
        tree.commit("added")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
377
        result = self.run_bzr("status --versioned -r 0..1")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
378
        self.assertContainsRe(result, "added:\n  hello.txt\n")
379
380
        self.build_tree(['world.txt'])
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
381
        result = self.run_bzr("status --versioned -r 0")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
382
        self.assertContainsRe(result, "added:\n  hello.txt\n")
383
        self.assertNotContainsRe(result, "unknown:\n  world.txt\n")
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
384
        result2 = self.run_bzr("status --versioned -r 0..")[0]
2318.2.1 by Kent Gibson
Apply status versioned patch
385
        self.assertEquals(result2, result)
386
2663.1.7 by Daniel Watkins
Capitalised short names.
387
    def test_status_SV(self):
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
388
        tree = self.make_branch_and_tree('.')
389
390
        self.build_tree(['hello.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
391
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
392
        self.assertNotContainsRe(result, "hello.txt")
393
394
        tree.add("hello.txt")
2663.1.7 by Daniel Watkins
Capitalised short names.
395
        result = self.run_bzr("status -SV")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
396
        self.assertContainsRe(result, "[+]N  hello.txt\n")
397
398
        tree.commit(message="added")
2663.1.7 by Daniel Watkins
Capitalised short names.
399
        result = self.run_bzr("status -SV -r 0..1")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
400
        self.assertContainsRe(result, "[+]N  hello.txt\n")
401
402
        self.build_tree(['world.txt'])
2663.1.7 by Daniel Watkins
Capitalised short names.
403
        result = self.run_bzr("status -SV -r 0")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
404
        self.assertContainsRe(result, "[+]N  hello.txt\n")
405
2663.1.7 by Daniel Watkins
Capitalised short names.
406
        result2 = self.run_bzr("status -SV -r 0..")[0]
2663.1.3 by Daniel Watkins
Added test for 'status --quiet'.
407
        self.assertEquals(result2, result)
408
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
409
    def assertStatusContains(self, pattern):
410
        """Run status, and assert it contains the given pattern"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
411
        result = self.run_bzr("status --short")[0]
1551.10.9 by Aaron Bentley
Add test cases for status with kind change
412
        self.assertContainsRe(result, pattern)
413
414
    def test_kind_change_short(self):
415
        tree = self.make_branch_and_tree('.')
416
        self.build_tree(['file'])
417
        tree.add('file')
418
        tree.commit('added file')
419
        unlink('file')
420
        self.build_tree(['file/'])
421
        self.assertStatusContains('K  file => file/')
422
        tree.rename_one('file', 'directory')
423
        self.assertStatusContains('RK  file => directory/')
424
        rmdir('directory')
425
        self.assertStatusContains('RD  file => directory')
426
2745.4.1 by Lukáš Lalinsky
New option -C/--change for diff and status to show changes in one revision. (#56299)
427
    def test_status_illegal_revision_specifiers(self):
428
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
429
        self.assertContainsRe(err, 'one or two revision specifiers')
430
3270.6.1 by James Westby
Add --no-pending to status to not show the pending merges. (#202830)
431
    def test_status_no_pending(self):
432
        a_tree = self.make_branch_and_tree('a')
433
        self.build_tree(['a/a'])
434
        a_tree.add('a')
435
        a_tree.commit('a')
436
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
437
        self.build_tree(['b/b'])
438
        b_tree.add('b')
439
        b_tree.commit('b')
440
441
        chdir('a')
442
        self.run_bzr('merge ../b')
443
        out, err = self.run_bzr('status --no-pending')
444
        self.assertEquals(out, "added:\n  b\n")
445
446
1185.50.69 by John Arbash Meinel
[merge] bzr.robey, small fixes (--lsprof-file, log, status, http parsing, parmiko)
447
1685.1.6 by John Arbash Meinel
Merged test_status.py.moved into test_status.py
448
class TestStatusEncodings(TestCaseWithTransport):
449
    
450
    def setUp(self):
451
        TestCaseWithTransport.setUp(self)
452
        self.user_encoding = bzrlib.user_encoding
453
        self.stdout = sys.stdout
454
455
    def tearDown(self):
456
        bzrlib.user_encoding = self.user_encoding
457
        sys.stdout = self.stdout
458
        TestCaseWithTransport.tearDown(self)
459
460
    def make_uncommitted_tree(self):
461
        """Build a branch with uncommitted unicode named changes in the cwd."""
462
        working_tree = self.make_branch_and_tree(u'.')
463
        filename = u'hell\u00d8'
464
        try:
465
            self.build_tree_contents([(filename, 'contents of hello')])
466
        except UnicodeEncodeError:
467
            raise TestSkipped("can't build unicode working tree in "
468
                "filesystem encoding %s" % sys.getfilesystemencoding())
469
        working_tree.add(filename)
470
        return working_tree
471
472
    def test_stdout_ascii(self):
473
        sys.stdout = StringIO()
474
        bzrlib.user_encoding = 'ascii'
475
        working_tree = self.make_uncommitted_tree()
476
        stdout, stderr = self.run_bzr("status")
477
478
        self.assertEquals(stdout, """\
479
added:
480
  hell?
481
""")
482
483
    def test_stdout_latin1(self):
484
        sys.stdout = StringIO()
485
        bzrlib.user_encoding = 'latin-1'
486
        working_tree = self.make_uncommitted_tree()
487
        stdout, stderr = self.run_bzr('status')
488
489
        self.assertEquals(stdout, u"""\
490
added:
491
  hell\u00d8
492
""".encode('latin-1'))
493