/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_diff.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:
355
355
        self.wt = self.make_branch_and_tree('.')
356
356
        self.b = self.wt.branch
357
357
        self.build_tree_contents([
358
 
            ('file1', b'file1 contents at rev 1\n'),
359
 
            ('file2', b'file2 contents at rev 1\n')
 
358
            ('file1', 'file1 contents at rev 1\n'),
 
359
            ('file2', 'file2 contents at rev 1\n')
360
360
            ])
361
361
        self.wt.add(['file1', 'file2'])
362
362
        self.wt.commit(
363
363
            message='Revision 1',
364
364
            timestamp=1143849600, # 2006-04-01 00:00:00 UTC
365
365
            timezone=0,
366
 
            rev_id=b'rev-1')
367
 
        self.build_tree_contents([('file1', b'file1 contents at rev 2\n')])
 
366
            rev_id='rev-1')
 
367
        self.build_tree_contents([('file1', 'file1 contents at rev 2\n')])
368
368
        self.wt.commit(
369
369
            message='Revision 2',
370
370
            timestamp=1143936000, # 2006-04-02 00:00:00 UTC
371
371
            timezone=28800,
372
 
            rev_id=b'rev-2')
373
 
        self.build_tree_contents([('file2', b'file2 contents at rev 3\n')])
 
372
            rev_id='rev-2')
 
373
        self.build_tree_contents([('file2', 'file2 contents at rev 3\n')])
374
374
        self.wt.commit(
375
375
            message='Revision 3',
376
376
            timestamp=1144022400, # 2006-04-03 00:00:00 UTC
377
377
            timezone=-3600,
378
 
            rev_id=b'rev-3')
 
378
            rev_id='rev-3')
379
379
        self.wt.remove(['file2'])
380
380
        self.wt.commit(
381
381
            message='Revision 4',
382
382
            timestamp=1144108800, # 2006-04-04 00:00:00 UTC
383
383
            timezone=0,
384
 
            rev_id=b'rev-4')
 
384
            rev_id='rev-4')
385
385
        self.build_tree_contents([
386
 
            ('file1', b'file1 contents in working tree\n')
 
386
            ('file1', 'file1 contents in working tree\n')
387
387
            ])
388
388
        # set the date stamps for files in the working tree to known values
389
389
        os.utime('file1', (1144195200, 1144195200)) # 2006-04-05 00:00:00 UTC
483
483
    def test_modified_file(self):
484
484
        """Test when a file is modified."""
485
485
        tree = self.make_branch_and_tree('tree')
486
 
        self.build_tree_contents([('tree/file', b'contents\n')])
487
 
        tree.add(['file'], [b'file-id'])
488
 
        tree.commit('one', rev_id=b'rev-1')
 
486
        self.build_tree_contents([('tree/file', 'contents\n')])
 
487
        tree.add(['file'], ['file-id'])
 
488
        tree.commit('one', rev_id='rev-1')
489
489
 
490
 
        self.build_tree_contents([('tree/file', b'new contents\n')])
 
490
        self.build_tree_contents([('tree/file', 'new contents\n')])
491
491
        d = get_diff_as_string(tree.basis_tree(), tree)
492
492
        self.assertContainsRe(d, "=== modified file 'file'\n")
493
493
        self.assertContainsRe(d, '--- old/file\t')
499
499
        """Test when a file is modified in a renamed directory."""
500
500
        tree = self.make_branch_and_tree('tree')
501
501
        self.build_tree(['tree/dir/'])
502
 
        self.build_tree_contents([('tree/dir/file', b'contents\n')])
503
 
        tree.add(['dir', 'dir/file'], [b'dir-id', b'file-id'])
504
 
        tree.commit('one', rev_id=b'rev-1')
 
502
        self.build_tree_contents([('tree/dir/file', 'contents\n')])
 
503
        tree.add(['dir', 'dir/file'], ['dir-id', 'file-id'])
 
504
        tree.commit('one', rev_id='rev-1')
505
505
 
506
506
        tree.rename_one('dir', 'other')
507
 
        self.build_tree_contents([('tree/other/file', b'new contents\n')])
 
507
        self.build_tree_contents([('tree/other/file', 'new contents\n')])
508
508
        d = get_diff_as_string(tree.basis_tree(), tree)
509
509
        self.assertContainsRe(d, "=== renamed directory 'dir' => 'other'\n")
510
510
        self.assertContainsRe(d, "=== modified file 'other/file'\n")
519
519
        """Test when only a directory is only renamed."""
520
520
        tree = self.make_branch_and_tree('tree')
521
521
        self.build_tree(['tree/dir/'])
522
 
        self.build_tree_contents([('tree/dir/file', b'contents\n')])
523
 
        tree.add(['dir', 'dir/file'], [b'dir-id', b'file-id'])
524
 
        tree.commit('one', rev_id=b'rev-1')
 
522
        self.build_tree_contents([('tree/dir/file', 'contents\n')])
 
523
        tree.add(['dir', 'dir/file'], ['dir-id', 'file-id'])
 
524
        tree.commit('one', rev_id='rev-1')
525
525
 
526
526
        tree.rename_one('dir', 'newdir')
527
527
        d = get_diff_as_string(tree.basis_tree(), tree)
532
532
    def test_renamed_file(self):
533
533
        """Test when a file is only renamed."""
534
534
        tree = self.make_branch_and_tree('tree')
535
 
        self.build_tree_contents([('tree/file', b'contents\n')])
536
 
        tree.add(['file'], [b'file-id'])
537
 
        tree.commit('one', rev_id=b'rev-1')
 
535
        self.build_tree_contents([('tree/file', 'contents\n')])
 
536
        tree.add(['file'], ['file-id'])
 
537
        tree.commit('one', rev_id='rev-1')
538
538
 
539
539
        tree.rename_one('file', 'newname')
540
540
        d = get_diff_as_string(tree.basis_tree(), tree)
546
546
    def test_renamed_and_modified_file(self):
547
547
        """Test when a file is only renamed."""
548
548
        tree = self.make_branch_and_tree('tree')
549
 
        self.build_tree_contents([('tree/file', b'contents\n')])
550
 
        tree.add(['file'], [b'file-id'])
551
 
        tree.commit('one', rev_id=b'rev-1')
 
549
        self.build_tree_contents([('tree/file', 'contents\n')])
 
550
        tree.add(['file'], ['file-id'])
 
551
        tree.commit('one', rev_id='rev-1')
552
552
 
553
553
        tree.rename_one('file', 'newname')
554
 
        self.build_tree_contents([('tree/newname', b'new contents\n')])
 
554
        self.build_tree_contents([('tree/newname', 'new contents\n')])
555
555
        d = get_diff_as_string(tree.basis_tree(), tree)
556
556
        self.assertContainsRe(d, "=== renamed file 'file' => 'newname'\n")
557
557
        self.assertContainsRe(d, '--- old/file\t')
571
571
        tt.new_file('e', tt.root, 'contents\n', 'control-e-id', True)
572
572
        tt.new_file('f', tt.root, 'contents\n', 'control-f-id', False)
573
573
        tt.apply()
574
 
        tree.commit('one', rev_id=b'rev-1')
 
574
        tree.commit('one', rev_id='rev-1')
575
575
 
576
576
        tt = transform.TreeTransform(tree)
577
577
        tt.set_executability(False, tt.trans_id_file_id('a-id'))
609
609
            [('tree/' + alpha, chr(0)),
610
610
             ('tree/' + omega,
611
611
              ('The %s and the %s\n' % (alpha_utf8, omega_utf8)))])
612
 
        tree.add([alpha], [b'file-id'])
613
 
        tree.add([omega], [b'file-id-2'])
 
612
        tree.add([alpha], ['file-id'])
 
613
        tree.add([omega], ['file-id-2'])
614
614
        diff_content = StubO()
615
615
        diff.show_diff_trees(tree.basis_tree(), tree, diff_content)
616
616
        diff_content.check_types(self, bytes)
630
630
        autf8, outf8 = alpha.encode('utf8'), omega.encode('utf8')
631
631
 
632
632
        tree = self.make_branch_and_tree('tree')
633
 
        self.build_tree_contents([('tree/ren_'+alpha, b'contents\n')])
634
 
        tree.add(['ren_'+alpha], [b'file-id-2'])
635
 
        self.build_tree_contents([('tree/del_'+alpha, b'contents\n')])
636
 
        tree.add(['del_'+alpha], [b'file-id-3'])
637
 
        self.build_tree_contents([('tree/mod_'+alpha, b'contents\n')])
638
 
        tree.add(['mod_'+alpha], [b'file-id-4'])
 
633
        self.build_tree_contents([('tree/ren_'+alpha, 'contents\n')])
 
634
        tree.add(['ren_'+alpha], ['file-id-2'])
 
635
        self.build_tree_contents([('tree/del_'+alpha, 'contents\n')])
 
636
        tree.add(['del_'+alpha], ['file-id-3'])
 
637
        self.build_tree_contents([('tree/mod_'+alpha, 'contents\n')])
 
638
        tree.add(['mod_'+alpha], ['file-id-4'])
639
639
 
640
 
        tree.commit('one', rev_id=b'rev-1')
 
640
        tree.commit('one', rev_id='rev-1')
641
641
 
642
642
        tree.rename_one('ren_'+alpha, 'ren_'+omega)
643
643
        tree.remove('del_'+alpha)
644
 
        self.build_tree_contents([('tree/add_'+alpha, b'contents\n')])
645
 
        tree.add(['add_'+alpha], [b'file-id'])
646
 
        self.build_tree_contents([('tree/mod_'+alpha, b'contents_mod\n')])
 
644
        self.build_tree_contents([('tree/add_'+alpha, 'contents\n')])
 
645
        tree.add(['add_'+alpha], ['file-id'])
 
646
        self.build_tree_contents([('tree/mod_'+alpha, 'contents_mod\n')])
647
647
 
648
648
        d = get_diff_as_string(tree.basis_tree(), tree)
649
649
        self.assertContainsRe(d,
665
665
 
666
666
        tree = self.make_branch_and_tree('.')
667
667
        self.build_tree_contents([
668
 
            (test_txt, b'foo\n'),
669
 
            (u1234, b'foo\n'),
 
668
            (test_txt, 'foo\n'),
 
669
            (u1234, 'foo\n'),
670
670
            (directory, None),
671
671
            ])
672
672
        tree.add([test_txt, u1234, directory])
719
719
 
720
720
    def test_diff_text(self):
721
721
        self.build_tree_contents([('old-tree/olddir/',),
722
 
                                  ('old-tree/olddir/oldfile', b'old\n')])
 
722
                                  ('old-tree/olddir/oldfile', 'old\n')])
723
723
        self.old_tree.add('olddir')
724
 
        self.old_tree.add('olddir/oldfile', b'file-id')
 
724
        self.old_tree.add('olddir/oldfile', 'file-id')
725
725
        self.build_tree_contents([('new-tree/newdir/',),
726
 
                                  ('new-tree/newdir/newfile', b'new\n')])
 
726
                                  ('new-tree/newdir/newfile', 'new\n')])
727
727
        self.new_tree.add('newdir')
728
 
        self.new_tree.add('newdir/newfile', b'file-id')
 
728
        self.new_tree.add('newdir/newfile', 'file-id')
729
729
        differ = diff.DiffText(self.old_tree, self.new_tree, BytesIO())
730
730
        differ.diff_text('olddir/oldfile', None, 'old label',
731
 
                         'new label', b'file-id', None)
 
731
                         'new label', 'file-id', None)
732
732
        self.assertEqual(
733
733
            '--- old label\n+++ new label\n@@ -1,1 +0,0 @@\n-old\n\n',
734
734
            differ.to_file.getvalue())
735
735
        differ.to_file.seek(0)
736
736
        differ.diff_text(None, 'newdir/newfile',
737
 
                         'old label', 'new label', None, b'file-id')
 
737
                         'old label', 'new label', None, 'file-id')
738
738
        self.assertEqual(
739
739
            '--- old label\n+++ new label\n@@ -0,0 +1,1 @@\n+new\n\n',
740
740
            differ.to_file.getvalue())
741
741
        differ.to_file.seek(0)
742
742
        differ.diff_text('olddir/oldfile', 'newdir/newfile',
743
 
                         'old label', 'new label', b'file-id', b'file-id')
 
743
                         'old label', 'new label', 'file-id', 'file-id')
744
744
        self.assertEqual(
745
745
            '--- old label\n+++ new label\n@@ -1,1 +1,1 @@\n-old\n+new\n\n',
746
746
            differ.to_file.getvalue())
747
747
 
748
748
    def test_diff_deletion(self):
749
 
        self.build_tree_contents([('old-tree/file', b'contents'),
750
 
                                  ('new-tree/file', b'contents')])
751
 
        self.old_tree.add('file', b'file-id')
752
 
        self.new_tree.add('file', b'file-id')
 
749
        self.build_tree_contents([('old-tree/file', 'contents'),
 
750
                                  ('new-tree/file', 'contents')])
 
751
        self.old_tree.add('file', 'file-id')
 
752
        self.new_tree.add('file', 'file-id')
753
753
        os.unlink('new-tree/file')
754
754
        self.differ.show_diff(None)
755
755
        self.assertContainsRe(self.differ.to_file.getvalue(), '-contents')
756
756
 
757
757
    def test_diff_creation(self):
758
 
        self.build_tree_contents([('old-tree/file', b'contents'),
759
 
                                  ('new-tree/file', b'contents')])
760
 
        self.old_tree.add('file', b'file-id')
761
 
        self.new_tree.add('file', b'file-id')
 
758
        self.build_tree_contents([('old-tree/file', 'contents'),
 
759
                                  ('new-tree/file', 'contents')])
 
760
        self.old_tree.add('file', 'file-id')
 
761
        self.new_tree.add('file', 'file-id')
762
762
        os.unlink('old-tree/file')
763
763
        self.differ.show_diff(None)
764
764
        self.assertContainsRe(self.differ.to_file.getvalue(), r'\+contents')
781
781
 
782
782
    def test_diff(self):
783
783
        self.build_tree_contents([('old-tree/olddir/',),
784
 
                                  ('old-tree/olddir/oldfile', b'old\n')])
 
784
                                  ('old-tree/olddir/oldfile', 'old\n')])
785
785
        self.old_tree.add('olddir')
786
 
        self.old_tree.add('olddir/oldfile', b'file-id')
 
786
        self.old_tree.add('olddir/oldfile', 'file-id')
787
787
        self.build_tree_contents([('new-tree/newdir/',),
788
 
                                  ('new-tree/newdir/newfile', b'new\n')])
 
788
                                  ('new-tree/newdir/newfile', 'new\n')])
789
789
        self.new_tree.add('newdir')
790
 
        self.new_tree.add('newdir/newfile', b'file-id')
 
790
        self.new_tree.add('newdir/newfile', 'file-id')
791
791
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
792
792
        self.assertContainsRe(
793
793
            self.differ.to_file.getvalue(),
797
797
    def test_diff_kind_change(self):
798
798
        self.requireFeature(features.SymlinkFeature)
799
799
        self.build_tree_contents([('old-tree/olddir/',),
800
 
                                  ('old-tree/olddir/oldfile', b'old\n')])
 
800
                                  ('old-tree/olddir/oldfile', 'old\n')])
801
801
        self.old_tree.add('olddir')
802
 
        self.old_tree.add('olddir/oldfile', b'file-id')
 
802
        self.old_tree.add('olddir/oldfile', 'file-id')
803
803
        self.build_tree(['new-tree/newdir/'])
804
804
        os.symlink('new', 'new-tree/newdir/newfile')
805
805
        self.new_tree.add('newdir')
806
 
        self.new_tree.add('newdir/newfile', b'file-id')
 
806
        self.new_tree.add('newdir/newfile', 'file-id')
807
807
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
808
808
        self.assertContainsRe(
809
809
            self.differ.to_file.getvalue(),
814
814
 
815
815
    def test_diff_directory(self):
816
816
        self.build_tree(['new-tree/new-dir/'])
817
 
        self.new_tree.add('new-dir', b'new-dir-id')
818
 
        self.differ.diff(b'new-dir-id', None, 'new-dir')
 
817
        self.new_tree.add('new-dir', 'new-dir-id')
 
818
        self.differ.diff('new-dir-id', None, 'new-dir')
819
819
        self.assertEqual(self.differ.to_file.getvalue(), '')
820
820
 
821
821
    def create_old_new(self):
822
822
        self.build_tree_contents([('old-tree/olddir/',),
823
 
                                  ('old-tree/olddir/oldfile', b'old\n')])
 
823
                                  ('old-tree/olddir/oldfile', 'old\n')])
824
824
        self.old_tree.add('olddir')
825
 
        self.old_tree.add('olddir/oldfile', b'file-id')
 
825
        self.old_tree.add('olddir/oldfile', 'file-id')
826
826
        self.build_tree_contents([('new-tree/newdir/',),
827
 
                                  ('new-tree/newdir/newfile', b'new\n')])
 
827
                                  ('new-tree/newdir/newfile', 'new\n')])
828
828
        self.new_tree.add('newdir')
829
 
        self.new_tree.add('newdir/newfile', b'file-id')
 
829
        self.new_tree.add('newdir/newfile', 'file-id')
830
830
 
831
831
    def test_register_diff(self):
832
832
        self.create_old_new()
1445
1445
        self.requireFeature(features.AttribFeature)
1446
1446
        output = BytesIO()
1447
1447
        tree = self.make_branch_and_tree('tree')
1448
 
        self.build_tree_contents([('tree/file', b'content')])
1449
 
        tree.add('file', b'file-id')
 
1448
        self.build_tree_contents([('tree/file', 'content')])
 
1449
        tree.add('file', 'file-id')
1450
1450
        tree.commit('old tree')
1451
1451
        tree.lock_read()
1452
1452
        self.addCleanup(tree.unlock)
1456
1456
        diff_obj = diff.DiffFromTool(['python', '-c',
1457
1457
                                      'print "@old_path @new_path"'],
1458
1458
                                     basis_tree, tree, output)
1459
 
        diff_obj._prepare_files('file', 'file', file_id=b'file-id')
 
1459
        diff_obj._prepare_files('file', 'file', file_id='file-id')
1460
1460
        # The old content should be readonly
1461
1461
        self.assertReadableByAttrib(diff_obj._root, 'old\\file',
1462
1462
                                    r'R.*old\\file$')
1474
1474
    def test_prepare_files(self):
1475
1475
        output = BytesIO()
1476
1476
        tree = self.make_branch_and_tree('tree')
1477
 
        self.build_tree_contents([('tree/oldname', b'oldcontent')])
1478
 
        self.build_tree_contents([('tree/oldname2', b'oldcontent2')])
1479
 
        tree.add('oldname', b'file-id')
1480
 
        tree.add('oldname2', b'file2-id')
 
1477
        self.build_tree_contents([('tree/oldname', 'oldcontent')])
 
1478
        self.build_tree_contents([('tree/oldname2', 'oldcontent2')])
 
1479
        tree.add('oldname', 'file-id')
 
1480
        tree.add('oldname2', 'file2-id')
1481
1481
        # Earliest allowable date on FAT32 filesystems is 1980-01-01
1482
1482
        tree.commit('old tree', timestamp=315532800)
1483
1483
        tree.rename_one('oldname', 'newname')
1484
1484
        tree.rename_one('oldname2', 'newname2')
1485
 
        self.build_tree_contents([('tree/newname', b'newcontent')])
1486
 
        self.build_tree_contents([('tree/newname2', b'newcontent2')])
 
1485
        self.build_tree_contents([('tree/newname', 'newcontent')])
 
1486
        self.build_tree_contents([('tree/newname2', 'newcontent2')])
1487
1487
        old_tree = tree.basis_tree()
1488
1488
        old_tree.lock_read()
1489
1489
        self.addCleanup(old_tree.unlock)
1572
1572
 
1573
1573
    def test_with_rev_specs(self):
1574
1574
        tree = self.make_branch_and_tree('tree')
1575
 
        self.build_tree_contents([('tree/file', b'oldcontent')])
1576
 
        tree.add('file', b'file-id')
1577
 
        tree.commit('old tree', timestamp=0, rev_id=b"old-id")
1578
 
        self.build_tree_contents([('tree/file', b'newcontent')])
 
1575
        self.build_tree_contents([('tree/file', 'oldcontent')])
 
1576
        tree.add('file', 'file-id')
 
1577
        tree.commit('old tree', timestamp=0, rev_id="old-id")
 
1578
        self.build_tree_contents([('tree/file', 'newcontent')])
1579
1579
        tree.commit('new tree', timestamp=0, rev_id="new-id")
1580
1580
 
1581
1581
        revisions = [revisionspec.RevisionSpec.from_string('1'),