/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 breezy/tests/test_dirstate.py

  • Committer: Jelmer Vernooij
  • Date: 2018-03-24 17:48:04 UTC
  • mfrom: (6921 work)
  • mto: This revision was merged to the branch mainline in revision 6923.
  • Revision ID: jelmer@jelmer.uk-20180324174804-xf22o05byoj12x1q
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
227
227
        paths = ['a', 'b/', 'b/c', 'b/d/', 'b/d/e', 'b-c', 'f']
228
228
        file_ids = ['a-id', 'b-id', 'c-id', 'd-id', 'e-id', 'b-c-id', 'f-id']
229
229
        self.build_tree(['tree/' + p for p in paths])
230
 
        tree.set_root_id(b'TREE_ROOT')
 
230
        tree.set_root_id('TREE_ROOT')
231
231
        tree.add([p.rstrip('/') for p in paths], file_ids)
232
 
        tree.commit('initial', rev_id=b'rev-1')
 
232
        tree.commit('initial', rev_id='rev-1')
233
233
        revision_id = 'rev-1'
234
234
        # a_packed_stat = dirstate.pack_stat(os.stat('tree/a'))
235
235
        t = self.get_transport('tree')
452
452
    def get_tree_with_a_file(self):
453
453
        tree = self.make_branch_and_tree('tree')
454
454
        self.build_tree(['tree/a file'])
455
 
        tree.add('a file', b'a-file-id')
 
455
        tree.add('a file', 'a-file-id')
456
456
        return tree
457
457
 
458
458
    def test_non_empty_no_parents_to_dirstate(self):
476
476
        rev_id = tree.commit('first post').encode('utf8')
477
477
        # change the current content to be different this will alter stat, sha
478
478
        # and length:
479
 
        self.build_tree_contents([('tree/a file', b'new content\n')])
 
479
        self.build_tree_contents([('tree/a file', 'new content\n')])
480
480
        expected_result = ([rev_id], [
481
481
            (('', '', tree.get_root_id()), # common details
482
482
             [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
483
483
              ('d', '', 0, False, rev_id), # first parent details
484
484
             ]),
485
 
            (('', 'a file', b'a-file-id'), # common
 
485
            (('', 'a file', 'a-file-id'), # common
486
486
             [('f', '', 0, False, dirstate.DirState.NULLSTAT), # current
487
487
              ('f', 'c3ed76e4bfd45ff1763ca206055bca8e9fc28aa8', 24, False,
488
488
               rev_id), # first parent
503
503
        tree.merge_from_branch(tree2.branch)
504
504
        # change the current content to be different this will alter stat, sha
505
505
        # and length again, giving us three distinct values:
506
 
        self.build_tree_contents([('tree/a file', b'new content\n')])
 
506
        self.build_tree_contents([('tree/a file', 'new content\n')])
507
507
        expected_result = ([rev_id, rev_id2], [
508
508
            (('', '', tree.get_root_id()), # common details
509
509
             [('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
549
549
    def create_updated_dirstate(self):
550
550
        self.build_tree(['a-file'])
551
551
        tree = self.make_branch_and_tree('.')
552
 
        tree.add(['a-file'], [b'a-id'])
 
552
        tree.add(['a-file'], ['a-id'])
553
553
        tree.commit('add a-file')
554
554
        # Save and unlock the state, re-open it in readonly mode
555
555
        state = dirstate.DirState.from_tree(tree, 'dirstate')
566
566
        # write to disk.
567
567
        lines = state.get_lines()
568
568
        state.unlock()
569
 
        self.build_tree_contents([('dirstate', b''.join(lines))])
 
569
        self.build_tree_contents([('dirstate', ''.join(lines))])
570
570
        # get a state object
571
571
        # no parents, default tree content
572
572
        expected_result = ([], [
681
681
        state = dirstate.DirState.initialize('dirstate')
682
682
        try:
683
683
            # No stat and no sha1 sum.
684
 
            state.add('a-file', b'a-file-id', 'file', None, '')
 
684
            state.add('a-file', 'a-file-id', 'file', None, '')
685
685
            state.save()
686
686
        finally:
687
687
            state.unlock()
688
688
 
689
689
        # The dirstate should include TREE_ROOT and 'a-file' and nothing else
690
690
        expected_blocks = [
691
 
            ('', [(('', '', b'TREE_ROOT'),
 
691
            ('', [(('', '', 'TREE_ROOT'),
692
692
                   [('d', '', 0, False, dirstate.DirState.NULLSTAT)])]),
693
 
            ('', [(('', 'a-file', b'a-file-id'),
 
693
            ('', [(('', 'a-file', 'a-file-id'),
694
694
                   [('f', '', 0, False, dirstate.DirState.NULLSTAT)])]),
695
695
        ]
696
696
 
701
701
            self.assertEqual(expected_blocks, state._dirblocks)
702
702
 
703
703
            # Now modify the state, but mark it as inconsistent
704
 
            state.add(b'a-dir', b'a-dir-id', 'directory', None, '')
 
704
            state.add('a-dir', 'a-dir-id', 'directory', None, '')
705
705
            state._changes_aborted = True
706
706
            state.save()
707
707
        finally:
752
752
        state = self.create_dirstate_with_root_and_subdir()
753
753
        self.addCleanup(state.unlock)
754
754
        id_index = state._get_id_index()
755
 
        self.assertEqual(['a-root-value', b'subdir-id'], sorted(id_index))
756
 
        state.add('file-name', b'file-id', 'file', None, '')
757
 
        self.assertEqual(['a-root-value', b'file-id', b'subdir-id'],
 
755
        self.assertEqual(['a-root-value', 'subdir-id'], sorted(id_index))
 
756
        state.add('file-name', 'file-id', 'file', None, '')
 
757
        self.assertEqual(['a-root-value', 'file-id', 'subdir-id'],
758
758
                         sorted(id_index))
759
 
        state.update_minimal(('', 'new-name', b'file-id'), 'f',
 
759
        state.update_minimal(('', 'new-name', 'file-id'), 'f',
760
760
                             path_utf8='new-name')
761
 
        self.assertEqual(['a-root-value', b'file-id', b'subdir-id'],
 
761
        self.assertEqual(['a-root-value', 'file-id', 'subdir-id'],
762
762
                         sorted(id_index))
763
 
        self.assertEqual([('', 'new-name', b'file-id')],
764
 
                         sorted(id_index[b'file-id']))
 
763
        self.assertEqual([('', 'new-name', 'file-id')],
 
764
                         sorted(id_index['file-id']))
765
765
        state._validate()
766
766
 
767
767
    def test_set_state_from_inventory_no_content_no_parents(self):
841
841
        try:
842
842
            # make a dirstate with some valid hashcache data
843
843
            # file on disk, but that's not needed for this test
844
 
            foo_contents = b'contents of foo'
 
844
            foo_contents = 'contents of foo'
845
845
            self.build_tree_contents([('foo', foo_contents)])
846
 
            tree.add('foo', b'foo-id')
 
846
            tree.add('foo', 'foo-id')
847
847
 
848
848
            foo_stat = os.stat('foo')
849
849
            foo_packed = dirstate.pack_stat(foo_stat)
901
901
        try:
902
902
            tree1.add(['a', 'a/b', 'a-b', 'a/b/foo', 'a-b/bar'],
903
903
                      ['a-id', 'b-id', 'a-b-id', 'foo-id', 'bar-id'])
904
 
            tree1.commit('rev1', rev_id=b'rev1')
 
904
            tree1.commit('rev1', rev_id='rev1')
905
905
            root_id = tree1.get_root_id()
906
906
            inv = tree1.root_inventory
907
907
        finally:
925
925
            for entry in state._iter_entries():
926
926
                values.append(entry[0] + entry[1][0][:1])
927
927
            self.assertEqual(expected_result1, values)
928
 
            inv.delete('b-id')
 
928
            del inv['b-id']
929
929
            state.set_state_from_inventory(inv)
930
930
            values = []
931
931
            for entry in state._iter_entries():
972
972
        """Set the root file id in a dirstate with parents"""
973
973
        mt = self.make_branch_and_tree('mt')
974
974
        # in case the default tree format uses a different root id
975
 
        mt.set_root_id(b'TREE_ROOT')
976
 
        mt.commit('foo', rev_id=b'parent-revid')
 
975
        mt.set_root_id('TREE_ROOT')
 
976
        mt.commit('foo', rev_id='parent-revid')
977
977
        rt = mt.branch.repository.revision_tree('parent-revid')
978
978
        state = dirstate.DirState.initialize('dirstate')
979
979
        state._validate()
1104
1104
        tree1.lock_write()
1105
1105
        try:
1106
1106
            tree1.add('')
1107
 
            tree1.add(['a file'], [b'file-id'], ['file'])
 
1107
            tree1.add(['a file'], ['file-id'], ['file'])
1108
1108
            tree1.put_file_bytes_non_atomic('a file', 'file-content')
1109
1109
            revid1 = tree1.commit('foo')
1110
1110
        finally:
1158
1158
        # the 1*20 is the sha1 pretend value.
1159
1159
        state = dirstate.DirState.initialize('dirstate')
1160
1160
        expected_entries = [
1161
 
            (('', '', b'TREE_ROOT'), [
 
1161
            (('', '', 'TREE_ROOT'), [
1162
1162
             ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1163
1163
             ]),
1164
 
            (('', 'a file', b'a-file-id'), [
 
1164
            (('', 'a file', 'a-file-id'), [
1165
1165
             ('f', '1'*20, 19, False, dirstate.pack_stat(stat)), # current tree
1166
1166
             ]),
1167
1167
            ]
1168
1168
        try:
1169
 
            state.add('a file', b'a-file-id', 'file', stat, '1'*20)
 
1169
            state.add('a file', 'a-file-id', 'file', stat, '1'*20)
1170
1170
            # having added it, it should be in the output of iter_entries.
1171
1171
            self.assertEqual(expected_entries, list(state._iter_entries()))
1172
1172
            # saving and reloading should not affect this.
1277
1277
            ]
1278
1278
        state = dirstate.DirState.initialize('dirstate')
1279
1279
        try:
1280
 
            state.add('a dir', b'a dir id', 'directory', dirstat, None)
1281
 
            state.add('a dir/a file', b'a-file-id', 'file', filestat, '1'*20)
 
1280
            state.add('a dir', 'a dir id', 'directory', dirstat, None)
 
1281
            state.add('a dir/a file', 'a-file-id', 'file', filestat, '1'*20)
1282
1282
            # added it, it should be in the output of iter_entries.
1283
1283
            self.assertEqual(expected_entries, list(state._iter_entries()))
1284
1284
            # saving and reloading should not affect this.
1294
1294
        # make a dirstate and add a tree reference
1295
1295
        state = dirstate.DirState.initialize('dirstate')
1296
1296
        expected_entry = (
1297
 
            ('', 'subdir', b'subdir-id'),
 
1297
            ('', 'subdir', 'subdir-id'),
1298
1298
            [('t', 'subtree-123123', 0, False,
1299
1299
              'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')],
1300
1300
            )
1301
1301
        try:
1302
 
            state.add('subdir', b'subdir-id', 'tree-reference', None, 'subtree-123123')
1303
 
            entry = state._get_entry(0, b'subdir-id', 'subdir')
 
1302
            state.add('subdir', 'subdir-id', 'tree-reference', None, 'subtree-123123')
 
1303
            entry = state._get_entry(0, 'subdir-id', 'subdir')
1304
1304
            self.assertEqual(entry, expected_entry)
1305
1305
            state._validate()
1306
1306
            state.save()
1310
1310
        state.lock_read()
1311
1311
        self.addCleanup(state.unlock)
1312
1312
        state._validate()
1313
 
        entry2 = state._get_entry(0, b'subdir-id', 'subdir')
 
1313
        entry2 = state._get_entry(0, 'subdir-id', 'subdir')
1314
1314
        self.assertEqual(entry, entry2)
1315
1315
        self.assertEqual(entry, expected_entry)
1316
1316
        # and lookup by id should work too
1317
 
        entry2 = state._get_entry(0, fileid_utf8=b'subdir-id')
 
1317
        entry2 = state._get_entry(0, fileid_utf8='subdir-id')
1318
1318
        self.assertEqual(entry, expected_entry)
1319
1319
 
1320
1320
    def test_add_forbidden_names(self):
1335
1335
        self.build_tree(['tree1/b'])
1336
1336
        tree1.lock_write()
1337
1337
        try:
1338
 
            tree1.add(['b'], [b'b-id'])
 
1338
            tree1.add(['b'], ['b-id'])
1339
1339
            root_id = tree1.get_root_id()
1340
1340
            inv = tree1.root_inventory
1341
1341
            state = dirstate.DirState.initialize('dirstate')
1382
1382
        tree = self.make_branch_and_tree('.')
1383
1383
        self.build_tree(['c', 'd'])
1384
1384
        tree.lock_write()
1385
 
        tree.add(['c', 'd'], [b'c-id', b'd-id'])
 
1385
        tree.add(['c', 'd'], ['c-id', 'd-id'])
1386
1386
        tree.commit('add c and d')
1387
1387
        state = InstrumentedDirState.on_file(tree.current_dirstate()._filename,
1388
1388
                                             worth_saving_limit=2)
2224
2224
        tree = self.make_branch_and_tree('tree', format='development-subtree')
2225
2225
        subtree = self.make_branch_and_tree('tree/subtree',
2226
2226
                            format='development-subtree')
2227
 
        subtree.set_root_id(b'subtree')
 
2227
        subtree.set_root_id('subtree')
2228
2228
        tree.add_reference(subtree)
2229
2229
        tree.add('subtree')
2230
2230
        state = dirstate.DirState.from_tree(tree, 'dirstate')
2434
2434
        self.assertRaises(NotImplementedError, p.stat_and_sha1, "foo")
2435
2435
 
2436
2436
    def test_defaultsha1provider_sha1(self):
2437
 
        text = b'test\r\nwith\nall\rpossible line endings\r\n'
 
2437
        text = 'test\r\nwith\nall\rpossible line endings\r\n'
2438
2438
        self.build_tree_contents([('foo', text)])
2439
2439
        expected_sha = osutils.sha_string(text)
2440
2440
        p = dirstate.DefaultSHA1Provider()
2441
2441
        self.assertEqual(expected_sha, p.sha1('foo'))
2442
2442
 
2443
2443
    def test_defaultsha1provider_stat_and_sha1(self):
2444
 
        text = b'test\r\nwith\nall\rpossible line endings\r\n'
 
2444
        text = 'test\r\nwith\nall\rpossible line endings\r\n'
2445
2445
        self.build_tree_contents([('foo', text)])
2446
2446
        expected_sha = osutils.sha_string(text)
2447
2447
        p = dirstate.DefaultSHA1Provider()