544
552
self.assertContainsRe(diff, "=== modified file 'mod_%s'"%autf8)
545
553
self.assertContainsRe(diff, "=== removed file 'del_%s'"%autf8)
556
class DiffWasIs(DiffPath):
558
def diff(self, file_id, old_path, new_path, old_kind, new_kind):
559
self.to_file.write('was: ')
560
self.to_file.write(self.old_tree.get_file(file_id).read())
561
self.to_file.write('is: ')
562
self.to_file.write(self.new_tree.get_file(file_id).read())
566
class TestDiffTree(TestCaseWithTransport):
569
TestCaseWithTransport.setUp(self)
570
self.old_tree = self.make_branch_and_tree('old-tree')
571
self.old_tree.lock_write()
572
self.addCleanup(self.old_tree.unlock)
573
self.new_tree = self.make_branch_and_tree('new-tree')
574
self.new_tree.lock_write()
575
self.addCleanup(self.new_tree.unlock)
576
self.differ = DiffTree(self.old_tree, self.new_tree, StringIO())
578
def test_diff_text(self):
579
self.build_tree_contents([('old-tree/olddir/',),
580
('old-tree/olddir/oldfile', 'old\n')])
581
self.old_tree.add('olddir')
582
self.old_tree.add('olddir/oldfile', 'file-id')
583
self.build_tree_contents([('new-tree/newdir/',),
584
('new-tree/newdir/newfile', 'new\n')])
585
self.new_tree.add('newdir')
586
self.new_tree.add('newdir/newfile', 'file-id')
587
differ = DiffText(self.old_tree, self.new_tree, StringIO())
588
differ.diff_text('file-id', None, 'old label', 'new label')
590
'--- old label\n+++ new label\n@@ -1,1 +0,0 @@\n-old\n\n',
591
differ.to_file.getvalue())
592
differ.to_file.seek(0)
593
differ.diff_text(None, 'file-id', 'old label', 'new label')
595
'--- old label\n+++ new label\n@@ -0,0 +1,1 @@\n+new\n\n',
596
differ.to_file.getvalue())
597
differ.to_file.seek(0)
598
differ.diff_text('file-id', 'file-id', 'old label', 'new label')
600
'--- old label\n+++ new label\n@@ -1,1 +1,1 @@\n-old\n+new\n\n',
601
differ.to_file.getvalue())
603
def test_diff_symlink(self):
604
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
605
differ.diff_symlink('old target', None)
606
self.assertEqual("=== target was 'old target'\n",
607
differ.to_file.getvalue())
609
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
610
differ.diff_symlink(None, 'new target')
611
self.assertEqual("=== target is 'new target'\n",
612
differ.to_file.getvalue())
614
differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
615
differ.diff_symlink('old target', 'new target')
616
self.assertEqual("=== target changed 'old target' => 'new target'\n",
617
differ.to_file.getvalue())
620
self.build_tree_contents([('old-tree/olddir/',),
621
('old-tree/olddir/oldfile', 'old\n')])
622
self.old_tree.add('olddir')
623
self.old_tree.add('olddir/oldfile', 'file-id')
624
self.build_tree_contents([('new-tree/newdir/',),
625
('new-tree/newdir/newfile', 'new\n')])
626
self.new_tree.add('newdir')
627
self.new_tree.add('newdir/newfile', 'file-id')
628
self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
629
self.assertContainsRe(
630
self.differ.to_file.getvalue(),
631
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
632
' \@\@\n-old\n\+new\n\n')
634
def test_diff_kind_change(self):
635
self.build_tree_contents([('old-tree/olddir/',),
636
('old-tree/olddir/oldfile', 'old\n')])
637
self.old_tree.add('olddir')
638
self.old_tree.add('olddir/oldfile', 'file-id')
639
self.build_tree(['new-tree/newdir/'])
640
os.symlink('new', 'new-tree/newdir/newfile')
641
self.new_tree.add('newdir')
642
self.new_tree.add('newdir/newfile', 'file-id')
643
self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
644
self.assertContainsRe(
645
self.differ.to_file.getvalue(),
646
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+0,0'
648
self.assertContainsRe(self.differ.to_file.getvalue(),
649
"=== target is 'new'\n")
651
def test_diff_directory(self):
652
self.build_tree(['new-tree/new-dir/'])
653
self.new_tree.add('new-dir', 'new-dir-id')
654
self.differ.diff('new-dir-id', None, 'new-dir')
655
self.assertEqual(self.differ.to_file.getvalue(), '')
657
def create_old_new(self):
658
self.build_tree_contents([('old-tree/olddir/',),
659
('old-tree/olddir/oldfile', 'old\n')])
660
self.old_tree.add('olddir')
661
self.old_tree.add('olddir/oldfile', 'file-id')
662
self.build_tree_contents([('new-tree/newdir/',),
663
('new-tree/newdir/newfile', 'new\n')])
664
self.new_tree.add('newdir')
665
self.new_tree.add('newdir/newfile', 'file-id')
667
def test_register_diff(self):
668
self.create_old_new()
669
old_diff_factories = DiffTree.diff_factories
670
DiffTree.diff_factories=old_diff_factories[:]
671
DiffTree.diff_factories.insert(0, DiffWasIs.from_diff_tree)
673
differ = DiffTree(self.old_tree, self.new_tree, StringIO())
675
DiffTree.diff_factories = old_diff_factories
676
differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
677
self.assertNotContainsRe(
678
differ.to_file.getvalue(),
679
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
680
' \@\@\n-old\n\+new\n\n')
681
self.assertContainsRe(differ.to_file.getvalue(),
682
'was: old\nis: new\n')
684
def test_extra_factories(self):
685
self.create_old_new()
686
differ = DiffTree(self.old_tree, self.new_tree, StringIO(),
687
extra_factories=[DiffWasIs.from_diff_tree])
688
differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
689
self.assertNotContainsRe(
690
differ.to_file.getvalue(),
691
r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
692
' \@\@\n-old\n\+new\n\n')
693
self.assertContainsRe(differ.to_file.getvalue(),
694
'was: old\nis: new\n')
547
697
class TestPatienceDiffLib(TestCase):