46
47
tree.add(['goodbye'])
47
48
tree.commit('setup')
51
class TestDiff(DiffBase):
49
53
def test_diff(self):
50
54
self.make_example_branch()
51
55
file('hello', 'wt').write('hello world!')
52
self.runbzr('commit -m fixing hello')
53
output = self.runbzr('diff -r 2..3', backtick=1, retcode=1)
56
self.run_bzr('commit -m fixing hello')
57
output = self.run_bzr('diff -r 2..3', retcode=1)[0]
54
58
self.assert_('\n+hello world!' in output)
55
output = self.runbzr('diff -r last:3..last:1', backtick=1, retcode=1)
59
output = self.run_bzr('diff -r last:3..last:1',
56
61
self.assert_('\n+baz' in output)
57
file('moo', 'wb').write('moo')
58
self.runbzr('add moo')
62
self.build_tree(['moo'])
63
self.run_bzr('add moo')
62
67
def test_diff_prefix(self):
63
68
"""diff --prefix appends to filenames in output"""
64
69
self.make_example_branch()
65
70
file('hello', 'wb').write('hello world!\n')
66
out, err = self.runbzr('diff --prefix old/:new/', retcode=1)
71
out, err = self.run_bzr('diff --prefix old/:new/', retcode=1)
67
72
self.assertEquals(err, '')
68
73
self.assertEqualDiff(subst_dates(out), '''\
69
74
=== modified file 'hello'
83
def test_diff_illegal_prefix_value(self):
84
# There was an error in error reporting for this option
85
out, err = self.run_bzr('diff --prefix old/', retcode=3)
86
self.assertContainsRe(err,
87
'--prefix expects two values separated by a colon')
78
89
def test_diff_p1(self):
79
90
"""diff -p1 produces lkml-style diffs"""
80
91
self.make_example_branch()
81
92
file('hello', 'wb').write('hello world!\n')
82
out, err = self.runbzr('diff -p1', retcode=1)
93
out, err = self.run_bzr('diff -p1', retcode=1)
83
94
self.assertEquals(err, '')
84
95
self.assertEqualDiff(subst_dates(out), '''\
85
96
=== modified file 'hello'
95
106
"""diff -p0 produces diffs with no prefix"""
96
107
self.make_example_branch()
97
108
file('hello', 'wb').write('hello world!\n')
98
out, err = self.runbzr('diff -p0', retcode=1)
109
out, err = self.run_bzr('diff -p0', retcode=1)
99
110
self.assertEquals(err, '')
100
111
self.assertEqualDiff(subst_dates(out), '''\
101
112
=== modified file 'hello'
111
122
# Get an error from a file that does not exist at all
113
124
self.make_example_branch()
114
out, err = self.runbzr('diff does-not-exist', retcode=3)
125
out, err = self.run_bzr('diff does-not-exist', retcode=3)
115
126
self.assertContainsRe(err, 'not versioned.*does-not-exist')
128
def test_diff_illegal_revision_specifiers(self):
129
out, err = self.run_bzr('diff -r 1..23..123', retcode=3)
130
self.assertContainsRe(err, 'one or two revision specifiers')
117
132
def test_diff_unversioned(self):
118
133
# Get an error when diffing a non-versioned file.
120
135
self.make_example_branch()
121
136
self.build_tree(['unversioned-file'])
122
out, err = self.runbzr('diff unversioned-file', retcode=3)
137
out, err = self.run_bzr('diff unversioned-file', retcode=3)
123
138
self.assertContainsRe(err, 'not versioned.*unversioned-file')
125
140
# TODO: What should diff say for a file deleted in working tree?
127
142
def example_branches(self):
128
143
self.build_tree(['branch1/', 'branch1/file'], line_endings='binary')
129
self.capture('init branch1')
130
self.capture('add branch1/file')
131
self.run_bzr_captured(['commit', '-m', 'add file', 'branch1'])
132
self.capture('branch branch1 branch2')
133
print >> open('branch2/file', 'wb'), 'new content'
134
self.run_bzr_captured(['commit', '-m', 'update file', 'branch2'])
144
self.run_bzr(['init', 'branch1'])[0]
145
self.run_bzr(['add', 'branch1/file'])[0]
146
self.run_bzr(['commit', '-m', 'add file', 'branch1'])
147
self.run_bzr(['branch', 'branch1', 'branch2'])[0]
148
self.build_tree_contents([('branch2/file', 'new content\n')])
149
self.run_bzr(['commit', '-m', 'update file', 'branch2'])
136
151
def test_diff_branches(self):
137
152
self.example_branches()
138
153
# should open branch1 and diff against branch2,
139
out, err = self.run_bzr_captured(['diff', '-r', 'branch:branch2',
154
out, err = self.run_bzr(['diff', '-r', 'branch:branch2',
142
157
self.assertEquals('', err)
148
163
"+contents of branch1/file\n"
149
164
"\n", subst_dates(out))
150
out, err = self.run_bzr_captured(['diff', 'branch2', 'branch1'],
165
out, err = self.run_bzr(['diff', 'branch2', 'branch1'],
152
167
self.assertEquals('', err)
153
168
self.assertEqualDiff("=== modified file 'file'\n"
161
176
def test_diff_revno_branches(self):
162
177
self.example_branches()
163
178
print >> open('branch2/file', 'wb'), 'even newer content'
164
self.run_bzr_captured(['commit', '-m',
179
self.run_bzr(['commit', '-m',
165
180
'update file once more', 'branch2'])
167
out, err = self.run_bzr_captured(['diff', '-r',
182
out, err = self.run_bzr(['diff', '-r',
168
183
'revno:1:branch2..revno:1:branch1'],
170
185
self.assertEquals('', err)
171
186
self.assertEquals('', out)
172
out, err = self.run_bzr_captured(['diff', '-r',
187
out, err = self.run_bzr(['diff', '-r',
173
188
'revno:2:branch2..revno:1:branch1'],
175
190
self.assertEquals('', err)
184
199
def example_branch2(self):
185
200
self.build_tree(['branch1/', 'branch1/file1'], line_endings='binary')
186
self.capture('init branch1')
187
self.capture('add branch1/file1')
201
self.run_bzr(['init', 'branch1'])[0]
202
self.run_bzr(['add', 'branch1/file1'])[0]
188
203
print >> open('branch1/file1', 'wb'), 'original line'
189
self.run_bzr_captured(['commit', '-m', 'first commit', 'branch1'])
204
self.run_bzr(['commit', '-m', 'first commit', 'branch1'])
191
206
print >> open('branch1/file1', 'wb'), 'repo line'
192
self.run_bzr_captured(['commit', '-m', 'second commit', 'branch1'])
207
self.run_bzr(['commit', '-m', 'second commit', 'branch1'])
194
209
def test_diff_to_working_tree(self):
195
210
self.example_branch2()
197
212
print >> open('branch1/file1', 'wb'), 'new line'
198
output = self.run_bzr_captured(['diff', '-r', '1..', 'branch1'],
213
output = self.run_bzr(['diff', '-r', '1..', 'branch1'],
200
215
self.assertTrue('\n-original line\n+new line\n' in output[0])
214
229
def make_example_branch(self):
215
230
super(TestCheckoutDiff, self).make_example_branch()
216
self.runbzr('checkout . checkout')
231
self.run_bzr('checkout . checkout')
217
232
os.chdir('checkout')
219
234
def example_branch2(self):
220
235
super(TestCheckoutDiff, self).example_branch2()
221
236
os.mkdir('checkouts')
222
self.runbzr('checkout branch1 checkouts/branch1')
237
self.run_bzr('checkout branch1 checkouts/branch1')
223
238
os.chdir('checkouts')
225
240
def example_branches(self):
226
241
super(TestCheckoutDiff, self).example_branches()
227
242
os.mkdir('checkouts')
228
self.runbzr('checkout branch1 checkouts/branch1')
229
self.runbzr('checkout branch2 checkouts/branch2')
243
self.run_bzr('checkout branch1 checkouts/branch1')
244
self.run_bzr('checkout branch2 checkouts/branch2')
230
245
os.chdir('checkouts')
233
class TestDiffLabels(TestDiff):
248
class TestDiffLabels(DiffBase):
235
250
def test_diff_label_removed(self):
236
251
super(TestDiffLabels, self).make_example_branch()
237
self.runbzr('remove hello')
238
diff = self.run_bzr_captured(['diff'], retcode=1)
252
self.run_bzr('remove hello')
253
diff = self.run_bzr(['diff'], retcode=1)
239
254
self.assertTrue("=== removed file 'hello'" in diff[0])
241
256
def test_diff_label_added(self):
242
257
super(TestDiffLabels, self).make_example_branch()
243
258
file('barbar', 'wt').write('barbar')
244
self.runbzr('add barbar')
245
diff = self.run_bzr_captured(['diff'], retcode=1)
259
self.run_bzr('add barbar')
260
diff = self.run_bzr(['diff'], retcode=1)
246
261
self.assertTrue("=== added file 'barbar'" in diff[0])
248
263
def test_diff_label_modified(self):
249
264
super(TestDiffLabels, self).make_example_branch()
250
265
file('hello', 'wt').write('barbar')
251
diff = self.run_bzr_captured(['diff'], retcode=1)
266
diff = self.run_bzr(['diff'], retcode=1)
252
267
self.assertTrue("=== modified file 'hello'" in diff[0])
254
269
def test_diff_label_renamed(self):
255
270
super(TestDiffLabels, self).make_example_branch()
256
self.runbzr('rename hello gruezi')
257
diff = self.run_bzr_captured(['diff'], retcode=1)
271
self.run_bzr('rename hello gruezi')
272
diff = self.run_bzr(['diff'], retcode=1)
258
273
self.assertTrue("=== renamed file 'hello' => 'gruezi'" in diff[0])
261
class TestExternalDiff(TestDiff):
276
class TestExternalDiff(DiffBase):
263
278
def test_external_diff(self):
264
279
"""Test that we can spawn an external diff process"""
290
306
self.assertEndsWith(out, "\n@@ -0,0 +1 @@\n"
310
class TestDiffOutput(DiffBase):
312
def test_diff_output(self):
313
# check that output doesn't mangle line-endings
314
self.make_example_branch()
315
file('hello', 'wb').write('hello world!\n')
316
output = self.run_bzr_subprocess('diff', retcode=1)[0]
317
self.assert_('\n+hello world!\n' in output)