/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_repository.py

build_tree_contents can create symlinks

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
"""
24
24
 
25
25
from stat import S_ISDIR
26
 
import sys
 
26
from StringIO import StringIO
27
27
 
28
28
import bzrlib
29
 
from bzrlib.errors import (NoSuchFile,
 
29
from bzrlib.errors import (NotBranchError,
 
30
                           NoSuchFile,
30
31
                           UnknownFormatError,
31
32
                           UnsupportedFormatError,
32
33
                           )
34
35
    graph,
35
36
    tests,
36
37
    )
 
38
from bzrlib.branchbuilder import BranchBuilder
37
39
from bzrlib.btree_index import BTreeBuilder, BTreeGraphIndex
38
 
from bzrlib.index import GraphIndex
 
40
from bzrlib.index import GraphIndex, InMemoryGraphIndex
39
41
from bzrlib.repository import RepositoryFormat
 
42
from bzrlib.smart import server
40
43
from bzrlib.tests import (
41
44
    TestCase,
42
45
    TestCaseWithTransport,
 
46
    TestSkipped,
 
47
    test_knit,
43
48
    )
44
49
from bzrlib.transport import (
 
50
    fakenfs,
45
51
    get_transport,
46
52
    )
 
53
from bzrlib.transport.memory import MemoryServer
47
54
from bzrlib import (
 
55
    bencode,
48
56
    bzrdir,
49
57
    errors,
50
58
    inventory,
51
59
    osutils,
 
60
    progress,
52
61
    repository,
53
62
    revision as _mod_revision,
 
63
    symbol_versioning,
54
64
    upgrade,
55
65
    versionedfile,
56
66
    workingtree,
243
253
        tree = control.create_workingtree()
244
254
        tree.add(['foo'], ['Foo:Bar'], ['file'])
245
255
        tree.put_file_bytes_non_atomic('Foo:Bar', 'content\n')
246
 
        try:
247
 
            tree.commit('first post', rev_id='first')
248
 
        except errors.IllegalPath:
249
 
            if sys.platform != 'win32':
250
 
                raise
251
 
            self.knownFailure('Foo:Bar cannot be used as a file-id on windows'
252
 
                              ' in repo format 7')
253
 
            return
 
256
        tree.commit('first post', rev_id='first')
254
257
        self.assertEqualDiff(
255
258
            '# bzr weave file v5\n'
256
259
            'i\n'
454
457
        repo = self.make_repository('.',
455
458
                format=bzrdir.format_registry.get('knit')())
456
459
        inv_xml = '<inventory format="5">\n</inventory>\n'
457
 
        inv = repo._deserialise_inventory('test-rev-id', inv_xml)
 
460
        inv = repo.deserialise_inventory('test-rev-id', inv_xml)
458
461
        self.assertEqual('test-rev-id', inv.root.revision)
459
462
 
460
463
    def test_deserialise_uses_global_revision_id(self):
466
469
        # Arguably, the deserialise_inventory should detect a mismatch, and
467
470
        # raise an error, rather than silently using one revision_id over the
468
471
        # other.
469
 
        self.assertRaises(AssertionError, repo._deserialise_inventory,
 
472
        self.assertRaises(AssertionError, repo.deserialise_inventory,
470
473
            'test-rev-id', inv_xml)
471
 
        inv = repo._deserialise_inventory('other-rev-id', inv_xml)
 
474
        inv = repo.deserialise_inventory('other-rev-id', inv_xml)
472
475
        self.assertEqual('other-rev-id', inv.root.revision)
473
476
 
474
477
    def test_supports_external_lookups(self):
679
682
        self.assertFalse(repo._format.supports_external_lookups)
680
683
 
681
684
 
682
 
class Test2a(tests.TestCaseWithMemoryTransport):
683
 
 
684
 
    def test_fetch_combines_groups(self):
685
 
        builder = self.make_branch_builder('source', format='2a')
686
 
        builder.start_series()
687
 
        builder.build_snapshot('1', None, [
688
 
            ('add', ('', 'root-id', 'directory', '')),
689
 
            ('add', ('file', 'file-id', 'file', 'content\n'))])
690
 
        builder.build_snapshot('2', ['1'], [
691
 
            ('modify', ('file-id', 'content-2\n'))])
692
 
        builder.finish_series()
693
 
        source = builder.get_branch()
694
 
        target = self.make_repository('target', format='2a')
695
 
        target.fetch(source.repository)
696
 
        target.lock_read()
697
 
        self.addCleanup(target.unlock)
698
 
        details = target.texts._index.get_build_details(
699
 
            [('file-id', '1',), ('file-id', '2',)])
700
 
        file_1_details = details[('file-id', '1')]
701
 
        file_2_details = details[('file-id', '2')]
702
 
        # The index, and what to read off disk, should be the same for both
703
 
        # versions of the file.
704
 
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
705
 
 
706
 
    def test_fetch_combines_groups(self):
707
 
        builder = self.make_branch_builder('source', format='2a')
708
 
        builder.start_series()
709
 
        builder.build_snapshot('1', None, [
710
 
            ('add', ('', 'root-id', 'directory', '')),
711
 
            ('add', ('file', 'file-id', 'file', 'content\n'))])
712
 
        builder.build_snapshot('2', ['1'], [
713
 
            ('modify', ('file-id', 'content-2\n'))])
714
 
        builder.finish_series()
715
 
        source = builder.get_branch()
716
 
        target = self.make_repository('target', format='2a')
717
 
        target.fetch(source.repository)
718
 
        target.lock_read()
719
 
        self.addCleanup(target.unlock)
720
 
        details = target.texts._index.get_build_details(
721
 
            [('file-id', '1',), ('file-id', '2',)])
722
 
        file_1_details = details[('file-id', '1')]
723
 
        file_2_details = details[('file-id', '2')]
724
 
        # The index, and what to read off disk, should be the same for both
725
 
        # versions of the file.
726
 
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
 
685
class Test2a(TestCaseWithTransport):
727
686
 
728
687
    def test_fetch_combines_groups(self):
729
688
        builder = self.make_branch_builder('source', format='2a')
752
711
        self.assertTrue(repo._format.pack_compresses)
753
712
 
754
713
    def test_inventories_use_chk_map_with_parent_base_dict(self):
755
 
        tree = self.make_branch_and_memory_tree('repo', format="2a")
756
 
        tree.lock_write()
757
 
        tree.add([''], ['TREE_ROOT'])
 
714
        tree = self.make_branch_and_tree('repo', format="2a")
758
715
        revid = tree.commit("foo")
759
 
        tree.unlock()
760
716
        tree.lock_read()
761
717
        self.addCleanup(tree.unlock)
762
718
        inv = tree.branch.repository.get_inventory(revid)
771
727
        # at 20 unchanged commits, chk pages are packed that are split into
772
728
        # two groups such that the new pack being made doesn't have all its
773
729
        # pages in the source packs (though they are in the repository).
774
 
        # Use a memory backed repository, we don't need to hit disk for this
775
 
        tree = self.make_branch_and_memory_tree('tree', format='2a')
776
 
        tree.lock_write()
777
 
        self.addCleanup(tree.unlock)
778
 
        tree.add([''], ['TREE_ROOT'])
 
730
        tree = self.make_branch_and_tree('tree', format='2a')
779
731
        for pos in range(20):
780
732
            tree.commit(str(pos))
781
733
 
782
734
    def test_pack_with_hint(self):
783
 
        tree = self.make_branch_and_memory_tree('tree', format='2a')
784
 
        tree.lock_write()
785
 
        self.addCleanup(tree.unlock)
786
 
        tree.add([''], ['TREE_ROOT'])
 
735
        tree = self.make_branch_and_tree('tree', format='2a')
787
736
        # 1 commit to leave untouched
788
737
        tree.commit('1')
789
738
        to_keep = tree.branch.repository._pack_collection.names()
1183
1132
        # check some arbitrary big numbers
1184
1133
        self.assertEqual(25, packs._max_pack_count(112894))
1185
1134
 
1186
 
    def test_repr(self):
1187
 
        packs = self.get_packs()
1188
 
        self.assertContainsRe(repr(packs),
1189
 
            'RepositoryPackCollection(.*Repository(.*))')
1190
 
 
1191
1135
    def test__obsolete_packs(self):
1192
1136
        tree, r, packs, revs = self.make_packs_and_alt_repo(write_lock=True)
1193
1137
        names = packs.names()
1555
1499
            index_class=BTreeGraphIndex,
1556
1500
            use_chk_index=False)
1557
1501
        pack = pack_repo.NewPack(collection)
1558
 
        self.addCleanup(pack.abort) # Make sure the write stream gets closed
1559
1502
        self.assertIsInstance(pack.revision_index, BTreeBuilder)
1560
1503
        self.assertIsInstance(pack.inventory_index, BTreeBuilder)
1561
1504
        self.assertIsInstance(pack._hash, type(osutils.md5()))
1614
1557
        packer = pack_repo.OptimisingPacker(self.get_pack_collection(),
1615
1558
                                            [], '.test')
1616
1559
        new_pack = packer.open_pack()
1617
 
        self.addCleanup(new_pack.abort) # ensure cleanup
1618
1560
        self.assertIsInstance(new_pack, pack_repo.NewPack)
1619
1561
        self.assertTrue(new_pack.revision_index._optimize_for_size)
1620
1562
        self.assertTrue(new_pack.inventory_index._optimize_for_size)