/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_bundle.py

  • Committer: Andrew Bennetts
  • Date: 2008-09-08 12:59:00 UTC
  • mfrom: (3695 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3756.
  • Revision ID: andrew.bennetts@canonical.com-20080908125900-8ywtsr7jqyyatjz0
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
from cStringIO import StringIO
18
18
import os
19
19
import sys
20
 
import tempfile
21
20
 
22
21
from bzrlib import (
23
22
    bzrdir,
24
23
    errors,
25
24
    inventory,
 
25
    osutils,
26
26
    repository,
27
27
    revision as _mod_revision,
28
28
    treebuilder,
42
42
                           NoSuchFile,)
43
43
from bzrlib.merge import Merge3Merger
44
44
from bzrlib.repofmt import knitrepo
45
 
from bzrlib.osutils import sha_file
 
45
from bzrlib.osutils import sha_file, sha_string
46
46
from bzrlib.tests import (
47
47
    SymlinkFeature,
48
48
    TestCase,
169
169
        self.assertEqual(btree.path2id("grandparent/parent"), "b")
170
170
        self.assertEqual(btree.path2id("grandparent/parent/file"), "c")
171
171
 
172
 
        assert btree.path2id("grandparent2") is None
173
 
        assert btree.path2id("grandparent2/parent") is None
174
 
        assert btree.path2id("grandparent2/parent/file") is None
 
172
        self.assertTrue(btree.path2id("grandparent2") is None)
 
173
        self.assertTrue(btree.path2id("grandparent2/parent") is None)
 
174
        self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
175
175
 
176
176
        btree.note_rename("grandparent", "grandparent2")
177
 
        assert btree.old_path("grandparent") is None
178
 
        assert btree.old_path("grandparent/parent") is None
179
 
        assert btree.old_path("grandparent/parent/file") is None
 
177
        self.assertTrue(btree.old_path("grandparent") is None)
 
178
        self.assertTrue(btree.old_path("grandparent/parent") is None)
 
179
        self.assertTrue(btree.old_path("grandparent/parent/file") is None)
180
180
 
181
181
        self.assertEqual(btree.id2path("a"), "grandparent2")
182
182
        self.assertEqual(btree.id2path("b"), "grandparent2/parent")
186
186
        self.assertEqual(btree.path2id("grandparent2/parent"), "b")
187
187
        self.assertEqual(btree.path2id("grandparent2/parent/file"), "c")
188
188
 
189
 
        assert btree.path2id("grandparent") is None
190
 
        assert btree.path2id("grandparent/parent") is None
191
 
        assert btree.path2id("grandparent/parent/file") is None
 
189
        self.assertTrue(btree.path2id("grandparent") is None)
 
190
        self.assertTrue(btree.path2id("grandparent/parent") is None)
 
191
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
192
192
 
193
193
        btree.note_rename("grandparent/parent", "grandparent2/parent2")
194
194
        self.assertEqual(btree.id2path("a"), "grandparent2")
199
199
        self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
200
200
        self.assertEqual(btree.path2id("grandparent2/parent2/file"), "c")
201
201
 
202
 
        assert btree.path2id("grandparent2/parent") is None
203
 
        assert btree.path2id("grandparent2/parent/file") is None
 
202
        self.assertTrue(btree.path2id("grandparent2/parent") is None)
 
203
        self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
204
204
 
205
205
        btree.note_rename("grandparent/parent/file", 
206
206
                          "grandparent2/parent2/file2")
212
212
        self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
213
213
        self.assertEqual(btree.path2id("grandparent2/parent2/file2"), "c")
214
214
 
215
 
        assert btree.path2id("grandparent2/parent2/file") is None
 
215
        self.assertTrue(btree.path2id("grandparent2/parent2/file") is None)
216
216
 
217
217
    def test_moves(self):
218
218
        """Ensure that file moves have the proper effect on children"""
221
221
                          "grandparent/alt_parent/file")
222
222
        self.assertEqual(btree.id2path("c"), "grandparent/alt_parent/file")
223
223
        self.assertEqual(btree.path2id("grandparent/alt_parent/file"), "c")
224
 
        assert btree.path2id("grandparent/parent/file") is None
 
224
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
225
225
 
226
226
    def unified_diff(self, old, new):
227
227
        out = StringIO()
233
233
        btree = self.make_tree_1()[0]
234
234
        btree.note_rename("grandparent/parent/file", 
235
235
                          "grandparent/alt_parent/file")
236
 
        assert btree.id2path("e") is None
237
 
        assert btree.path2id("grandparent/parent/file") is None
 
236
        self.assertTrue(btree.id2path("e") is None)
 
237
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
238
238
        btree.note_id("e", "grandparent/parent/file")
239
239
        return btree
240
240
 
298
298
        btree = self.make_tree_1()[0]
299
299
        self.assertEqual(btree.get_file("c").read(), "Hello\n")
300
300
        btree.note_deletion("grandparent/parent/file")
301
 
        assert btree.id2path("c") is None
302
 
        assert btree.path2id("grandparent/parent/file") is None
 
301
        self.assertTrue(btree.id2path("c") is None)
 
302
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
303
303
 
304
304
    def sorted_ids(self, tree):
305
305
        ids = list(tree)
455
455
        """
456
456
 
457
457
        if checkout_dir is None:
458
 
            checkout_dir = tempfile.mkdtemp(prefix='test-branch-', dir='.')
 
458
            checkout_dir = osutils.mkdtemp(prefix='test-branch-', dir='.')
459
459
        else:
460
460
            if not os.path.exists(checkout_dir):
461
461
                os.mkdir(checkout_dir)
464
464
        ancestors = write_bundle(self.b1.repository, rev_id, 'null:', s,
465
465
                                 format=self.format)
466
466
        s.seek(0)
467
 
        assert isinstance(s.getvalue(), str), (
468
 
            "Bundle isn't a bytestring:\n %s..." % repr(s.getvalue())[:40])
 
467
        self.assertIsInstance(s.getvalue(), str)
469
468
        install_bundle(tree.branch.repository, read_bundle(s))
470
469
        for ancestor in ancestors:
471
470
            old = self.b1.repository.revision_tree(ancestor)
472
471
            new = tree.branch.repository.revision_tree(ancestor)
473
 
 
474
 
            # Check that there aren't any inventory level changes
475
 
            delta = new.changes_from(old)
476
 
            self.assertFalse(delta.has_changed(),
477
 
                             'Revision %s not copied correctly.'
478
 
                             % (ancestor,))
479
 
 
480
 
            # Now check that the file contents are all correct
481
 
            for inventory_id in old:
482
 
                try:
483
 
                    old_file = old.get_file(inventory_id)
484
 
                except NoSuchFile:
485
 
                    continue
486
 
                if old_file is None:
487
 
                    continue
488
 
                self.assertEqual(old_file.read(),
489
 
                                 new.get_file(inventory_id).read())
 
472
            old.lock_read()
 
473
            new.lock_read()
 
474
            try:
 
475
                # Check that there aren't any inventory level changes
 
476
                delta = new.changes_from(old)
 
477
                self.assertFalse(delta.has_changed(),
 
478
                                 'Revision %s not copied correctly.'
 
479
                                 % (ancestor,))
 
480
 
 
481
                # Now check that the file contents are all correct
 
482
                for inventory_id in old:
 
483
                    try:
 
484
                        old_file = old.get_file(inventory_id)
 
485
                    except NoSuchFile:
 
486
                        continue
 
487
                    if old_file is None:
 
488
                        continue
 
489
                    self.assertEqual(old_file.read(),
 
490
                                     new.get_file(inventory_id).read())
 
491
            finally:
 
492
                new.unlock()
 
493
                old.unlock()
490
494
        if not _mod_revision.is_null(rev_id):
491
495
            rh = self.b1.revision_history()
492
496
            tree.branch.set_revision_history(rh[:rh.index(rev_id)+1])
1015
1019
        self.assertNotContainsRe(inv_text, 'format="5"')
1016
1020
        self.assertContainsRe(inv_text, 'format="7"')
1017
1021
 
 
1022
    def make_repo_with_installed_revisions(self):
 
1023
        tree = self.make_simple_tree('knit')
 
1024
        tree.commit('hello', rev_id='rev1')
 
1025
        tree.commit('hello', rev_id='rev2')
 
1026
        bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
 
1027
        repo = self.make_repository('repo', format='dirstate-with-subtree')
 
1028
        bundle.install_revisions(repo)
 
1029
        return repo
 
1030
 
1018
1031
    def test_across_models(self):
1019
 
        tree = self.make_simple_tree('knit')
1020
 
        tree.commit('hello', rev_id='rev1')
1021
 
        tree.commit('hello', rev_id='rev2')
1022
 
        bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1023
 
        repo = self.make_repository('repo', format='dirstate-with-subtree')
1024
 
        bundle.install_revisions(repo)
 
1032
        repo = self.make_repo_with_installed_revisions()
1025
1033
        inv = repo.get_inventory('rev2')
1026
1034
        self.assertEqual('rev2', inv.root.revision)
1027
 
        root_vf = repo.weave_store.get_weave(inv.root.file_id,
1028
 
                                             repo.get_transaction())
1029
 
        self.assertEqual(root_vf.versions(), ['rev1', 'rev2'])
 
1035
        root_id = inv.root.file_id
 
1036
        repo.lock_read()
 
1037
        self.addCleanup(repo.unlock)
 
1038
        self.assertEqual({(root_id, 'rev1'):(),
 
1039
            (root_id, 'rev2'):((root_id, 'rev1'),)},
 
1040
            repo.texts.get_parent_map([(root_id, 'rev1'), (root_id, 'rev2')]))
 
1041
 
 
1042
    def test_inv_hash_across_serializers(self):
 
1043
        repo = self.make_repo_with_installed_revisions()
 
1044
        recorded_inv_sha1 = repo.get_inventory_sha1('rev2')
 
1045
        xml = repo.get_inventory_xml('rev2')
 
1046
        self.assertEqual(sha_string(xml), recorded_inv_sha1)
1030
1047
 
1031
1048
    def test_across_models_incompatible(self):
1032
1049
        tree = self.make_simple_tree('dirstate-with-subtree')
1336
1353
        tree2 = self.make_branch_and_tree('target')
1337
1354
        target_repo = tree2.branch.repository
1338
1355
        install_bundle(target_repo, serializer.read(s))
1339
 
        vf = target_repo.weave_store.get_weave('fileid-2',
1340
 
            target_repo.get_transaction())
1341
 
        self.assertEqual('contents1\nstatic\n', vf.get_text('rev1'))
1342
 
        self.assertEqual('contents2\nstatic\n', vf.get_text('rev2'))
 
1356
        target_repo.lock_read()
 
1357
        self.addCleanup(target_repo.unlock)
 
1358
        self.assertEqual({'1':'contents1\nstatic\n',
 
1359
            '2':'contents2\nstatic\n'},
 
1360
            dict(target_repo.iter_files_bytes(
 
1361
                [('fileid-2', 'rev1', '1'), ('fileid-2', 'rev2', '2')])))
1343
1362
        rtree = target_repo.revision_tree('rev2')
1344
 
        inventory_vf = target_repo.get_inventory_weave()
1345
 
        self.assertEqual({'rev2':('rev1',)},
1346
 
            inventory_vf.get_parent_map(['rev2']))
 
1363
        inventory_vf = target_repo.inventories
 
1364
        # If the inventory store has a graph, it must match the revision graph.
 
1365
        self.assertSubset(
 
1366
            [inventory_vf.get_parent_map([('rev2',)])[('rev2',)]],
 
1367
            [None, (('rev1',),)])
1347
1368
        self.assertEqual('changed file',
1348
1369
                         target_repo.get_revision('rev2').message)
1349
1370