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

  • Committer: Jelmer Vernooij
  • Date: 2018-03-25 12:47:13 UTC
  • mfrom: (6928 work)
  • mto: (6940.2.6 base)
  • mto: This revision was merged to the branch mainline in revision 6941.
  • Revision ID: jelmer@jelmer.uk-20180325124713-dq64vm9bhch1gjow
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
196
196
 
197
197
    def make_tree_1(self):
198
198
        mtree = MockTree()
199
 
        mtree.add_dir("a", "grandparent")
200
 
        mtree.add_dir("b", "grandparent/parent")
201
 
        mtree.add_file("c", "grandparent/parent/file", "Hello\n")
202
 
        mtree.add_dir("d", "grandparent/alt_parent")
 
199
        mtree.add_dir(b"a", "grandparent")
 
200
        mtree.add_dir(b"b", "grandparent/parent")
 
201
        mtree.add_file(b"c", "grandparent/parent/file", "Hello\n")
 
202
        mtree.add_dir(b"d", "grandparent/alt_parent")
203
203
        return BundleTree(mtree, ''), mtree
204
204
 
205
205
    def test_renames(self):
211
211
        self.assertEqual(btree.old_path("grandparent/parent/file"),
212
212
                         "grandparent/parent/file")
213
213
 
214
 
        self.assertEqual(btree.id2path("a"), "grandparent")
215
 
        self.assertEqual(btree.id2path("b"), "grandparent/parent")
216
 
        self.assertEqual(btree.id2path("c"), "grandparent/parent/file")
 
214
        self.assertEqual(btree.id2path(b"a"), "grandparent")
 
215
        self.assertEqual(btree.id2path(b"b"), "grandparent/parent")
 
216
        self.assertEqual(btree.id2path(b"c"), "grandparent/parent/file")
217
217
 
218
 
        self.assertEqual(btree.path2id("grandparent"), "a")
219
 
        self.assertEqual(btree.path2id("grandparent/parent"), "b")
220
 
        self.assertEqual(btree.path2id("grandparent/parent/file"), "c")
 
218
        self.assertEqual(btree.path2id("grandparent"), b"a")
 
219
        self.assertEqual(btree.path2id("grandparent/parent"), b"b")
 
220
        self.assertEqual(btree.path2id("grandparent/parent/file"), b"c")
221
221
 
222
222
        self.assertIs(btree.path2id("grandparent2"), None)
223
223
        self.assertIs(btree.path2id("grandparent2/parent"), None)
228
228
        self.assertIs(btree.old_path("grandparent/parent"), None)
229
229
        self.assertIs(btree.old_path("grandparent/parent/file"), None)
230
230
 
231
 
        self.assertEqual(btree.id2path("a"), "grandparent2")
232
 
        self.assertEqual(btree.id2path("b"), "grandparent2/parent")
233
 
        self.assertEqual(btree.id2path("c"), "grandparent2/parent/file")
 
231
        self.assertEqual(btree.id2path(b"a"), "grandparent2")
 
232
        self.assertEqual(btree.id2path(b"b"), "grandparent2/parent")
 
233
        self.assertEqual(btree.id2path(b"c"), "grandparent2/parent/file")
234
234
 
235
 
        self.assertEqual(btree.path2id("grandparent2"), "a")
236
 
        self.assertEqual(btree.path2id("grandparent2/parent"), "b")
237
 
        self.assertEqual(btree.path2id("grandparent2/parent/file"), "c")
 
235
        self.assertEqual(btree.path2id("grandparent2"), b"a")
 
236
        self.assertEqual(btree.path2id("grandparent2/parent"), b"b")
 
237
        self.assertEqual(btree.path2id("grandparent2/parent/file"), b"c")
238
238
 
239
239
        self.assertTrue(btree.path2id("grandparent") is None)
240
240
        self.assertTrue(btree.path2id("grandparent/parent") is None)
241
241
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
242
242
 
243
243
        btree.note_rename("grandparent/parent", "grandparent2/parent2")
244
 
        self.assertEqual(btree.id2path("a"), "grandparent2")
245
 
        self.assertEqual(btree.id2path("b"), "grandparent2/parent2")
246
 
        self.assertEqual(btree.id2path("c"), "grandparent2/parent2/file")
 
244
        self.assertEqual(btree.id2path(b"a"), "grandparent2")
 
245
        self.assertEqual(btree.id2path(b"b"), "grandparent2/parent2")
 
246
        self.assertEqual(btree.id2path(b"c"), "grandparent2/parent2/file")
247
247
 
248
 
        self.assertEqual(btree.path2id("grandparent2"), "a")
249
 
        self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
250
 
        self.assertEqual(btree.path2id("grandparent2/parent2/file"), "c")
 
248
        self.assertEqual(btree.path2id("grandparent2"), b"a")
 
249
        self.assertEqual(btree.path2id("grandparent2/parent2"), b"b")
 
250
        self.assertEqual(btree.path2id("grandparent2/parent2/file"), b"c")
251
251
 
252
252
        self.assertTrue(btree.path2id("grandparent2/parent") is None)
253
253
        self.assertTrue(btree.path2id("grandparent2/parent/file") is None)
254
254
 
255
255
        btree.note_rename("grandparent/parent/file",
256
256
                          "grandparent2/parent2/file2")
257
 
        self.assertEqual(btree.id2path("a"), "grandparent2")
258
 
        self.assertEqual(btree.id2path("b"), "grandparent2/parent2")
259
 
        self.assertEqual(btree.id2path("c"), "grandparent2/parent2/file2")
 
257
        self.assertEqual(btree.id2path(b"a"), "grandparent2")
 
258
        self.assertEqual(btree.id2path(b"b"), "grandparent2/parent2")
 
259
        self.assertEqual(btree.id2path(b"c"), "grandparent2/parent2/file2")
260
260
 
261
 
        self.assertEqual(btree.path2id("grandparent2"), "a")
262
 
        self.assertEqual(btree.path2id("grandparent2/parent2"), "b")
263
 
        self.assertEqual(btree.path2id("grandparent2/parent2/file2"), "c")
 
261
        self.assertEqual(btree.path2id("grandparent2"), b"a")
 
262
        self.assertEqual(btree.path2id("grandparent2/parent2"), b"b")
 
263
        self.assertEqual(btree.path2id("grandparent2/parent2/file2"), b"c")
264
264
 
265
265
        self.assertTrue(btree.path2id("grandparent2/parent2/file") is None)
266
266
 
269
269
        btree = self.make_tree_1()[0]
270
270
        btree.note_rename("grandparent/parent/file",
271
271
                          "grandparent/alt_parent/file")
272
 
        self.assertEqual(btree.id2path("c"), "grandparent/alt_parent/file")
273
 
        self.assertEqual(btree.path2id("grandparent/alt_parent/file"), "c")
 
272
        self.assertEqual(btree.id2path(b"c"), "grandparent/alt_parent/file")
 
273
        self.assertEqual(btree.path2id("grandparent/alt_parent/file"), b"c")
274
274
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
275
275
 
276
276
    def unified_diff(self, old, new):
283
283
        btree = self.make_tree_1()[0]
284
284
        btree.note_rename("grandparent/parent/file",
285
285
                          "grandparent/alt_parent/file")
286
 
        self.assertTrue(btree.id2path("e") is None)
 
286
        self.assertTrue(btree.id2path(b"e") is None)
287
287
        self.assertTrue(btree.path2id("grandparent/parent/file") is None)
288
288
        btree.note_id("e", "grandparent/parent/file")
289
289
        return btree
293
293
        btree = self.make_tree_2()
294
294
        add_patch = self.unified_diff([], ["Extra cheese\n"])
295
295
        btree.note_patch("grandparent/parent/file", add_patch)
296
 
        btree.note_id('f', 'grandparent/parent/symlink', kind='symlink')
 
296
        btree.note_id(b'f', 'grandparent/parent/symlink', kind='symlink')
297
297
        btree.note_target('grandparent/parent/symlink', 'venus')
298
298
        self.adds_test(btree)
299
299
 
300
300
    def adds_test(self, btree):
301
 
        self.assertEqual(btree.id2path("e"), "grandparent/parent/file")
302
 
        self.assertEqual(btree.path2id("grandparent/parent/file"), "e")
 
301
        self.assertEqual(btree.id2path(b"e"), "grandparent/parent/file")
 
302
        self.assertEqual(btree.path2id("grandparent/parent/file"), b"e")
303
303
        self.assertEqual(btree.get_file("grandparent/parent/file").read(),
304
304
                         "Extra cheese\n")
305
305
        self.assertEqual(
325
325
        return btree
326
326
 
327
327
    def get_file_test(self, btree):
328
 
        self.assertEqual(btree.get_file(btree.id2path("e")).read(), "Lemon\n")
329
 
        self.assertEqual(btree.get_file(btree.id2path("c")).read(), "Hello\n")
 
328
        self.assertEqual(btree.get_file(btree.id2path(b"e")).read(), "Lemon\n")
 
329
        self.assertEqual(btree.get_file(btree.id2path(b"c")).read(), "Hello\n")
330
330
 
331
331
    def test_get_file(self):
332
332
        """Get file contents"""
348
348
    def test_delete(self):
349
349
        "Deletion by bundle"
350
350
        btree = self.make_tree_1()[0]
351
 
        self.assertEqual(btree.get_file(btree.id2path("c")).read(), "Hello\n")
 
351
        self.assertEqual(btree.get_file(btree.id2path(b"c")).read(), "Hello\n")
352
352
        btree.note_deletion("grandparent/parent/file")
353
 
        self.assertTrue(btree.id2path("c") is None)
 
353
        self.assertTrue(btree.id2path(b"c") is None)
354
354
        self.assertFalse(btree.is_versioned("grandparent/parent/file"))
355
355
 
356
356
    def sorted_ids(self, tree):
393
393
        format = bzrdir.BzrDirMetaFormat1()
394
394
        format.repository_format = knitrepo.RepositoryFormatKnit3()
395
395
        source = self.make_branch_and_tree('source', format=format)
396
 
        source.commit('one', rev_id='one-id')
397
 
        source.commit('two', rev_id='two-id')
 
396
        source.commit('one', rev_id=b'one-id')
 
397
        source.commit('two', rev_id=b'two-id')
398
398
        text = BytesIO()
399
399
        write_bundle(source.branch.repository, 'two-id', 'null:', text,
400
400
                     format='0.9')
612
612
        self.b1 = self.tree1.branch
613
613
 
614
614
        self.build_tree_contents([('b1/one', b'one\n')])
615
 
        self.tree1.add('one', 'one-id')
616
 
        self.tree1.set_root_id('root-id')
617
 
        self.tree1.commit('add one', rev_id='a@cset-0-1')
 
615
        self.tree1.add('one', b'one-id')
 
616
        self.tree1.set_root_id(b'root-id')
 
617
        self.tree1.commit('add one', rev_id=b'a@cset-0-1')
618
618
 
619
 
        bundle = self.get_valid_bundle('null:', 'a@cset-0-1')
 
619
        bundle = self.get_valid_bundle('null:', b'a@cset-0-1')
620
620
 
621
621
        # Make sure we can handle files with spaces, tabs, other
622
622
        # bogus characters
637
637
        tt.apply()
638
638
        # have to fix length of file-id so that we can predictably rewrite
639
639
        # a (length-prefixed) record containing it later.
640
 
        self.tree1.add('with space.txt', 'withspace-id')
 
640
        self.tree1.add('with space.txt', b'withspace-id')
641
641
        self.tree1.add([
642
642
                  'dir'
643
643
                , 'dir/filein subdir.c'
649
649
                , 'sub/sub/nonempty.txt'
650
650
                , 'sub/sub/emptyfile.txt'
651
651
                ])
652
 
        self.tree1.commit('add whitespace', rev_id='a@cset-0-2')
 
652
        self.tree1.commit('add whitespace', rev_id=b'a@cset-0-2')
653
653
 
654
 
        bundle = self.get_valid_bundle('a@cset-0-1', 'a@cset-0-2')
 
654
        bundle = self.get_valid_bundle('a@cset-0-1', b'a@cset-0-2')
655
655
 
656
656
        # Check a rollup bundle
657
657
        bundle = self.get_valid_bundle('null:', 'a@cset-0-2')
666
666
        trans_id = tt.trans_id_tree_path('executable')
667
667
        tt.set_executability(False, trans_id)
668
668
        tt.apply()
669
 
        self.tree1.commit('removed', rev_id='a@cset-0-3')
 
669
        self.tree1.commit('removed', rev_id=b'a@cset-0-3')
670
670
 
671
671
        bundle = self.get_valid_bundle('a@cset-0-2', 'a@cset-0-3')
672
672
        self.assertRaises((errors.TestamentMismatch,
678
678
 
679
679
        # Now move the directory
680
680
        self.tree1.rename_one('dir', 'sub/dir')
681
 
        self.tree1.commit('rename dir', rev_id='a@cset-0-4')
 
681
        self.tree1.commit('rename dir', rev_id=b'a@cset-0-4')
682
682
 
683
683
        bundle = self.get_valid_bundle('a@cset-0-3', 'a@cset-0-4')
684
684
        # Check a rollup bundle
691
691
        with open('b1/sub/dir/nolastnewline.txt', 'ab') as f: f.write('\n')
692
692
        self.tree1.rename_one('sub/dir/ pre space',
693
693
                              'sub/ start space')
694
 
        self.tree1.commit('Modified files', rev_id='a@cset-0-5')
 
694
        self.tree1.commit('Modified files', rev_id=b'a@cset-0-5')
695
695
        bundle = self.get_valid_bundle('a@cset-0-4', 'a@cset-0-5')
696
696
 
697
697
        self.tree1.rename_one('sub/dir/WithCaps.txt', 'temp')
698
698
        self.tree1.rename_one('with space.txt', 'WithCaps.txt')
699
699
        self.tree1.rename_one('temp', 'with space.txt')
700
 
        self.tree1.commit(u'swap filenames', rev_id='a@cset-0-6',
 
700
        self.tree1.commit(u'swap filenames', rev_id=b'a@cset-0-6',
701
701
                          verbose=False)
702
702
        bundle = self.get_valid_bundle('a@cset-0-5', 'a@cset-0-6')
703
703
        other = self.get_checkout('a@cset-0-5')
707
707
                                       'a@cset-0-5')
708
708
        self.assertEqualDiff(tree1_inv, tree2_inv)
709
709
        other.rename_one('sub/dir/nolastnewline.txt', 'sub/nolastnewline.txt')
710
 
        other.commit('rename file', rev_id='a@cset-0-6b')
 
710
        other.commit('rename file', rev_id=b'a@cset-0-6b')
711
711
        self.tree1.merge_from_branch(other.branch)
712
 
        self.tree1.commit(u'Merge', rev_id='a@cset-0-7',
 
712
        self.tree1.commit(u'Merge', rev_id=b'a@cset-0-7',
713
713
                          verbose=False)
714
714
        bundle = self.get_valid_bundle('a@cset-0-6', 'a@cset-0-7')
715
715
 
723
723
        tt = TreeTransform(self.tree1)
724
724
        tt.new_symlink(link_name, tt.root, link_target, link_id)
725
725
        tt.apply()
726
 
        self.tree1.commit('add symlink', rev_id='l@cset-0-1')
 
726
        self.tree1.commit('add symlink', rev_id=b'l@cset-0-1')
727
727
        bundle = self.get_valid_bundle('null:', 'l@cset-0-1')
728
728
        if getattr(bundle, 'revision_tree', None) is not None:
729
729
            # Not all bundle formats supports revision_tree
736
736
        tt.delete_contents(trans_id)
737
737
        tt.create_symlink(new_link_target, trans_id)
738
738
        tt.apply()
739
 
        self.tree1.commit('rename and change symlink', rev_id='l@cset-0-2')
 
739
        self.tree1.commit('rename and change symlink', rev_id=b'l@cset-0-2')
740
740
        bundle = self.get_valid_bundle('l@cset-0-1', 'l@cset-0-2')
741
741
        if getattr(bundle, 'revision_tree', None) is not None:
742
742
            # Not all bundle formats supports revision_tree
749
749
        tt.delete_contents(trans_id)
750
750
        tt.create_symlink('jupiter', trans_id)
751
751
        tt.apply()
752
 
        self.tree1.commit('just change symlink target', rev_id='l@cset-0-3')
 
752
        self.tree1.commit('just change symlink target', rev_id=b'l@cset-0-3')
753
753
        bundle = self.get_valid_bundle('l@cset-0-2', 'l@cset-0-3')
754
754
 
755
755
        tt = TreeTransform(self.tree1)
756
756
        trans_id = tt.trans_id_tree_path('link2')
757
757
        tt.delete_contents(trans_id)
758
758
        tt.apply()
759
 
        self.tree1.commit('Delete symlink', rev_id='l@cset-0-4')
 
759
        self.tree1.commit('Delete symlink', rev_id=b'l@cset-0-4')
760
760
        bundle = self.get_valid_bundle('l@cset-0-3', 'l@cset-0-4')
761
761
 
762
762
    def test_symlink_bundle(self):
778
778
        tt.new_file('file2', tt.root, '\x01\n\x02\r\x03\n\x04\r\xff',
779
779
            'binary-2')
780
780
        tt.apply()
781
 
        self.tree1.commit('add binary', rev_id='b@cset-0-1')
 
781
        self.tree1.commit('add binary', rev_id=b'b@cset-0-1')
782
782
        self.get_valid_bundle('null:', 'b@cset-0-1')
783
783
 
784
784
        # Delete
786
786
        trans_id = tt.trans_id_tree_path('file')
787
787
        tt.delete_contents(trans_id)
788
788
        tt.apply()
789
 
        self.tree1.commit('delete binary', rev_id='b@cset-0-2')
 
789
        self.tree1.commit('delete binary', rev_id=b'b@cset-0-2')
790
790
        self.get_valid_bundle('b@cset-0-1', 'b@cset-0-2')
791
791
 
792
792
        # Rename & modify
796
796
        tt.delete_contents(trans_id)
797
797
        tt.create_file('file\rcontents\x00\n\x00', trans_id)
798
798
        tt.apply()
799
 
        self.tree1.commit('rename and modify binary', rev_id='b@cset-0-3')
 
799
        self.tree1.commit('rename and modify binary', rev_id=b'b@cset-0-3')
800
800
        self.get_valid_bundle('b@cset-0-2', 'b@cset-0-3')
801
801
 
802
802
        # Modify
805
805
        tt.delete_contents(trans_id)
806
806
        tt.create_file('\x00file\rcontents', trans_id)
807
807
        tt.apply()
808
 
        self.tree1.commit('just modify binary', rev_id='b@cset-0-4')
 
808
        self.tree1.commit('just modify binary', rev_id=b'b@cset-0-4')
809
809
        self.get_valid_bundle('b@cset-0-3', 'b@cset-0-4')
810
810
 
811
811
        # Rollup
817
817
        tt = TreeTransform(self.tree1)
818
818
        tt.new_file('file', tt.root, 'file', 'file')
819
819
        tt.apply()
820
 
        self.tree1.commit('create file', rev_id='a@lmod-0-1')
 
820
        self.tree1.commit('create file', rev_id=b'a@lmod-0-1')
821
821
 
822
822
        tt = TreeTransform(self.tree1)
823
823
        trans_id = tt.trans_id_tree_path('file')
824
824
        tt.delete_contents(trans_id)
825
825
        tt.create_file('file2', trans_id)
826
826
        tt.apply()
827
 
        self.tree1.commit('modify text', rev_id='a@lmod-0-2a')
 
827
        self.tree1.commit('modify text', rev_id=b'a@lmod-0-2a')
828
828
 
829
829
        other = self.get_checkout('a@lmod-0-1')
830
830
        tt = TreeTransform(other)
832
832
        tt.delete_contents(trans_id)
833
833
        tt.create_file('file2', trans_id)
834
834
        tt.apply()
835
 
        other.commit('modify text in another tree', rev_id='a@lmod-0-2b')
 
835
        other.commit('modify text in another tree', rev_id=b'a@lmod-0-2b')
836
836
        self.tree1.merge_from_branch(other.branch)
837
 
        self.tree1.commit(u'Merge', rev_id='a@lmod-0-3',
 
837
        self.tree1.commit(u'Merge', rev_id=b'a@lmod-0-3',
838
838
                          verbose=False)
839
 
        self.tree1.commit(u'Merge', rev_id='a@lmod-0-4')
 
839
        self.tree1.commit(u'Merge', rev_id=b'a@lmod-0-4')
840
840
        bundle = self.get_valid_bundle('a@lmod-0-2a', 'a@lmod-0-4')
841
841
 
842
842
    def test_hide_history(self):
843
843
        self.tree1 = self.make_branch_and_tree('b1')
844
844
        self.b1 = self.tree1.branch
845
845
 
846
 
        with open('b1/one', 'wb') as f: f.write('one\n')
 
846
        with open('b1/one', 'wb') as f: f.write(b'one\n')
847
847
        self.tree1.add('one')
848
 
        self.tree1.commit('add file', rev_id='a@cset-0-1')
849
 
        with open('b1/one', 'wb') as f: f.write('two\n')
850
 
        self.tree1.commit('modify', rev_id='a@cset-0-2')
851
 
        with open('b1/one', 'wb') as f: f.write('three\n')
852
 
        self.tree1.commit('modify', rev_id='a@cset-0-3')
 
848
        self.tree1.commit('add file', rev_id=b'a@cset-0-1')
 
849
        with open('b1/one', 'wb') as f: f.write(b'two\n')
 
850
        self.tree1.commit('modify', rev_id=b'a@cset-0-2')
 
851
        with open('b1/one', 'wb') as f: f.write(b'three\n')
 
852
        self.tree1.commit('modify', rev_id=b'a@cset-0-3')
853
853
        bundle_file = BytesIO()
854
854
        rev_ids = write_bundle(self.tree1.branch.repository, 'a@cset-0-3',
855
855
                               'a@cset-0-1', bundle_file, format=self.format)
860
860
    def test_bundle_same_basis(self):
861
861
        """Ensure using the basis as the target doesn't cause an error"""
862
862
        self.tree1 = self.make_branch_and_tree('b1')
863
 
        self.tree1.commit('add file', rev_id='a@cset-0-1')
 
863
        self.tree1.commit('add file', rev_id=b'a@cset-0-1')
864
864
        bundle_file = BytesIO()
865
865
        rev_ids = write_bundle(self.tree1.branch.repository, 'a@cset-0-1',
866
866
                               'a@cset-0-1', bundle_file)
883
883
            u'William Dod\xe9\n').encode('utf-8'))
884
884
        f.close()
885
885
 
886
 
        self.tree1.add([u'with Dod\N{Euro Sign}'], ['withdod-id'])
 
886
        self.tree1.add([u'with Dod\N{Euro Sign}'], [b'withdod-id'])
887
887
        self.tree1.commit(u'i18n commit from William Dod\xe9',
888
 
                          rev_id='i18n-1', committer=u'William Dod\xe9')
 
888
                          rev_id=b'i18n-1', committer=u'William Dod\xe9')
889
889
 
890
890
        # Add
891
891
        bundle = self.get_valid_bundle('null:', 'i18n-1')
894
894
        f = open(u'b1/with Dod\N{Euro Sign}', 'wb')
895
895
        f.write(u'Modified \xb5\n'.encode('utf8'))
896
896
        f.close()
897
 
        self.tree1.commit(u'modified', rev_id='i18n-2')
 
897
        self.tree1.commit(u'modified', rev_id=b'i18n-2')
898
898
 
899
899
        bundle = self.get_valid_bundle('i18n-1', 'i18n-2')
900
900
 
901
901
        # Renamed
902
902
        self.tree1.rename_one(u'with Dod\N{Euro Sign}', u'B\N{Euro Sign}gfors')
903
 
        self.tree1.commit(u'renamed, the new i18n man', rev_id='i18n-3',
 
903
        self.tree1.commit(u'renamed, the new i18n man', rev_id=b'i18n-3',
904
904
                          committer=u'Erik B\xe5gfors')
905
905
 
906
906
        bundle = self.get_valid_bundle('i18n-2', 'i18n-3')
907
907
 
908
908
        # Removed
909
909
        self.tree1.remove([u'B\N{Euro Sign}gfors'])
910
 
        self.tree1.commit(u'removed', rev_id='i18n-4')
 
910
        self.tree1.commit(u'removed', rev_id=b'i18n-4')
911
911
 
912
912
        bundle = self.get_valid_bundle('i18n-3', 'i18n-4')
913
913
 
928
928
        #       once we actually support them
929
929
 
930
930
        # Added
931
 
        self.tree1.commit('funky whitespace', rev_id='white-1')
 
931
        self.tree1.commit('funky whitespace', rev_id=b'white-1')
932
932
 
933
933
        bundle = self.get_valid_bundle('null:', 'white-1')
934
934
 
935
935
        # Modified
936
936
        with open('b1/trailing space ', 'ab') as f: f.write('add some text\n')
937
 
        self.tree1.commit('add text', rev_id='white-2')
 
937
        self.tree1.commit('add text', rev_id=b'white-2')
938
938
 
939
939
        bundle = self.get_valid_bundle('white-1', 'white-2')
940
940
 
941
941
        # Renamed
942
942
        self.tree1.rename_one('trailing space ', ' start and end space ')
943
 
        self.tree1.commit('rename', rev_id='white-3')
 
943
        self.tree1.commit('rename', rev_id=b'white-3')
944
944
 
945
945
        bundle = self.get_valid_bundle('white-2', 'white-3')
946
946
 
947
947
        # Removed
948
948
        self.tree1.remove([' start and end space '])
949
 
        self.tree1.commit('removed', rev_id='white-4')
 
949
        self.tree1.commit('removed', rev_id=b'white-4')
950
950
 
951
951
        bundle = self.get_valid_bundle('white-3', 'white-4')
952
952
 
964
964
        builder.finish_tree()
965
965
 
966
966
        # Asia/Colombo offset = 5 hours 30 minutes
967
 
        self.tree1.commit('non-hour offset timezone', rev_id='tz-1',
 
967
        self.tree1.commit('non-hour offset timezone', rev_id=b'tz-1',
968
968
                          timezone=19800, timestamp=1152544886.0)
969
969
 
970
970
        bundle = self.get_valid_bundle('null:', 'tz-1')
978
978
    def test_bundle_root_id(self):
979
979
        self.tree1 = self.make_branch_and_tree('b1')
980
980
        self.b1 = self.tree1.branch
981
 
        self.tree1.commit('message', rev_id='revid1')
 
981
        self.tree1.commit('message', rev_id=b'revid1')
982
982
        bundle = self.get_valid_bundle('null:', 'revid1')
983
983
        tree = self.get_bundle_tree(bundle, 'revid1')
984
984
        root_revision = tree.get_file_revision(u'', tree.get_root_id())
987
987
    def test_install_revisions(self):
988
988
        self.tree1 = self.make_branch_and_tree('b1')
989
989
        self.b1 = self.tree1.branch
990
 
        self.tree1.commit('message', rev_id='rev2a')
 
990
        self.tree1.commit('message', rev_id=b'rev2a')
991
991
        bundle = self.get_valid_bundle('null:', 'rev2a')
992
992
        branch2 = self.make_branch('b2')
993
993
        self.assertFalse(branch2.repository.has_revision('rev2a'))
1001
1001
        tree.lock_write()
1002
1002
        self.addCleanup(tree.unlock)
1003
1003
        tree.add([''], ['TREE_ROOT'])
1004
 
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id='rev1')
 
1004
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id=b'rev1')
1005
1005
        self.b1 = tree.branch
1006
1006
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1007
1007
        bundle = read_bundle(bundle_sio)
1018
1018
        self.addCleanup(tree.unlock)
1019
1019
 
1020
1020
        tree.add([''], ['TREE_ROOT'])
1021
 
        tree.commit('One', rev_id='rev1',
 
1021
        tree.commit('One', rev_id=b'rev1',
1022
1022
                    revprops={'a':'4', 'b':'3', 'c':'2', 'd':'1'})
1023
1023
        self.b1 = tree.branch
1024
1024
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1041
1041
        # whitespace.
1042
1042
        # However, Testaments assert than they are str(), and thus should not
1043
1043
        # be Unicode.
1044
 
        tree.commit('One', rev_id='rev1',
 
1044
        tree.commit('One', rev_id=b'rev1',
1045
1045
                    revprops={'omega':u'\u03a9', 'alpha':u'\u03b1'})
1046
1046
        self.b1 = tree.branch
1047
1047
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1072
1072
 
1073
1073
    def test_across_serializers(self):
1074
1074
        tree = self.make_simple_tree('knit')
1075
 
        tree.commit('hello', rev_id='rev1')
1076
 
        tree.commit('hello', rev_id='rev2')
 
1075
        tree.commit('hello', rev_id=b'rev1')
 
1076
        tree.commit('hello', rev_id=b'rev2')
1077
1077
        bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1078
1078
        repo = self.make_repository('repo', format='dirstate-with-subtree')
1079
1079
        bundle.install_revisions(repo)
1083
1083
 
1084
1084
    def make_repo_with_installed_revisions(self):
1085
1085
        tree = self.make_simple_tree('knit')
1086
 
        tree.commit('hello', rev_id='rev1')
1087
 
        tree.commit('hello', rev_id='rev2')
 
1086
        tree.commit('hello', rev_id=b'rev1')
 
1087
        tree.commit('hello', rev_id=b'rev2')
1088
1088
        bundle = read_bundle(self.create_bundle_text('null:', 'rev2')[0])
1089
1089
        repo = self.make_repository('repo', format='dirstate-with-subtree')
1090
1090
        bundle.install_revisions(repo)
1109
1109
 
1110
1110
    def test_across_models_incompatible(self):
1111
1111
        tree = self.make_simple_tree('dirstate-with-subtree')
1112
 
        tree.commit('hello', rev_id='rev1')
1113
 
        tree.commit('hello', rev_id='rev2')
 
1112
        tree.commit('hello', rev_id=b'rev1')
 
1113
        tree.commit('hello', rev_id=b'rev2')
1114
1114
        try:
1115
1115
            bundle = read_bundle(self.create_bundle_text('null:', 'rev1')[0])
1116
1116
        except errors.IncompatibleBundleFormat:
1124
1124
 
1125
1125
    def test_get_merge_request(self):
1126
1126
        tree = self.make_simple_tree()
1127
 
        tree.commit('hello', rev_id='rev1')
1128
 
        tree.commit('hello', rev_id='rev2')
 
1127
        tree.commit('hello', rev_id=b'rev1')
 
1128
        tree.commit('hello', rev_id=b'rev2')
1129
1129
        bundle = read_bundle(self.create_bundle_text('null:', 'rev1')[0])
1130
1130
        result = bundle.get_merge_request(tree.branch.repository)
1131
1131
        self.assertEqual((None, 'rev1', 'inapplicable'), result)
1137
1137
        subtree = self.make_branch_and_tree('tree/subtree',
1138
1138
                                            format='dirstate-with-subtree')
1139
1139
        tree.add('subtree')
1140
 
        tree.commit('hello', rev_id='rev1')
 
1140
        tree.commit('hello', rev_id=b'rev1')
1141
1141
        try:
1142
1142
            bundle = read_bundle(self.create_bundle_text('null:', 'rev1')[0])
1143
1143
        except errors.IncompatibleBundleFormat:
1154
1154
        self.tree1 = self.make_branch_and_tree('tree')
1155
1155
        self.b1 = self.tree1.branch
1156
1156
        try:
1157
 
            self.tree1.commit('Revision/id/with/slashes', rev_id='rev/id')
 
1157
            self.tree1.commit('Revision/id/with/slashes', rev_id=b'rev/id')
1158
1158
        except ValueError:
1159
1159
            raise tests.TestSkipped(
1160
1160
                "Repository doesn't support revision ids with slashes")
1165
1165
        self.tree1 = self.make_branch_and_tree('tree')
1166
1166
        self.b1 = self.tree1.branch
1167
1167
        # rev1 is not present in bundle, done by fetch
1168
 
        self.build_tree_contents([('tree/file2', 'contents1')])
1169
 
        self.tree1.add('file2', 'file2-id')
1170
 
        self.tree1.commit('rev1', rev_id='reva')
1171
 
        self.build_tree_contents([('tree/file3', 'contents2')])
 
1168
        self.build_tree_contents([('tree/file2', b'contents1')])
 
1169
        self.tree1.add('file2', b'file2-id')
 
1170
        self.tree1.commit('rev1', rev_id=b'reva')
 
1171
        self.build_tree_contents([('tree/file3', b'contents2')])
1172
1172
        # rev2 is present in bundle, and done by fetch
1173
1173
        # having file1 in the bunle causes file1's versionedfile to be opened.
1174
 
        self.tree1.add('file3', 'file3-id')
 
1174
        self.tree1.add('file3', b'file3-id')
1175
1175
        self.tree1.commit('rev2')
1176
1176
        # Updating file2 should not cause an attempt to add to file1's vf
1177
1177
        target = self.tree1.controldir.sprout('target').open_workingtree()
1178
 
        self.build_tree_contents([('tree/file2', 'contents3')])
1179
 
        self.tree1.commit('rev3', rev_id='rev3')
 
1178
        self.build_tree_contents([('tree/file2', b'contents3')])
 
1179
        self.tree1.commit('rev3', rev_id=b'rev3')
1180
1180
        bundle = self.get_valid_bundle('reva', 'rev3')
1181
1181
        if getattr(bundle, 'get_bundle_reader', None) is None:
1182
1182
            raise tests.TestSkipped('Bundle format cannot provide reader')
1183
1183
        # be sure that file1 comes before file2
1184
1184
        for b, m, k, r, f in bundle.get_bundle_reader().iter_records():
1185
 
            if f == 'file3-id':
 
1185
            if f == b'file3-id':
1186
1186
                break
1187
 
            self.assertNotEqual(f, 'file2-id')
 
1187
            self.assertNotEqual(f, b'file2-id')
1188
1188
        bundle.install_revisions(target.branch.repository)
1189
1189
 
1190
1190
 
1198
1198
        tree.lock_write()
1199
1199
        self.addCleanup(tree.unlock)
1200
1200
        tree.add([''], ['TREE_ROOT'])
1201
 
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id='rev1')
 
1201
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id=b'rev1')
1202
1202
        self.b1 = tree.branch
1203
1203
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1204
1204
        self.assertContainsRe(bundle_sio.getvalue(),
1230
1230
        tree.lock_write()
1231
1231
        self.addCleanup(tree.unlock)
1232
1232
        tree.add([''], ['TREE_ROOT'])
1233
 
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id='rev1')
 
1233
        tree.commit('One', revprops={'one':'two', 'empty':''}, rev_id=b'rev1')
1234
1234
        self.b1 = tree.branch
1235
1235
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1236
1236
        txt = bundle_sio.getvalue()
1258
1258
        self.addCleanup(tree.unlock)
1259
1259
 
1260
1260
        tree.add([''], ['TREE_ROOT'])
1261
 
        tree.commit('One', rev_id='rev1',
 
1261
        tree.commit('One', rev_id=b'rev1',
1262
1262
                    revprops={'a':'4', 'b':'3', 'c':'2', 'd':'1'})
1263
1263
        self.b1 = tree.branch
1264
1264
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1289
1289
        # whitespace.
1290
1290
        # However, Testaments assert than they are str(), and thus should not
1291
1291
        # be Unicode.
1292
 
        tree.commit('One', rev_id='rev1',
 
1292
        tree.commit('One', rev_id=b'rev1',
1293
1293
                    revprops={'omega':u'\u03a9', 'alpha':u'\u03b1'})
1294
1294
        self.b1 = tree.branch
1295
1295
        bundle_sio, revision_ids = self.create_bundle_text('null:', 'rev1')
1403
1403
 
1404
1404
    def test_creation(self):
1405
1405
        tree = self.make_branch_and_tree('tree')
1406
 
        self.build_tree_contents([('tree/file', 'contents1\nstatic\n')])
 
1406
        self.build_tree_contents([('tree/file', b'contents1\nstatic\n')])
1407
1407
        tree.add('file', 'fileid-2')
1408
 
        tree.commit('added file', rev_id='rev1')
1409
 
        self.build_tree_contents([('tree/file', 'contents2\nstatic\n')])
1410
 
        tree.commit('changed file', rev_id='rev2')
 
1408
        tree.commit('added file', rev_id=b'rev1')
 
1409
        self.build_tree_contents([('tree/file', b'contents2\nstatic\n')])
 
1410
        tree.commit('changed file', rev_id=b'rev2')
1411
1411
        s = BytesIO()
1412
1412
        serializer = BundleSerializerV4('1.0')
1413
1413
        serializer.write(tree.branch.repository, ['rev1', 'rev2'], {}, s)
1449
1449
        oldstrategy = breezy.gpg.GPGStrategy
1450
1450
        branch = tree_a.branch
1451
1451
        repo_a = branch.repository
1452
 
        tree_a.commit("base", allow_pointless=True, rev_id='A')
 
1452
        tree_a.commit("base", allow_pointless=True, rev_id=b'A')
1453
1453
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
1454
1454
        try:
1455
1455
            from ..testament import Testament
1458
1458
            new_config = test_commit.MustSignConfig()
1459
1459
            commit.Commit(config_stack=new_config).commit(message="base",
1460
1460
                                                    allow_pointless=True,
1461
 
                                                    rev_id='B',
 
1461
                                                    rev_id=b'B',
1462
1462
                                                    working_tree=tree_a)
1463
1463
            def sign(text):
1464
1464
                return breezy.gpg.LoopbackGPGStrategy(None).sign(text)
1681
1681
 
1682
1682
        self.build_tree(['b1/one'])
1683
1683
        wt.add('one')
1684
 
        wt.commit('add one', rev_id='a@cset-0-1')
 
1684
        wt.commit('add one', rev_id=b'a@cset-0-1')
1685
1685
        self.build_tree(['b1/two'])
1686
1686
        wt.add('two')
1687
 
        wt.commit('add two', rev_id='a@cset-0-2',
 
1687
        wt.commit('add two', rev_id=b'a@cset-0-2',
1688
1688
                  revprops={'branch-nick':'test'})
1689
1689
 
1690
1690
        bundle_txt = BytesIO()