~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_log.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-01-27 20:24:43 UTC
  • mfrom: (3960.2.1 1.12-progress-warnings)
  • Revision ID: pqm@pqm.ubuntu.com-20090127202443-ty2bu1hh91dumasz
(jam) Avoid getting a UserWarning by not creating an unused progress
        bar.

Show diffs side-by-side

added added

removed removed

Lines of Context:
188
188
        wt = self.make_branch_and_tree('.')
189
189
        out, err = self.run_bzr('log does-not-exist', retcode=3)
190
190
        self.assertContainsRe(
191
 
            err, 'Path unknown at end or start of revision range: does-not-exist')
 
191
            err, 'Path does not have any revision history: does-not-exist')
192
192
 
193
193
    def test_log_with_tags(self):
194
194
        tree = self._prepare(format='dirstate-tags')
256
256
    def assertUseShortDeltaFormat(self, cmd):
257
257
        log = self.run_bzr(cmd)[0]
258
258
        # Check that we use the short status format
259
 
        self.assertContainsRe(log, '(?m)^\s*A  hello.txt$')
260
 
        self.assertNotContainsRe(log, '(?m)^\s*added:$')
 
259
        self.assertContainsRe(log, '(?m)^A  hello.txt$')
 
260
        self.assertNotContainsRe(log, '(?m)^added:$')
261
261
 
262
262
    def assertUseLongDeltaFormat(self, cmd):
263
263
        log = self.run_bzr(cmd)[0]
264
264
        # Check that we use the long status format
265
 
        self.assertNotContainsRe(log, '(?m)^\s*A  hello.txt$')
266
 
        self.assertContainsRe(log, '(?m)^\s*added:$')
 
265
        self.assertNotContainsRe(log, '(?m)^A  hello.txt$')
 
266
        self.assertContainsRe(log, '(?m)^added:$')
267
267
 
268
268
    def test_log_short_verbose(self):
269
269
        self.assertUseShortDeltaFormat(['log', '--short', '-v'])
298
298
        parent_tree.commit(message='merge branch 1')
299
299
        os.chdir('parent')
300
300
 
301
 
    def _prepare_short(self):
302
 
        parent_tree = self.make_branch_and_tree('parent')
303
 
        parent_tree.commit(message='first post',
304
 
            timestamp=1132586700, timezone=36000,
305
 
            committer='Joe Foo <joe@foo.com>')
306
 
        child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
307
 
        child_tree.commit(message='branch 1',
308
 
            timestamp=1132586800, timezone=36000,
309
 
            committer='Joe Foo <joe@foo.com>')
310
 
        smaller_tree = \
311
 
                child_tree.bzrdir.sprout('smallerchild').open_workingtree()
312
 
        smaller_tree.commit(message='branch 2',
313
 
            timestamp=1132586900, timezone=36000,
314
 
            committer='Joe Foo <joe@foo.com>')
315
 
        child_tree.merge_from_branch(smaller_tree.branch)
316
 
        child_tree.commit(message='merge branch 2',
317
 
            timestamp=1132587000, timezone=36000,
318
 
            committer='Joe Foo <joe@foo.com>')
319
 
        parent_tree.merge_from_branch(child_tree.branch)
320
 
        parent_tree.commit(message='merge branch 1',
321
 
            timestamp=1132587100, timezone=36000,
322
 
            committer='Joe Foo <joe@foo.com>')
323
 
        os.chdir('parent')
324
 
 
325
301
    def test_merges_are_indented_by_level(self):
326
302
        self._prepare()
327
303
        out,err = self.run_bzr('log')
365
341
  first post
366
342
""")
367
343
 
368
 
    def test_force_merge_revisions_off(self):
369
 
        self._prepare()
370
 
        out,err = self.run_bzr('log --long -n1')
371
 
        self.assertEqual('', err)
372
 
        log = normalize_log(out)
373
 
        self.assertEqualDiff(log, """\
374
 
------------------------------------------------------------
375
 
revno: 2
376
 
committer: Lorem Ipsum <test@example.com>
377
 
branch nick: parent
378
 
timestamp: Just now
379
 
message:
380
 
  merge branch 1
381
 
------------------------------------------------------------
382
 
revno: 1
383
 
committer: Lorem Ipsum <test@example.com>
384
 
branch nick: parent
385
 
timestamp: Just now
386
 
message:
387
 
  first post
388
 
""")
389
 
 
390
 
    def test_force_merge_revisions_on(self):
391
 
        self._prepare_short()
392
 
        out,err = self.run_bzr('log --short -n0')
393
 
        self.assertEqual('', err)
394
 
        log = normalize_log(out)
395
 
        self.assertEqualDiff(log, """\
396
 
    2 Joe Foo\t2005-11-22 [merge]
397
 
      merge branch 1
398
 
 
399
 
          1.1.2 Joe Foo\t2005-11-22 [merge]
400
 
                merge branch 2
401
 
 
402
 
              1.2.1 Joe Foo\t2005-11-22
403
 
                    branch 2
404
 
 
405
 
          1.1.1 Joe Foo\t2005-11-22
406
 
                branch 1
407
 
 
408
 
    1 Joe Foo\t2005-11-22
409
 
      first post
410
 
 
411
 
""")
412
 
 
413
 
    def test_force_merge_revisions_N(self):
414
 
        self._prepare_short()
415
 
        out,err = self.run_bzr('log --short -n2')
416
 
        self.assertEqual('', err)
417
 
        log = normalize_log(out)
418
 
        self.assertEqualDiff(log, """\
419
 
    2 Joe Foo\t2005-11-22 [merge]
420
 
      merge branch 1
421
 
 
422
 
          1.1.2 Joe Foo\t2005-11-22 [merge]
423
 
                merge branch 2
424
 
 
425
 
          1.1.1 Joe Foo\t2005-11-22
426
 
                branch 1
427
 
 
428
 
    1 Joe Foo\t2005-11-22
429
 
      first post
430
 
 
431
 
""")
432
 
 
433
344
    def test_merges_single_merge_rev(self):
434
345
        self._prepare()
435
346
        out,err = self.run_bzr('log -r1.1.2')
492
403
        self.assertContainsRe(err, err_msg)
493
404
 
494
405
 
495
 
def subst_dates(string):
496
 
    """Replace date strings with constant values."""
497
 
    return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
498
 
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
499
 
 
500
 
 
501
 
class TestLogDiff(TestCaseWithoutPropsHandler):
502
 
 
503
 
    def _prepare(self):
504
 
        parent_tree = self.make_branch_and_tree('parent')
505
 
        self.build_tree(['parent/file1', 'parent/file2'])
506
 
        parent_tree.add('file1')
507
 
        parent_tree.add('file2')
508
 
        parent_tree.commit(message='first post',
509
 
            timestamp=1132586655, timezone=36000,
510
 
            committer='Lorem Ipsum <test@example.com>')
511
 
        child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
512
 
        self.build_tree_contents([('child/file2', 'hello\n')])
513
 
        child_tree.commit(message='branch 1',
514
 
            timestamp=1132586700, timezone=36000,
515
 
            committer='Lorem Ipsum <test@example.com>')
516
 
        parent_tree.merge_from_branch(child_tree.branch)
517
 
        parent_tree.commit(message='merge branch 1',
518
 
            timestamp=1132586800, timezone=36000,
519
 
            committer='Lorem Ipsum <test@example.com>')
520
 
        os.chdir('parent')
521
 
 
522
 
    def test_log_show_diff_long(self):
523
 
        self._prepare()
524
 
        out,err = self.run_bzr('log -p')
525
 
        self.assertEqual('', err)
526
 
        log = normalize_log(out)
527
 
        self.assertEqualDiff(subst_dates(log), """\
528
 
------------------------------------------------------------
529
 
revno: 2
530
 
committer: Lorem Ipsum <test@example.com>
531
 
branch nick: parent
532
 
timestamp: Just now
533
 
message:
534
 
  merge branch 1
535
 
diff:
536
 
=== modified file 'file2'
537
 
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
538
 
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
539
 
@@ -1,1 +1,1 @@
540
 
-contents of parent/file2
541
 
+hello
542
 
    ------------------------------------------------------------
543
 
    revno: 1.1.1
544
 
    committer: Lorem Ipsum <test@example.com>
545
 
    branch nick: child
546
 
    timestamp: Just now
547
 
    message:
548
 
      branch 1
549
 
    diff:
550
 
    === modified file 'file2'
551
 
    --- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
552
 
    +++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
553
 
    @@ -1,1 +1,1 @@
554
 
    -contents of parent/file2
555
 
    +hello
556
 
------------------------------------------------------------
557
 
revno: 1
558
 
committer: Lorem Ipsum <test@example.com>
559
 
branch nick: parent
560
 
timestamp: Just now
561
 
message:
562
 
  first post
563
 
diff:
564
 
=== added file 'file1'
565
 
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
566
 
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
567
 
@@ -0,0 +1,1 @@
568
 
+contents of parent/file1
569
 
 
570
 
=== added file 'file2'
571
 
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
572
 
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
573
 
@@ -0,0 +1,1 @@
574
 
+contents of parent/file2
575
 
""")
576
 
 
577
 
    def test_log_show_diff_short(self):
578
 
        self._prepare()
579
 
        out,err = self.run_bzr('log -p --short')
580
 
        self.assertEqual('', err)
581
 
        log = normalize_log(out)
582
 
        self.assertEqualDiff(subst_dates(log), """\
583
 
    2 Lorem Ipsum\t2005-11-22 [merge]
584
 
      merge branch 1
585
 
      === modified file 'file2'
586
 
      --- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
587
 
      +++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
588
 
      @@ -1,1 +1,1 @@
589
 
      -contents of parent/file2
590
 
      +hello
591
 
 
592
 
    1 Lorem Ipsum\t2005-11-22
593
 
      first post
594
 
      === added file 'file1'
595
 
      --- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
596
 
      +++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
597
 
      @@ -0,0 +1,1 @@
598
 
      +contents of parent/file1
599
 
      
600
 
      === added file 'file2'
601
 
      --- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
602
 
      +++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
603
 
      @@ -0,0 +1,1 @@
604
 
      +contents of parent/file2
605
 
 
606
 
""")
607
 
 
608
 
    def test_log_show_diff_line(self):
609
 
        self._prepare()
610
 
        out,err = self.run_bzr('log -p --line')
611
 
        self.assertEqual('', err)
612
 
        log = normalize_log(out)
613
 
        # Not supported by this formatter so expect plain output
614
 
        self.assertEqualDiff(subst_dates(log), """\
615
 
2: Lorem Ipsum 2005-11-22 merge branch 1
616
 
1: Lorem Ipsum 2005-11-22 first post
617
 
""")
618
 
 
619
 
    def test_log_show_diff_file(self):
620
 
        """Only the diffs for the given file are to be shown"""
621
 
        self._prepare()
622
 
        out,err = self.run_bzr('log -p --short file2')
623
 
        self.assertEqual('', err)
624
 
        log = normalize_log(out)
625
 
        self.assertEqualDiff(subst_dates(log), """\
626
 
    2 Lorem Ipsum\t2005-11-22 [merge]
627
 
      merge branch 1
628
 
      === modified file 'file2'
629
 
      --- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
630
 
      +++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
631
 
      @@ -1,1 +1,1 @@
632
 
      -contents of parent/file2
633
 
      +hello
634
 
 
635
 
    1 Lorem Ipsum\t2005-11-22
636
 
      first post
637
 
      === added file 'file2'
638
 
      --- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
639
 
      +++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
640
 
      @@ -0,0 +1,1 @@
641
 
      +contents of parent/file2
642
 
 
643
 
""")
644
 
        out,err = self.run_bzr('log -p --short file1')
645
 
        self.assertEqual('', err)
646
 
        log = normalize_log(out)
647
 
        self.assertEqualDiff(subst_dates(log), """\
648
 
    1 Lorem Ipsum\t2005-11-22
649
 
      first post
650
 
      === added file 'file1'
651
 
      --- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
652
 
      +++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
653
 
      @@ -0,0 +1,1 @@
654
 
      +contents of parent/file1
655
 
 
656
 
""")
657
 
 
658
 
 
659
406
class TestLogEncodings(TestCaseInTempDir):
660
407
 
661
408
    _mu = u'\xb5'
768
515
        tree.bzrdir.destroy_workingtree()
769
516
        self.run_bzr('log tree/file')
770
517
 
771
 
    def prepare_tree(self, complex=False):
772
 
        # The complex configuration includes deletes and renames
 
518
    def prepare_tree(self):
773
519
        tree = self.make_branch_and_tree('parent')
774
520
        self.build_tree(['parent/file1', 'parent/file2', 'parent/file3'])
775
521
        tree.add('file1')
783
529
        child_tree.commit(message='branch 1')
784
530
        tree.merge_from_branch(child_tree.branch)
785
531
        tree.commit(message='merge child branch')
786
 
        if complex:
787
 
            tree.remove('file2')
788
 
            tree.commit('remove file2')
789
 
            tree.rename_one('file3', 'file4')
790
 
            tree.commit('file3 is now called file4')
791
 
            tree.remove('file1')
792
 
            tree.commit('remove file1')
793
532
        os.chdir('parent')
794
533
 
795
534
    def test_log_file(self):
838
577
        self.assertNotContainsRe(log, 'revno: 3.1.1\n')
839
578
        self.assertNotContainsRe(log, 'revno: 4\n')
840
579
 
841
 
    def test_log_file_historical_missing(self):
842
 
        # Check logging a deleted file gives an error if the
843
 
        # file isn't found at the end or start of the revision range
844
 
        self.prepare_tree(complex=True)
845
 
        err_msg = "Path unknown at end or start of revision range: file2"
846
 
        err = self.run_bzr('log file2', retcode=3)[1]
847
 
        self.assertContainsRe(err, err_msg)
848
 
 
849
 
    def test_log_file_historical_end(self):
850
 
        # Check logging a deleted file is ok if the file existed
851
 
        # at the end the revision range
852
 
        self.prepare_tree(complex=True)
853
 
        log, err = self.run_bzr('log -r..4 file2')
854
 
        self.assertEquals('', err)
855
 
        self.assertNotContainsRe(log, 'revno: 1\n')
856
 
        self.assertContainsRe(log, 'revno: 2\n')
857
 
        self.assertNotContainsRe(log, 'revno: 3\n')
858
 
        self.assertContainsRe(log, 'revno: 3.1.1\n')
859
 
        self.assertContainsRe(log, 'revno: 4\n')
860
 
 
861
 
    def test_log_file_historical_start(self):
862
 
        # Check logging a deleted file is ok if the file existed
863
 
        # at the start of the revision range
864
 
        self.prepare_tree(complex=True)
865
 
        log, err = self.run_bzr('log file1')
866
 
        self.assertEquals('', err)
867
 
        self.assertContainsRe(log, 'revno: 1\n')
868
 
        self.assertNotContainsRe(log, 'revno: 2\n')
869
 
        self.assertNotContainsRe(log, 'revno: 3\n')
870
 
        self.assertNotContainsRe(log, 'revno: 3.1.1\n')
871
 
        self.assertNotContainsRe(log, 'revno: 4\n')
872
 
 
873
 
    def test_log_file_renamed(self):
874
 
        """File matched against revision range, not current tree."""
875
 
        self.prepare_tree(complex=True)
876
 
 
877
 
        # Check logging a renamed file gives an error by default
878
 
        err_msg = "Path unknown at end or start of revision range: file3"
879
 
        err = self.run_bzr('log file3', retcode=3)[1]
880
 
        self.assertContainsRe(err, err_msg)
881
 
 
882
 
        # Check we can see a renamed file if we give the right end revision
883
 
        log, err = self.run_bzr('log -r..4 file3')
884
 
        self.assertEquals('', err)
885
 
        self.assertNotContainsRe(log, 'revno: 1\n')
886
 
        self.assertNotContainsRe(log, 'revno: 2\n')
887
 
        self.assertContainsRe(log, 'revno: 3\n')
888
 
        self.assertNotContainsRe(log, 'revno: 3.1.1\n')
889
 
        self.assertNotContainsRe(log, 'revno: 4\n')
890
 
 
891
580
    def test_line_log_file(self):
892
581
        """The line log for a file should only list relevant mainline revs"""
893
582
        # Note: this also implicitly  covers the short logging case.