22
from bzrlib import inventory, treebuilder
23
29
from bzrlib.builtins import merge
24
30
from bzrlib.bzrdir import BzrDir
25
31
from bzrlib.bundle.apply_bundle import install_bundle, merge_bundle
26
32
from bzrlib.bundle.bundle_data import BundleTree
27
33
from bzrlib.bundle.serializer import write_bundle, read_bundle
34
from bzrlib.bundle.serializer.v08 import BundleSerializerV08
35
from bzrlib.bundle.serializer.v09 import BundleSerializerV09
28
36
from bzrlib.branch import Branch
29
37
from bzrlib.diff import internal_diff
30
38
from bzrlib.errors import (BzrError, TestamentMismatch, NotABundle, BadBundle,
301
309
[inventory.ROOT_ID, 'a', 'b', 'd', 'e'])
304
class BundleTester(TestCaseWithTransport):
312
class BundleTester1(TestCaseWithTransport):
314
def test_mismatched_bundle(self):
315
format = bzrdir.BzrDirMetaFormat1()
316
format.repository_format = repository.RepositoryFormatKnit2()
317
serializer = BundleSerializerV08('0.8')
318
b = self.make_branch('.', format=format)
319
self.assertRaises(errors.IncompatibleFormat, serializer.write,
320
b.repository, [], {}, StringIO())
322
def test_matched_bundle(self):
323
"""Don't raise IncompatibleFormat for knit2 and bundle0.9"""
324
format = bzrdir.BzrDirMetaFormat1()
325
format.repository_format = repository.RepositoryFormatKnit2()
326
serializer = BundleSerializerV09('0.9')
327
b = self.make_branch('.', format=format)
328
serializer.write(b.repository, [], {}, StringIO())
330
def test_mismatched_model(self):
331
"""Try copying a bundle from knit2 to knit1"""
332
format = bzrdir.BzrDirMetaFormat1()
333
format.repository_format = repository.RepositoryFormatKnit2()
334
source = self.make_branch_and_tree('source', format=format)
335
source.commit('one', rev_id='one-id')
336
source.commit('two', rev_id='two-id')
338
write_bundle(source.branch.repository, 'two-id', None, text,
342
format = bzrdir.BzrDirMetaFormat1()
343
format.repository_format = repository.RepositoryFormatKnit1()
344
target = self.make_branch('target', format=format)
345
self.assertRaises(errors.IncompatibleRevision, install_bundle,
346
target.repository, read_bundle(text))
349
class V08BundleTester(TestCaseWithTransport):
353
def bzrdir_format(self):
354
format = bzrdir.BzrDirMetaFormat1()
355
format.repository_format = repository.RepositoryFormatKnit1()
358
def make_branch_and_tree(self, path, format=None):
360
format = self.bzrdir_format()
361
return TestCaseWithTransport.make_branch_and_tree(self, path, format)
363
def make_branch(self, path, format=None):
365
format = self.bzrdir_format()
366
return TestCaseWithTransport.make_branch(self, path, format)
306
368
def create_bundle_text(self, base_rev_id, rev_id):
307
369
bundle_txt = StringIO()
308
370
rev_ids = write_bundle(self.b1.repository, rev_id, base_rev_id,
371
bundle_txt, format=self.format)
310
372
bundle_txt.seek(0)
311
373
self.assertEqual(bundle_txt.readline(),
312
'# Bazaar revision bundle v0.8\n')
374
'# Bazaar revision bundle v%s\n' % self.format)
313
375
self.assertEqual(bundle_txt.readline(), '#\n')
315
377
rev = self.b1.repository.get_revision(rev_id)
392
454
if not os.path.exists(checkout_dir):
393
455
os.mkdir(checkout_dir)
394
tree = BzrDir.create_standalone_workingtree(checkout_dir)
456
tree = self.make_branch_and_tree(checkout_dir)
396
ancestors = write_bundle(self.b1.repository, rev_id, None, s)
458
ancestors = write_bundle(self.b1.repository, rev_id, None, s,
398
461
assert isinstance(s.getvalue(), str), (
399
462
"Bundle isn't a bytestring:\n %s..." % repr(s.getvalue())[:40])
572
635
bundle = self.get_valid_bundle('a@cset-0-5', 'a@cset-0-6')
573
636
other = self.get_checkout('a@cset-0-5')
637
tree1_inv = self.tree1.branch.repository.get_inventory_xml(
639
tree2_inv = other.branch.repository.get_inventory_xml('a@cset-0-5')
640
self.assertEqualDiff(tree1_inv, tree2_inv)
574
641
other.rename_one('sub/dir/nolastnewline.txt', 'sub/nolastnewline.txt')
575
642
other.commit('rename file', rev_id='a@cset-0-6b')
576
643
merge([other.basedir, -1], [None, None], this_dir=self.tree1.basedir)
693
760
self.tree1.commit('modify', rev_id='a@cset-0-3')
694
761
bundle_file = StringIO()
695
762
rev_ids = write_bundle(self.tree1.branch.repository, 'a@cset-0-3',
696
'a@cset-0-1', bundle_file)
763
'a@cset-0-1', bundle_file, format=self.format)
697
764
self.assertNotContainsRe(bundle_file.getvalue(), 'two')
698
765
self.assertContainsRe(bundle_file.getvalue(), 'one')
699
766
self.assertContainsRe(bundle_file.getvalue(), 'three')