50
50
error_regexes=err_re)
52
52
def get_MD(self, args, cmd=None, wd='branch'):
53
out = BytesIO(self.run_send(args, cmd=cmd, wd=wd)[0])
53
md = self.run_send(args, cmd=cmd, wd=wd)[0]
54
out = BytesIO(md.encode('utf-8'))
54
55
return merge_directive.MergeDirective.from_lines(out)
56
57
def assertBundleContains(self, revs, args, cmd=None, wd='branch'):
94
95
self.assertContainsRe(errmsg, 'No submit branch known or specified')
95
96
stdout, stderr = self.run_send([], cmd=['bundle'])
96
97
self.assertEqual(stderr.count('Using saved parent location'), 1)
97
self.assertBundleContains(['rev3'], [], cmd=['bundle'])
98
self.assertBundleContains([b'rev3'], [], cmd=['bundle'])
99
100
def test_uses_submit(self):
100
101
"""Submit location can be used and set"""
101
self.assertBundleContains(['rev3'], [])
102
self.assertBundleContains(['rev3', 'rev2'], ['../grandparent'])
102
self.assertBundleContains([b'rev3'], [])
103
self.assertBundleContains([b'rev3', b'rev2'], ['../grandparent'])
103
104
# submit location should be auto-remembered
104
self.assertBundleContains(['rev3', 'rev2'], [])
105
self.assertBundleContains([b'rev3', b'rev2'], [])
106
107
self.run_send(['../parent'])
107
108
# We still point to ../grandparent
108
self.assertBundleContains(['rev3', 'rev2'], [])
109
self.assertBundleContains([b'rev3', b'rev2'], [])
109
110
# Remember parent now
110
111
self.run_send(['../parent', '--remember'])
111
112
# Now we point to parent
112
self.assertBundleContains(['rev3'], [])
113
self.assertBundleContains([b'rev3'], [])
114
115
err = self.run_send(['--remember'], rc=3)[1]
115
116
self.assertContainsRe(err,
116
b'--remember requires a branch to be specified.')
117
'--remember requires a branch to be specified.')
118
119
def test_revision_branch_interaction(self):
119
self.assertBundleContains(['rev3', 'rev2'], ['../grandparent'])
120
self.assertBundleContains(['rev2'], ['../grandparent', '-r-2'])
121
self.assertBundleContains(['rev3', 'rev2'],
120
self.assertBundleContains([b'rev3', b'rev2'], ['../grandparent'])
121
self.assertBundleContains([b'rev2'], ['../grandparent', '-r-2'])
122
self.assertBundleContains([b'rev3', b'rev2'],
122
123
['../grandparent', '-r-2..-1'])
123
124
md = self.get_MD(['-r-2..-1'])
124
self.assertEqual('rev2', md.base_revision_id)
125
self.assertEqual('rev3', md.revision_id)
125
self.assertEqual(b'rev2', md.base_revision_id)
126
self.assertEqual(b'rev3', md.revision_id)
127
128
def test_output(self):
128
129
# check output for consistency
129
130
# win32 stdout converts LF to CRLF,
130
131
# which would break patch-based bundles
131
self.assertBundleContains(['rev3'], [])
132
self.assertBundleContains([b'rev3'], [])
133
134
def test_no_common_ancestor(self):
134
135
foo = self.make_branch_and_tree('foo')
174
175
def test_from_option(self):
175
176
self.run_bzr('send', retcode=3)
176
177
md = self.get_MD(['--from', 'branch'])
177
self.assertEqual('rev3', md.revision_id)
178
self.assertEqual(b'rev3', md.revision_id)
178
179
md = self.get_MD(['-f', 'branch'])
179
self.assertEqual('rev3', md.revision_id)
180
self.assertEqual(b'rev3', md.revision_id)
181
182
def test_output_option(self):
182
183
stdout = self.run_bzr('send -f branch --output file1')[0]
183
184
self.assertEqual('', stdout)
184
185
md_file = open('file1', 'rb')
185
186
self.addCleanup(md_file.close)
186
self.assertContainsRe(md_file.read(), 'rev3')
187
self.assertContainsRe(md_file.read(), b'rev3')
187
188
stdout = self.run_bzr('send -f branch --output -')[0]
188
189
self.assertContainsRe(stdout, 'rev3')
217
218
def test_format(self):
218
219
md = self.get_MD(['--format=4'])
219
220
self.assertIs(merge_directive.MergeDirective2, md.__class__)
220
self.assertFormatIs('# Bazaar revision bundle v4', md)
221
self.assertFormatIs(b'# Bazaar revision bundle v4', md)
222
223
md = self.get_MD(['--format=0.9'])
223
self.assertFormatIs('# Bazaar revision bundle v0.9', md)
224
self.assertFormatIs(b'# Bazaar revision bundle v0.9', md)
225
226
md = self.get_MD(['--format=0.9'], cmd=['bundle'])
226
self.assertFormatIs('# Bazaar revision bundle v0.9', md)
227
self.assertFormatIs(b'# Bazaar revision bundle v0.9', md)
227
228
self.assertIs(merge_directive.MergeDirective, md.__class__)
229
230
self.run_bzr_error(['Bad value .* for option .format.'],
239
240
conf.set('child_submit_format', '0.9')
240
241
md = self.get_MD([])
241
self.assertFormatIs('# Bazaar revision bundle v0.9', md)
242
self.assertFormatIs(b'# Bazaar revision bundle v0.9', md)
243
244
md = self.get_MD([], cmd=['bundle'])
244
self.assertFormatIs('# Bazaar revision bundle v0.9', md)
245
self.assertFormatIs(b'# Bazaar revision bundle v0.9', md)
245
246
self.assertIs(merge_directive.MergeDirective, md.__class__)
247
248
conf.set('child_submit_format', '0.999')
258
259
def test_omitted_revision(self):
259
260
md = self.get_MD(['-r-2..'])
260
self.assertEqual('rev2', md.base_revision_id)
261
self.assertEqual('rev3', md.revision_id)
261
self.assertEqual(b'rev2', md.base_revision_id)
262
self.assertEqual(b'rev3', md.revision_id)
262
263
md = self.get_MD(['-r..3', '--from', 'branch', 'grandparent'], wd='.')
263
self.assertEqual('rev1', md.base_revision_id)
264
self.assertEqual('rev3', md.revision_id)
264
self.assertEqual(b'rev1', md.base_revision_id)
265
self.assertEqual(b'rev3', md.revision_id)
266
267
def test_nonexistant_branch(self):
267
268
self.vfs_transport_factory = memory.MemoryServer
288
289
_default_command = ['send', '-o-', '../parent']
289
290
_default_wd = 'local'
290
_default_sent_revs = ['local']
291
_default_errors = [b'Working tree ".*/local/" has uncommitted '
292
b'changes \\(See brz status\\)\\.',]
293
_default_additional_error = b'Use --no-strict to force the send.\n'
294
_default_additional_warning = b'Uncommitted changes will not be sent.'
291
_default_sent_revs = [b'local']
292
_default_errors = ['Working tree ".*/local/" has uncommitted '
293
'changes \\(See brz status\\)\\.',]
294
_default_additional_error = 'Use --no-strict to force the send.\n'
295
_default_additional_warning = 'Uncommitted changes will not be sent.'
296
297
def set_config_send_strict(self, value):
297
298
br = branch.Branch.open('local')
318
319
self.assertEndsWith(err, bundling_revs)
320
321
self.assertEqual(bundling_revs, err)
321
md = merge_directive.MergeDirective.from_lines(BytesIO(out))
322
self.assertEqual('parent', md.base_revision_id)
322
md = merge_directive.MergeDirective.from_lines(BytesIO(out.encode('utf-8')))
323
self.assertEqual(b'parent', md.base_revision_id)
323
324
br = serializer.read_bundle(BytesIO(md.get_raw_bundle()))
324
325
self.assertEqual(set(revs), set(r.revision_id for r in br.revisions))
404
405
self._default_wd = 'checkout'
405
406
self._default_errors = ["Working tree is out of date, please run"
406
407
" 'brz update'\\.",]
407
self._default_sent_revs = ['modified-in-local', 'local']
408
self._default_sent_revs = [b'modified-in-local', b'local']
409
410
def test_send_default(self):
410
411
self.assertSendSucceeds([], with_warning=True)
412
413
def test_send_with_revision(self):
413
self.assertSendSucceeds(['-r', 'revid:local'], revs=['local'])
414
self.assertSendSucceeds(['-r', 'revid:local'], revs=[b'local'])
415
416
def test_send_no_strict(self):
416
417
self.assertSendSucceeds(['--no-strict'])