544
564
self.assertContainsRe(diff, "=== modified file 'mod_%s'"%autf8)
545
565
self.assertContainsRe(diff, "=== removed file 'del_%s'"%autf8)
568
class DiffWasIs(DiffPath):
570
def diff(self, file_id, old_path, new_path, old_kind, new_kind):
571
self.to_file.write('was: ')
572
self.to_file.write(self.old_tree.get_file(file_id).read())
573
self.to_file.write('is: ')
574
self.to_file.write(self.new_tree.get_file(file_id).read())
578
class TestDiffTree(TestCaseWithTransport):
581
TestCaseWithTransport.setUp(self)
582
self.old_tree = self.make_branch_and_tree('old-tree')
583
self.old_tree.lock_write()
584
self.addCleanup(self.old_tree.unlock)
585
self.new_tree = self.make_branch_and_tree('new-tree')
586
self.new_tree.lock_write()
587
self.addCleanup(self.new_tree.unlock)
588
self.differ = DiffTree(self.old_tree, self.new_tree, StringIO())
590
def test_diff_text(self):
591
self.build_tree_contents([('old-tree/olddir/',),
592
('old-tree/olddir/oldfile', 'old\n')])
593
self.old_tree.add('olddir')
594
self.old_tree.add('olddir/oldfile', 'file-id')
595
self.build_tree_contents([('new-tree/newdir/',),
596
('new-tree/newdir/newfile', 'new\n')])
597
self.new_tree.add('newdir')
598
self.new_tree.add('newdir/newfile', 'file-id')
599
differ = DiffText(self.old_tree, self.new_tree, StringIO())
600
differ.diff_text('file-id', None, 'old label', 'new label')
602
'--- old label\n+++ new label\n@@ -1,1 +0,0 @@\n-old\n\n',
603
differ.to_file.getvalue())
604
differ.to_file.seek(0)
605
differ.diff_text(None, 'file-id', 'old label', 'new label')
607
'--- old label\n+++ new label\n@@ -0,0 +1,1 @@\n+new\n\n',
608
differ.to_file.getvalue())
609
differ.to_file.seek(0)
610
differ.diff_text('file-id', 'file-id', 'old label', 'new label')
612
'--- old label\n+++ new label\n@@ -1,1 +1,1 @@\n-old\n+new\n\n',
613
differ.to_file.getvalue())
615
def test_diff_deletion(self):
616
self.build_tree_contents([('old-tree/file', 'contents'),
617
('new-tree/file', 'contents')])
618
self.old_tree.add('file', 'file-id')
619
self.new_tree.add('file', 'file-id')
620
os.unlink('new-tree/file')
621
self.differ.show_diff(None)
622
self.assertContainsRe(self.differ.to_file.getvalue(), '-contents')
624
def test_diff_creation(self):
625
self.build_tree_contents([('old-tree/file', 'contents'),
626
('new-tree/file', 'contents')])
627
self.old_tree.add('file', 'file-id')
628
self.new_tree.add('file', 'file-id')
629
os.unlink('old-tree/file')
630
self.differ.show_diff(None)
631
self.assertContainsRe(self.differ.to_file.getvalue(), '\+contents')
633
def test_diff_symlink(self):
634
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
635
differ.diff_symlink('old target', None)
636
self.assertEqual("=== target was 'old target'\n",
637
differ.to_file.getvalue())
639
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
640
differ.diff_symlink(None, 'new target')
641
self.assertEqual("=== target is 'new target'\n",
642
differ.to_file.getvalue())
644
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
645
differ.diff_symlink('old target', 'new target')
646
self.assertEqual("=== target changed 'old target' => 'new target'\n",
647
differ.to_file.getvalue())
650
self.build_tree_contents([('old-tree/olddir/',),
651
('old-tree/olddir/oldfile', 'old\n')])
652
self.old_tree.add('olddir')
653
self.old_tree.add('olddir/oldfile', 'file-id')
654
self.build_tree_contents([('new-tree/newdir/',),
655
('new-tree/newdir/newfile', 'new\n')])
656
self.new_tree.add('newdir')
657
self.new_tree.add('newdir/newfile', 'file-id')
658
self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
659
self.assertContainsRe(
660
self.differ.to_file.getvalue(),
661
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
662
' \@\@\n-old\n\+new\n\n')
664
def test_diff_kind_change(self):
665
self.build_tree_contents([('old-tree/olddir/',),
666
('old-tree/olddir/oldfile', 'old\n')])
667
self.old_tree.add('olddir')
668
self.old_tree.add('olddir/oldfile', 'file-id')
669
self.build_tree(['new-tree/newdir/'])
670
os.symlink('new', 'new-tree/newdir/newfile')
671
self.new_tree.add('newdir')
672
self.new_tree.add('newdir/newfile', 'file-id')
673
self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
674
self.assertContainsRe(
675
self.differ.to_file.getvalue(),
676
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+0,0'
678
self.assertContainsRe(self.differ.to_file.getvalue(),
679
"=== target is 'new'\n")
681
def test_diff_directory(self):
682
self.build_tree(['new-tree/new-dir/'])
683
self.new_tree.add('new-dir', 'new-dir-id')
684
self.differ.diff('new-dir-id', None, 'new-dir')
685
self.assertEqual(self.differ.to_file.getvalue(), '')
687
def create_old_new(self):
688
self.build_tree_contents([('old-tree/olddir/',),
689
('old-tree/olddir/oldfile', 'old\n')])
690
self.old_tree.add('olddir')
691
self.old_tree.add('olddir/oldfile', 'file-id')
692
self.build_tree_contents([('new-tree/newdir/',),
693
('new-tree/newdir/newfile', 'new\n')])
694
self.new_tree.add('newdir')
695
self.new_tree.add('newdir/newfile', 'file-id')
697
def test_register_diff(self):
698
self.create_old_new()
699
old_diff_factories = DiffTree.diff_factories
700
DiffTree.diff_factories=old_diff_factories[:]
701
DiffTree.diff_factories.insert(0, DiffWasIs.from_diff_tree)
703
differ = DiffTree(self.old_tree, self.new_tree, StringIO())
705
DiffTree.diff_factories = old_diff_factories
706
differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
707
self.assertNotContainsRe(
708
differ.to_file.getvalue(),
709
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
710
' \@\@\n-old\n\+new\n\n')
711
self.assertContainsRe(differ.to_file.getvalue(),
712
'was: old\nis: new\n')
714
def test_extra_factories(self):
715
self.create_old_new()
716
differ = DiffTree(self.old_tree, self.new_tree, StringIO(),
717
extra_factories=[DiffWasIs.from_diff_tree])
718
differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
719
self.assertNotContainsRe(
720
differ.to_file.getvalue(),
721
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
722
' \@\@\n-old\n\+new\n\n')
723
self.assertContainsRe(differ.to_file.getvalue(),
724
'was: old\nis: new\n')
547
727
class TestPatienceDiffLib(TestCase):