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

  • Committer: Jelmer Vernooij
  • Date: 2018-11-17 00:47:52 UTC
  • mfrom: (7182 work)
  • mto: This revision was merged to the branch mainline in revision 7305.
  • Revision ID: jelmer@jelmer.uk-20181117004752-6ywampe5pfywlby4
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
        stamp is incremented at each commit.
44
44
        """
45
45
        if getattr(self, 'timestamp', None) is None:
46
 
            self.timestamp = 1132617600 # Mon 2005-11-22 00:00:00 +0000
 
46
            self.timestamp = 1132617600  # Mon 2005-11-22 00:00:00 +0000
47
47
        else:
48
 
            self.timestamp += 1 # 1 second between each commit
 
48
            self.timestamp += 1  # 1 second between each commit
49
49
        kwargs.setdefault('timestamp', self.timestamp)
50
 
        kwargs.setdefault('timezone', 0) # UTC
 
50
        kwargs.setdefault('timezone', 0)  # UTC
51
51
        kwargs.setdefault('committer', 'Joe Foo <joe@foo.com>')
52
52
 
53
53
        return wt.commit(message, **kwargs)
222
222
 
223
223
    def test_commit_message_with_control_chars(self):
224
224
        wt = self.make_branch_and_tree('.')
225
 
        msg = u"All 8-bit chars: " +  ''.join([unichr(x) for x in range(256)])
 
225
        msg = u"All 8-bit chars: " + ''.join([unichr(x) for x in range(256)])
226
226
        msg = msg.replace(u'\r', u'\n')
227
227
        wt.commit(msg)
228
228
        lf = LogCatcher()
256
256
        wt.commit(message='add file1 and file2')
257
257
        self.run_bzr('branch parent child')
258
258
        os.unlink('child/file1')
259
 
        with open('child/file2', 'wb') as f: f.write(b'hello\n')
 
259
        with open('child/file2', 'wb') as f:
 
260
            f.write(b'hello\n')
260
261
        self.run_bzr(['commit', '-m', 'remove file1 and modify file2',
261
 
            'child'])
 
262
                      'child'])
262
263
        os.chdir('parent')
263
264
        self.run_bzr('merge ../child')
264
265
        wt.commit('merge child branch')
322
323
 
323
324
    def verify_revision_signature(self, revid, gpg_strategy):
324
325
        return (gpg.SIGNATURE_VALID,
325
 
            u'UTF8 Test \xa1\xb1\xc1\xd1\xe1\xf1 <jrandom@example.com>')
 
326
                u'UTF8 Test \xa1\xb1\xc1\xd1\xe1\xf1 <jrandom@example.com>')
326
327
 
327
328
    def test_format_signature_validity_utf(self):
328
329
        """Check that GPG signatures containing UTF-8 names are formatted
334
335
        # can't sign it without a heavier TestCase and LoopbackGPGStrategy
335
336
        # doesn't care anyways.
336
337
        self.overrideAttr(repo, 'verify_revision_signature',
337
 
                self.verify_revision_signature)
 
338
                          self.verify_revision_signature)
338
339
        out = log.format_signature_validity(revid, wt.branch)
339
340
        self.assertEqual(
340
 
u'valid signature from UTF8 Test \xa1\xb1\xc1\xd1\xe1\xf1 <jrandom@example.com>',
341
 
                out)
 
341
            u'valid signature from UTF8 Test \xa1\xb1\xc1\xd1\xe1\xf1 <jrandom@example.com>',
 
342
            out)
342
343
 
343
344
 
344
345
class TestShortLogFormatter(TestCaseForLogFormatter):
359
360
      simple log message
360
361
 
361
362
""",
362
 
            b, log.ShortLogFormatter)
 
363
                                   b, log.ShortLogFormatter)
363
364
 
364
365
    def test_short_log_with_merges(self):
365
366
        wt = self._prepare_tree_with_merges()
371
372
      rev-1
372
373
 
373
374
""",
374
 
            wt.branch, log.ShortLogFormatter)
 
375
                                   wt.branch, log.ShortLogFormatter)
375
376
 
376
377
    def test_short_log_with_merges_and_advice(self):
377
378
        wt = self._prepare_tree_with_merges()
384
385
 
385
386
Use --include-merged or -n0 to see merged revisions.
386
387
""",
387
 
            wt.branch, log.ShortLogFormatter,
388
 
            formatter_kwargs=dict(show_advice=True))
 
388
                                   wt.branch, log.ShortLogFormatter,
 
389
                                   formatter_kwargs=dict(show_advice=True))
389
390
 
390
391
    def test_short_log_with_merges_and_range(self):
391
392
        wt = self._prepare_tree_with_merges()
401
402
      rev-2
402
403
 
403
404
""",
404
 
            wt.branch, log.ShortLogFormatter,
405
 
            show_log_kwargs=dict(start_revision=2, end_revision=3))
 
405
                                   wt.branch, log.ShortLogFormatter,
 
406
                                   show_log_kwargs=dict(start_revision=2, end_revision=3))
406
407
 
407
408
    def test_short_log_with_tags(self):
408
409
        wt = self._prepare_tree_with_merges(with_tags=True)
417
418
      rev-1
418
419
 
419
420
""",
420
 
            wt.branch, log.ShortLogFormatter)
 
421
                                   wt.branch, log.ShortLogFormatter)
421
422
 
422
423
    def test_short_log_single_merge_revision(self):
423
424
        wt = self._prepare_tree_with_merges()
428
429
            rev-merged
429
430
 
430
431
""",
431
 
            wt.branch, log.ShortLogFormatter,
432
 
            show_log_kwargs=dict(start_revision=rev, end_revision=rev))
 
432
                                   wt.branch, log.ShortLogFormatter,
 
433
                                   show_log_kwargs=dict(start_revision=rev, end_revision=rev))
433
434
 
434
435
    def test_show_ids(self):
435
436
        wt = self.make_branch_and_tree('parent')
454
455
      first post
455
456
 
456
457
""",
457
 
            wt.branch, log.ShortLogFormatter,
458
 
            formatter_kwargs=dict(levels=0, show_ids=True))
 
458
                                   wt.branch, log.ShortLogFormatter,
 
459
                                   formatter_kwargs=dict(levels=0, show_ids=True))
459
460
 
460
461
 
461
462
class TestShortLogFormatterWithMergeRevisions(TestCaseForLogFormatter):
476
477
      rev-1
477
478
 
478
479
""",
479
 
            wt.branch, log.ShortLogFormatter,
480
 
            formatter_kwargs=dict(levels=0))
 
480
                                   wt.branch, log.ShortLogFormatter,
 
481
                                   formatter_kwargs=dict(levels=0))
481
482
 
482
483
    def test_short_merge_revs_log_single_merge_revision(self):
483
484
        wt = self._prepare_tree_with_merges()
488
489
            rev-merged
489
490
 
490
491
""",
491
 
            wt.branch, log.ShortLogFormatter,
492
 
            formatter_kwargs=dict(levels=0),
493
 
            show_log_kwargs=dict(start_revision=rev, end_revision=rev))
 
492
                                   wt.branch, log.ShortLogFormatter,
 
493
                                   formatter_kwargs=dict(levels=0),
 
494
                                   show_log_kwargs=dict(start_revision=rev, end_revision=rev))
494
495
 
495
496
 
496
497
class TestLongLogFormatter(TestCaseForLogFormatter):
512
513
added:
513
514
  a
514
515
''',
515
 
            wt.branch, log.LongLogFormatter,
516
 
            show_log_kwargs=dict(verbose=True))
 
516
                                   wt.branch, log.LongLogFormatter,
 
517
                                   show_log_kwargs=dict(verbose=True))
517
518
 
518
519
    def test_merges_are_indented_by_level(self):
519
520
        wt = self.make_branch_and_tree('parent')
520
521
        self.wt_commit(wt, 'first post')
521
522
        child_wt = wt.controldir.sprout('child').open_workingtree()
522
523
        self.wt_commit(child_wt, 'branch 1')
523
 
        smallerchild_wt = wt.controldir.sprout('smallerchild').open_workingtree()
 
524
        smallerchild_wt = wt.controldir.sprout(
 
525
            'smallerchild').open_workingtree()
524
526
        self.wt_commit(smallerchild_wt, 'branch 2')
525
527
        child_wt.merge_from_branch(smallerchild_wt.branch)
526
528
        self.wt_commit(child_wt, 'merge branch 2')
563
565
message:
564
566
  first post
565
567
""",
566
 
            wt.branch, log.LongLogFormatter,
567
 
            formatter_kwargs=dict(levels=0),
568
 
            show_log_kwargs=dict(verbose=True))
 
568
                                   wt.branch, log.LongLogFormatter,
 
569
                                   formatter_kwargs=dict(levels=0),
 
570
                                   show_log_kwargs=dict(verbose=True))
569
571
 
570
572
    def test_verbose_merge_revisions_contain_deltas(self):
571
573
        wt = self.make_branch_and_tree('parent')
612
614
  f1
613
615
  f2
614
616
""",
615
 
            wt.branch, log.LongLogFormatter,
616
 
            formatter_kwargs=dict(levels=0),
617
 
            show_log_kwargs=dict(verbose=True))
 
617
                                   wt.branch, log.LongLogFormatter,
 
618
                                   formatter_kwargs=dict(levels=0),
 
619
                                   show_log_kwargs=dict(verbose=True))
618
620
 
619
621
    def test_trailing_newlines(self):
620
622
        wt = self.make_branch_and_tree('.')
644
646
message:
645
647
  simple log message
646
648
""",
647
 
        b, log.LongLogFormatter)
 
649
                                   b, log.LongLogFormatter)
648
650
 
649
651
    def test_author_in_log(self):
650
652
        """Log includes the author name if it's set in
651
653
        the revision properties
652
654
        """
653
655
        wt = self.make_standard_commit('test_author_log',
654
 
            authors=['John Doe <jdoe@example.com>',
655
 
                     'Jane Rey <jrey@example.com>'])
 
656
                                       authors=['John Doe <jdoe@example.com>',
 
657
                                                'Jane Rey <jrey@example.com>'])
656
658
        self.assertFormatterResult(b"""\
657
659
------------------------------------------------------------
658
660
revno: 1
663
665
message:
664
666
  add a
665
667
""",
666
 
        wt.branch, log.LongLogFormatter)
 
668
                                   wt.branch, log.LongLogFormatter)
667
669
 
668
670
    def test_properties_in_log(self):
669
671
        """Log includes the custom properties returned by the registered
670
672
        handlers.
671
673
        """
672
674
        wt = self.make_standard_commit('test_properties_in_log')
 
675
 
673
676
        def trivial_custom_prop_handler(revision):
674
 
            return {'test_prop':'test_value'}
 
677
            return {'test_prop': 'test_value'}
675
678
 
676
679
        # Cleaned up in setUp()
677
680
        log.properties_handler_registry.register(
688
691
message:
689
692
  add a
690
693
""",
691
 
            wt.branch, log.LongLogFormatter)
 
694
                                   wt.branch, log.LongLogFormatter)
692
695
 
693
696
    def test_properties_in_short_log(self):
694
697
        """Log includes the custom properties returned by the registered
695
698
        handlers.
696
699
        """
697
700
        wt = self.make_standard_commit('test_properties_in_short_log')
 
701
 
698
702
        def trivial_custom_prop_handler(revision):
699
 
            return {'test_prop':'test_value'}
 
703
            return {'test_prop': 'test_value'}
700
704
 
701
705
        log.properties_handler_registry.register(
702
706
            'trivial_custom_prop_handler',
707
711
      add a
708
712
 
709
713
""",
710
 
            wt.branch, log.ShortLogFormatter)
 
714
                                   wt.branch, log.ShortLogFormatter)
711
715
 
712
716
    def test_error_in_properties_handler(self):
713
717
        """Log includes the custom properties returned by the registered
714
718
        handlers.
715
719
        """
716
720
        wt = self.make_standard_commit('error_in_properties_handler',
717
 
            revprops={u'first_prop':'first_value'})
 
721
                                       revprops={u'first_prop': 'first_value'})
718
722
        sio = self.make_utf8_encoded_stringio()
719
723
        formatter = log.LongLogFormatter(to_file=sio)
 
724
 
720
725
        def trivial_custom_prop_handler(revision):
721
726
            raise Exception("a test error")
722
727
 
727
732
 
728
733
    def test_properties_handler_bad_argument(self):
729
734
        wt = self.make_standard_commit('bad_argument',
730
 
              revprops={u'a_prop':'test_value'})
 
735
                                       revprops={u'a_prop': 'test_value'})
731
736
        sio = self.make_utf8_encoded_stringio()
732
737
        formatter = log.LongLogFormatter(to_file=sio)
 
738
 
733
739
        def bad_argument_prop_handler(revision):
734
 
            return {'custom_prop_name':revision.properties['a_prop']}
 
740
            return {'custom_prop_name': revision.properties['a_prop']}
735
741
 
736
742
        log.properties_handler_registry.register(
737
743
            'bad_argument_prop_handler',
783
789
message:
784
790
  first post
785
791
""",
786
 
            wt.branch, log.LongLogFormatter,
787
 
            formatter_kwargs=dict(levels=0, show_ids=True))
 
792
                                   wt.branch, log.LongLogFormatter,
 
793
                                   formatter_kwargs=dict(levels=0, show_ids=True))
788
794
 
789
795
 
790
796
class TestLongLogFormatterWithoutMergeRevisions(TestCaseForLogFormatter):
806
812
added:
807
813
  a
808
814
""",
809
 
            wt.branch, log.LongLogFormatter,
810
 
            formatter_kwargs=dict(levels=1),
811
 
            show_log_kwargs=dict(verbose=True))
 
815
                                   wt.branch, log.LongLogFormatter,
 
816
                                   formatter_kwargs=dict(levels=1),
 
817
                                   show_log_kwargs=dict(verbose=True))
812
818
 
813
819
    def test_long_verbose_contain_deltas(self):
814
820
        wt = self.make_branch_and_tree('parent')
844
850
  f1
845
851
  f2
846
852
""",
847
 
            wt.branch, log.LongLogFormatter,
848
 
            formatter_kwargs=dict(levels=1),
849
 
            show_log_kwargs=dict(verbose=True))
 
853
                                   wt.branch, log.LongLogFormatter,
 
854
                                   formatter_kwargs=dict(levels=1),
 
855
                                   show_log_kwargs=dict(verbose=True))
850
856
 
851
857
    def test_long_trailing_newlines(self):
852
858
        wt = self.make_branch_and_tree('.')
876
882
message:
877
883
  simple log message
878
884
""",
879
 
        b, log.LongLogFormatter,
880
 
        formatter_kwargs=dict(levels=1))
 
885
                                   b, log.LongLogFormatter,
 
886
                                   formatter_kwargs=dict(levels=1))
881
887
 
882
888
    def test_long_author_in_log(self):
883
889
        """Log includes the author name if it's set in
894
900
message:
895
901
  add a
896
902
""",
897
 
            wt.branch, log.LongLogFormatter,
898
 
            formatter_kwargs=dict(levels=1))
 
903
                                   wt.branch, log.LongLogFormatter,
 
904
                                   formatter_kwargs=dict(levels=1))
899
905
 
900
906
    def test_long_properties_in_log(self):
901
907
        """Log includes the custom properties returned by the registered
902
908
        handlers.
903
909
        """
904
910
        wt = self.make_standard_commit('test_properties_in_log')
 
911
 
905
912
        def trivial_custom_prop_handler(revision):
906
 
            return {'test_prop':'test_value'}
 
913
            return {'test_prop': 'test_value'}
907
914
 
908
915
        log.properties_handler_registry.register(
909
916
            'trivial_custom_prop_handler',
919
926
message:
920
927
  add a
921
928
""",
922
 
            wt.branch, log.LongLogFormatter,
923
 
            formatter_kwargs=dict(levels=1))
 
929
                                   wt.branch, log.LongLogFormatter,
 
930
                                   formatter_kwargs=dict(levels=1))
924
931
 
925
932
 
926
933
class TestLineLogFormatter(TestCaseForLogFormatter):
931
938
        bug #5162
932
939
        """
933
940
        wt = self.make_standard_commit('test-line-log',
934
 
                committer='Line-Log-Formatter Tester <test@line.log>',
935
 
                authors=[])
 
941
                                       committer='Line-Log-Formatter Tester <test@line.log>',
 
942
                                       authors=[])
936
943
        self.assertFormatterResult(b"""\
937
944
1: Line-Log-Formatte... 2005-11-22 add a
938
945
""",
939
 
            wt.branch, log.LineLogFormatter)
 
946
                                   wt.branch, log.LineLogFormatter)
940
947
 
941
948
    def test_trailing_newlines(self):
942
949
        wt = self.make_branch_and_tree('.')
946
953
2: Joe Foo 2005-11-22 multiline
947
954
1: Joe Foo 2005-11-22 simple log message
948
955
""",
949
 
            b, log.LineLogFormatter)
 
956
                                   b, log.LineLogFormatter)
950
957
 
951
958
    def test_line_log_single_merge_revision(self):
952
959
        wt = self._prepare_tree_with_merges()
955
962
        self.assertFormatterResult(b"""\
956
963
1.1.1: Joe Foo 2005-11-22 rev-merged
957
964
""",
958
 
            wt.branch, log.LineLogFormatter,
959
 
            show_log_kwargs=dict(start_revision=rev, end_revision=rev))
 
965
                                   wt.branch, log.LineLogFormatter,
 
966
                                   show_log_kwargs=dict(start_revision=rev, end_revision=rev))
960
967
 
961
968
    def test_line_log_with_tags(self):
962
969
        wt = self._prepare_tree_with_merges(with_tags=True)
965
972
2: Joe Foo 2005-11-22 [merge] {v0.2} rev-2
966
973
1: Joe Foo 2005-11-22 rev-1
967
974
""",
968
 
            wt.branch, log.LineLogFormatter)
 
975
                                   wt.branch, log.LineLogFormatter)
969
976
 
970
977
 
971
978
class TestLineLogFormatterWithMergeRevisions(TestCaseForLogFormatter):
976
983
        bug #5162
977
984
        """
978
985
        wt = self.make_standard_commit('test-line-log',
979
 
                committer='Line-Log-Formatter Tester <test@line.log>',
980
 
                authors=[])
 
986
                                       committer='Line-Log-Formatter Tester <test@line.log>',
 
987
                                       authors=[])
981
988
        self.assertFormatterResult(b"""\
982
989
1: Line-Log-Formatte... 2005-11-22 add a
983
990
""",
984
 
            wt.branch, log.LineLogFormatter)
 
991
                                   wt.branch, log.LineLogFormatter)
985
992
 
986
993
    def test_line_merge_revs_log_single_merge_revision(self):
987
994
        wt = self._prepare_tree_with_merges()
990
997
        self.assertFormatterResult(b"""\
991
998
1.1.1: Joe Foo 2005-11-22 rev-merged
992
999
""",
993
 
            wt.branch, log.LineLogFormatter,
994
 
            formatter_kwargs=dict(levels=0),
995
 
            show_log_kwargs=dict(start_revision=rev, end_revision=rev))
 
1000
                                   wt.branch, log.LineLogFormatter,
 
1001
                                   formatter_kwargs=dict(levels=0),
 
1002
                                   show_log_kwargs=dict(start_revision=rev, end_revision=rev))
996
1003
 
997
1004
    def test_line_merge_revs_log_with_merges(self):
998
1005
        wt = self._prepare_tree_with_merges()
1001
1008
  1.1.1: Joe Foo 2005-11-22 rev-merged
1002
1009
1: Joe Foo 2005-11-22 rev-1
1003
1010
""",
1004
 
            wt.branch, log.LineLogFormatter,
1005
 
            formatter_kwargs=dict(levels=0))
 
1011
                                   wt.branch, log.LineLogFormatter,
 
1012
                                   formatter_kwargs=dict(levels=0))
1006
1013
 
1007
1014
 
1008
1015
class TestGnuChangelogFormatter(TestCaseForLogFormatter):
1015
1022
\tadd a
1016
1023
 
1017
1024
''',
1018
 
            wt.branch, log.GnuChangelogLogFormatter)
 
1025
                                   wt.branch, log.GnuChangelogLogFormatter)
1019
1026
 
1020
1027
    def test_with_authors(self):
1021
1028
        wt = self.make_standard_commit('nicky',
1022
 
            authors=['Fooa Fooz <foo@example.com>',
1023
 
                     'Bari Baro <bar@example.com>'])
 
1029
                                       authors=['Fooa Fooz <foo@example.com>',
 
1030
                                                'Bari Baro <bar@example.com>'])
1024
1031
        self.assertFormatterResult(b'''\
1025
1032
2005-11-22  Fooa Fooz  <foo@example.com>
1026
1033
 
1027
1034
\tadd a
1028
1035
 
1029
1036
''',
1030
 
            wt.branch, log.GnuChangelogLogFormatter)
 
1037
                                   wt.branch, log.GnuChangelogLogFormatter)
1031
1038
 
1032
1039
    def test_verbose(self):
1033
1040
        wt = self.make_standard_commit('nicky')
1039
1046
\tadd a
1040
1047
 
1041
1048
''',
1042
 
            wt.branch, log.GnuChangelogLogFormatter,
1043
 
            show_log_kwargs=dict(verbose=True))
 
1049
                                   wt.branch, log.GnuChangelogLogFormatter,
 
1050
                                   show_log_kwargs=dict(verbose=True))
1044
1051
 
1045
1052
 
1046
1053
class TestShowChangedRevisions(tests.TestCaseWithTransport):
1114
1121
            Tests use (revno, depth) whil the API expects (revid, revno, depth).
1115
1122
            Since the revid is arbitrary, we just duplicate revno
1116
1123
            """
1117
 
            return [ (r, r, d) for r, d in l]
 
1124
            return [(r, r, d) for r, d in l]
1118
1125
        forward = complete_revisions(forward)
1119
 
        backward= complete_revisions(backward)
 
1126
        backward = complete_revisions(backward)
1120
1127
        self.assertEqual(forward, log.reverse_by_depth(backward))
1121
1128
 
1122
 
 
1123
1129
    def test_mainline_revisions(self):
1124
 
        self.assertReversed([( '1', 0), ('2', 0)],
 
1130
        self.assertReversed([('1', 0), ('2', 0)],
1125
1131
                            [('2', 0), ('1', 0)])
1126
1132
 
1127
1133
    def test_merged_revisions(self):
1128
 
        self.assertReversed([('1', 0), ('2', 0), ('2.2', 1), ('2.1', 1),],
1129
 
                            [('2', 0), ('2.1', 1), ('2.2', 1), ('1', 0),])
 
1134
        self.assertReversed([('1', 0), ('2', 0), ('2.2', 1), ('2.1', 1), ],
 
1135
                            [('2', 0), ('2.1', 1), ('2.2', 1), ('1', 0), ])
 
1136
 
1130
1137
    def test_shifted_merged_revisions(self):
1131
1138
        """Test irregular layout.
1132
1139
 
1133
1140
        Requesting revisions touching a file can produce "holes" in the depths.
1134
1141
        """
1135
 
        self.assertReversed([('1', 0), ('2', 0), ('1.1', 2), ('1.2', 2),],
1136
 
                            [('2', 0), ('1.2', 2), ('1.1', 2), ('1', 0),])
 
1142
        self.assertReversed([('1', 0), ('2', 0), ('1.1', 2), ('1.2', 2), ],
 
1143
                            [('2', 0), ('1.2', 2), ('1.1', 2), ('1', 0), ])
1137
1144
 
1138
1145
    def test_merged_without_child_revisions(self):
1139
1146
        """Test irregular layout.
1143
1150
        # When a revision of higher depth doesn't follow one of lower depth, we
1144
1151
        # assume a lower depth one is virtually there
1145
1152
        self.assertReversed([('1', 2), ('2', 2), ('3', 3), ('4', 4)],
1146
 
                            [('4', 4), ('3', 3), ('2', 2), ('1', 2),])
 
1153
                            [('4', 4), ('3', 3), ('2', 2), ('1', 2), ])
1147
1154
        # So we get the same order after reversing below even if the original
1148
1155
        # revisions are not in the same order.
1149
1156
        self.assertReversed([('1', 2), ('2', 2), ('3', 3), ('4', 4)],
1150
 
                            [('3', 3), ('4', 4), ('2', 2), ('1', 2),])
 
1157
                            [('3', 3), ('4', 4), ('2', 2), ('1', 2), ])
1151
1158
 
1152
1159
 
1153
1160
class TestHistoryChange(tests.TestCaseWithTransport):
1221
1228
        s = StringIO()
1222
1229
        log.show_branch_change(tree.branch, s, 3, b'3a')
1223
1230
        self.assertContainsRe(s.getvalue(),
1224
 
            '[*]{60}\nRemoved Revisions:\n(.|\n)*2a(.|\n)*3a(.|\n)*'
1225
 
            '[*]{60}\n\nAdded Revisions:\n(.|\n)*2b(.|\n)*3b')
 
1231
                              '[*]{60}\nRemoved Revisions:\n(.|\n)*2a(.|\n)*3a(.|\n)*'
 
1232
                              '[*]{60}\n\nAdded Revisions:\n(.|\n)*2b(.|\n)*3b')
1226
1233
 
1227
1234
    def test_show_branch_change_no_change(self):
1228
1235
        tree = self.setup_ab_tree()
1229
1236
        s = StringIO()
1230
1237
        log.show_branch_change(tree.branch, s, 3, b'3b')
1231
1238
        self.assertEqual(s.getvalue(),
1232
 
            'Nothing seems to have changed\n')
 
1239
                         'Nothing seems to have changed\n')
1233
1240
 
1234
1241
    def test_show_branch_change_no_old(self):
1235
1242
        tree = self.setup_ab_tree()
1255
1262
        self.addCleanup(tree.unlock)
1256
1263
        kwargs = {
1257
1264
            'committer': 'Joe Foo <joe@foo.com>',
1258
 
            'timestamp': 1132617600, # Mon 2005-11-22 00:00:00 +0000
1259
 
            'timezone': 0, # UTC
 
1265
            'timestamp': 1132617600,  # Mon 2005-11-22 00:00:00 +0000
 
1266
            'timezone': 0,  # UTC
1260
1267
        }
1261
1268
        tree.commit('commit 1a', rev_id=b'1a', **kwargs)
1262
1269
        tree.commit('commit 2a', rev_id=b'2a', **kwargs)
1269
1276
        tree.branch.set_last_revision_info(1, b'1a')
1270
1277
        kwargs = {
1271
1278
            'committer': 'Joe Foo <joe@foo.com>',
1272
 
            'timestamp': 1132617600, # Mon 2005-11-22 00:00:00 +0000
1273
 
            'timezone': 0, # UTC
 
1279
            'timestamp': 1132617600,  # Mon 2005-11-22 00:00:00 +0000
 
1280
            'timezone': 0,  # UTC
1274
1281
        }
1275
1282
        tree.commit('commit 2b', rev_id=b'2b', **kwargs)
1276
1283
        tree.commit('commit 3b', rev_id=b'3b', **kwargs)
1327
1334
message:
1328
1335
  commit 1a
1329
1336
""",
1330
 
            tree.branch, log.LongLogFormatter, show_log_kwargs={
1331
 
                'start_revision': start_rev, 'end_revision': end_rev
1332
 
            })
 
1337
                                   tree.branch, log.LongLogFormatter, show_log_kwargs={
 
1338
                                       'start_revision': start_rev, 'end_revision': end_rev
 
1339
                                       })
1333
1340
 
1334
1341
    def test_short_format(self):
1335
1342
        tree = self.setup_ab_tree()
1348
1355
      commit 1a
1349
1356
 
1350
1357
""",
1351
 
            tree.branch, log.ShortLogFormatter, show_log_kwargs={
1352
 
                'start_revision': start_rev, 'end_revision': end_rev
1353
 
            })
 
1358
                                   tree.branch, log.ShortLogFormatter, show_log_kwargs={
 
1359
                                       'start_revision': start_rev, 'end_revision': end_rev
 
1360
                                       })
1354
1361
 
1355
1362
    def test_line_format(self):
1356
1363
        tree = self.setup_ab_tree()
1361
1368
Joe Foo 2005-11-22 commit 2a
1362
1369
1: Joe Foo 2005-11-22 commit 1a
1363
1370
""",
1364
 
            tree.branch, log.LineLogFormatter, show_log_kwargs={
1365
 
                'start_revision': start_rev, 'end_revision': end_rev
1366
 
            })
 
1371
                                   tree.branch, log.LineLogFormatter, show_log_kwargs={
 
1372
                                       'start_revision': start_rev, 'end_revision': end_rev
 
1373
                                       })
1367
1374
 
1368
1375
 
1369
1376
class TestLogWithBugs(TestCaseForLogFormatter, TestLogMixin):
1388
1395
                                 'test://bug/2 fixed'})
1389
1396
        return tree
1390
1397
 
1391
 
 
1392
1398
    def test_long_bugs(self):
1393
1399
        tree = self.make_commits_with_bugs()
1394
1400
        self.assertFormatterResult(b"""\
1412
1418
message:
1413
1419
  simple log message
1414
1420
""",
1415
 
            tree.branch, log.LongLogFormatter)
 
1421
                                   tree.branch, log.LongLogFormatter)
1416
1422
 
1417
1423
    def test_short_bugs(self):
1418
1424
        tree = self.make_commits_with_bugs()
1428
1434
      simple log message
1429
1435
 
1430
1436
""",
1431
 
            tree.branch, log.ShortLogFormatter)
 
1437
                                   tree.branch, log.ShortLogFormatter)
1432
1438
 
1433
1439
    def test_wrong_bugs_property(self):
1434
1440
        tree = self.make_branch_and_tree(u'.')
1440
1446
      simple log message
1441
1447
 
1442
1448
""",
1443
 
            tree.branch, log.ShortLogFormatter)
 
1449
                                   tree.branch, log.ShortLogFormatter)
1444
1450
 
1445
1451
    def test_bugs_handler_present(self):
1446
1452
        self.properties_handler_registry.get('bugs_properties_handler')
1451
1457
    def setUp(self):
1452
1458
        super(TestLogForAuthors, self).setUp()
1453
1459
        self.wt = self.make_standard_commit('nicky',
1454
 
            authors=['John Doe <jdoe@example.com>',
1455
 
                     'Jane Rey <jrey@example.com>'])
 
1460
                                            authors=['John Doe <jdoe@example.com>',
 
1461
                                                     'Jane Rey <jrey@example.com>'])
1456
1462
 
1457
1463
    def assertFormatterResult(self, formatter, who, result):
1458
1464
        formatter_kwargs = dict()
1460
1466
            author_list_handler = log.author_list_registry.get(who)
1461
1467
            formatter_kwargs['author_list_handler'] = author_list_handler
1462
1468
        TestCaseForLogFormatter.assertFormatterResult(self, result,
1463
 
            self.wt.branch, formatter, formatter_kwargs=formatter_kwargs)
 
1469
                                                      self.wt.branch, formatter, formatter_kwargs=formatter_kwargs)
1464
1470
 
1465
1471
    def test_line_default(self):
1466
1472
        self.assertFormatterResult(log.LineLogFormatter, None, b"""\
1482
1488
1: John Doe, Jane Rey 2005-11-22 add a
1483
1489
""")
1484
1490
 
1485
 
 
1486
1491
    def test_short_default(self):
1487
1492
        self.assertFormatterResult(log.ShortLogFormatter, None, b"""\
1488
1493
    1 John Doe\t2005-11-22
1614
1619
        # 3
1615
1620
        builder.start_series()
1616
1621
        builder.build_snapshot(None, [
1617
 
            ('add', ('', b'TREE_ROOT', 'directory', '')),],
 
1622
            ('add', ('', b'TREE_ROOT', 'directory', '')), ],
1618
1623
            revision_id=b'1')
1619
1624
        builder.build_snapshot([b'1'], [], revision_id=b'1.1.1')
1620
1625
        builder.build_snapshot([b'1'], [], revision_id=b'2')
1674
1679
            def __init__(self, *args, **kwargs):
1675
1680
                super(CustomLogFormatter, self).__init__(*args, **kwargs)
1676
1681
                self.revisions = []
 
1682
 
1677
1683
            def get_levels(self):
1678
1684
                # log formatter supports all levels:
1679
1685
                return 0
 
1686
 
1680
1687
            def log_revision(self, revision):
1681
1688
                self.revisions.append(revision)
1682
1689
 
1696
1703
        log.Logger(b, request).show(log_formatter)
1697
1704
        # should now only have 2 revisions:
1698
1705
        self.assertEqual(len(log_formatter.revisions), 2)
1699