41
41
class BranchStatus(TestCaseWithTransport):
43
def assertStatus(self, output_lines, working_tree,
44
revision=None, short=False):
45
"""Run status in working_tree and look for output.
47
:param output_lines: The lines to look for.
48
:param working_tree: The tree to run status in.
50
output_string = self.status_string(working_tree, revision, short)
51
self.assertEqual(output_lines, output_string.splitlines(True))
53
def status_string(self, wt, revision=None, short=False):
54
# use a real file rather than StringIO because it doesn't handle
56
tof = codecs.getwriter('utf-8')(TemporaryFile())
57
show_tree_status(wt, to_file=tof, revision=revision, short=short)
59
return tof.read().decode('utf-8')
43
61
def test_branch_status(self):
44
62
"""Test basic branch status"""
45
63
wt = self.make_branch_and_tree('.')
48
ignores._set_user_ignores(['./.bazaar'])
52
show_tree_status(wt, to_file=tof)
53
self.assertEquals(tof.getvalue(), "")
65
# status with no commits or files - it must
66
# work and show no output. We do this with no
67
# commits to be sure that it's not going to fail
69
self.assertStatus([], wt)
56
71
self.build_tree(['hello.c', 'bye.c'])
57
wt.add_pending_merge('pending@pending-0-0')
58
show_tree_status(wt, to_file=tof)
60
self.assertEquals(tof.readlines(),
65
' pending@pending-0-0\n'
84
# add a commit to allow showing pending merges.
85
wt.commit('create a parent to allow testing merge output')
87
wt.add_parent_tree_id('pending@pending-0-0')
93
' pending@pending-0-0\n',
99
'P pending@pending-0-0\n',
68
103
def test_branch_status_revisions(self):
69
104
"""Tests branch status with revisions"""
70
105
wt = self.make_branch_and_tree('.')
73
ignores._set_user_ignores(['./.bazaar'])
76
107
self.build_tree(['hello.c', 'bye.c'])
79
110
wt.commit('Test message')
83
revs.append(RevisionSpec(0))
85
show_tree_status(wt, to_file=tof, revision=revs)
88
self.assertEquals(tof.readlines(),
112
revs = [RevisionSpec.from_string('0')]
93
121
self.build_tree(['more.c'])
95
123
wt.commit('Another test message')
98
revs.append(RevisionSpec(1))
100
show_tree_status(wt, to_file=tof, revision=revs)
103
self.assertEquals(tof.readlines(),
108
def status_string(self, wt):
109
# use a real file rather than StringIO because it doesn't handle
111
tof = codecs.getwriter('utf-8')(TemporaryFile())
112
show_tree_status(wt, to_file=tof)
114
return tof.read().decode('utf-8')
125
revs.append(RevisionSpec.from_string('1'))
116
134
def test_pending(self):
117
135
"""Pending merges display works, including Unicode"""
142
160
wt = self.make_branch_and_tree('.')
145
ignores._set_user_ignores(['./.bazaar'])
147
163
self.build_tree(['directory/','directory/hello.c', 'bye.c','test.c','dir2/'])
148
164
wt.add('directory')
150
166
wt.commit('testing')
172
' directory/hello.c\n'
179
'? directory/hello.c\n'
153
show_tree_status(wt, to_file=tof)
155
self.assertEquals(tof.readlines(),
159
' directory/hello.c\n'
162
184
self.assertRaises(errors.PathsDoNotExist,
163
185
show_tree_status,
164
186
wt, specific_files=['bye.c','test.c','absent.c'],
172
194
' directory/hello.c\n'
197
show_tree_status(wt, specific_files=['directory'], to_file=tof,
200
self.assertEquals(tof.readlines(), ['? directory/hello.c\n'])
175
203
show_tree_status(wt, specific_files=['dir2'], to_file=tof)
177
205
self.assertEquals(tof.readlines(),
210
show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
212
self.assertEquals(tof.readlines(), ['? dir2\n'])
182
214
def test_status_nonexistent_file(self):
183
215
# files that don't exist in either the basis tree or working tree
186
218
out, err = self.run_bzr('status', 'does-not-exist', retcode=3)
187
219
self.assertContainsRe(err, r'do not exist.*does-not-exist')
221
def test_status_out_of_date(self):
222
"""Simulate status of out-of-date tree after remote push"""
223
tree = self.make_branch_and_tree('.')
224
self.build_tree_contents([('a', 'foo\n')])
228
tree.commit('add test file')
229
# simulate what happens after a remote push
230
tree.set_last_revision("0")
231
out, err = self.run_bzr('status')
232
self.assertEqual("working tree is out of date, run 'bzr update'\n",
190
238
class CheckoutStatus(BranchStatus):
204
252
class TestStatus(TestCaseWithTransport):
206
254
def test_status(self):
207
ignores._set_user_ignores(['./.bazaar'])
209
255
self.run_bzr("init")
210
257
self.build_tree(['hello.txt'])
211
258
result = self.run_bzr("status")[0]
212
259
self.assert_("unknown:\n hello.txt\n" in result, result)
260
result = self.run_bzr("status","--short")[0]
261
self.assert_("? hello.txt\n" in result, result)
213
263
self.run_bzr("add", "hello.txt")
214
264
result = self.run_bzr("status")[0]
215
265
self.assert_("added:\n hello.txt\n" in result, result)
266
result = self.run_bzr("status","--short")[0]
267
self.assert_("A hello.txt\n" in result, result)
216
269
self.run_bzr("commit", "-m", "added")
217
270
result = self.run_bzr("status", "-r", "0..1")[0]
218
271
self.assert_("added:\n hello.txt\n" in result, result)
272
result = self.run_bzr("status", "--short", "-r", "0..1")[0]
273
self.assert_("A hello.txt\n" in result, result)
219
275
self.build_tree(['world.txt'])
220
276
result = self.run_bzr("status", "-r", "0")[0]
221
277
self.assert_("added:\n hello.txt\n" \
222
278
"unknown:\n world.txt\n" in result, result)
224
279
result2 = self.run_bzr("status", "-r", "0..")[0]
225
280
self.assertEquals(result2, result)
281
result = self.run_bzr("status", "--short", "-r", "0")[0]
282
self.assert_("A hello.txt\n" \
283
"? world.txt\n" in result, result)
284
result2 = self.run_bzr("status", "--short", "-r", "0..")[0]
285
self.assertEquals(result2, result)
228
288
class TestStatusEncodings(TestCaseWithTransport):