~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: 2010-05-11 11:47:36 UTC
  • mfrom: (5200.3.8 lock_return)
  • Revision ID: pqm@pqm.ubuntu.com-20100511114736-mc1sq9zyo3vufec7
(lifeless) Provide a consistent interface to Tree, Branch,
 Repository where lock methods return an object with an unlock method to
 unlock the lock. This breaks the API for Branch,
 Repository on their lock_write methods. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
from itertools import izip
21
21
import os
 
22
import re
22
23
 
23
24
from bzrlib import (
24
25
    branchbuilder,
28
29
    tests,
29
30
    )
30
31
from bzrlib.tests import (
 
32
    script,
31
33
    test_log,
32
 
    features,
33
34
    )
34
35
 
35
36
 
76
77
                self.log_catcher = test_log.LogCatcher(*args, **kwargs)
77
78
                # Always return our own log formatter
78
79
                return self.log_catcher
79
 
        # Break cycle with closure over self on cleanup by removing method
80
 
        self.addCleanup(setattr, MyLogFormatter, "__new__", None)
81
80
 
82
81
        def getme(branch):
83
82
                # Always return our own log formatter class hijacking the
159
158
        self.make_linear_branch()
160
159
        self.assertLogRevnos(['-c1'], ['1'])
161
160
 
162
 
    def test_branch_revspec(self):
163
 
        foo = self.make_branch_and_tree('foo')
164
 
        bar = self.make_branch_and_tree('bar')
165
 
        self.build_tree(['foo/foo.txt', 'bar/bar.txt'])
166
 
        foo.add('foo.txt')
167
 
        bar.add('bar.txt')
168
 
        foo.commit(message='foo')
169
 
        bar.commit(message='bar')
170
 
        self.run_bzr('log -r branch:../bar', working_dir='foo')
171
 
        self.assertEqual([bar.branch.get_rev_id(1)],
172
 
                         [r.rev.revision_id
173
 
                          for r in self.get_captured_revisions()])
174
 
 
175
 
 
176
 
class TestLogExcludeCommonAncestry(TestLogWithLogCatcher):
177
 
 
178
 
    def test_exclude_common_ancestry_simple_revnos(self):
179
 
        self.make_linear_branch()
180
 
        self.assertLogRevnos(['-r1..3', '--exclude-common-ancestry'],
181
 
                             ['3', '2'])
182
 
 
183
161
 
184
162
class TestLogMergedLinearAncestry(TestLogWithLogCatcher):
185
163
 
189
167
        # stop calling run_bzr, there is no point) --vila 100118.
190
168
        builder = branchbuilder.BranchBuilder(self.get_transport())
191
169
        builder.start_series()
192
 
        # 1
193
 
        # | \
194
 
        # 2  1.1.1
195
 
        # | / |
196
 
        # 3  1.1.2
197
 
        # |   |
198
 
        # |  1.1.3
199
 
        # | / |
200
 
        # 4  1.1.4
201
 
        # | /
202
 
        # 5
203
 
 
204
170
        # mainline
205
171
        builder.build_snapshot('1', None, [
206
172
            ('add', ('', 'root-id', 'directory', ''))])
382
348
 
383
349
    def test_log_bad_message_re(self):
384
350
        """Bad --message argument gives a sensible message
385
 
 
 
351
        
386
352
        See https://bugs.launchpad.net/bzr/+bug/251352
387
353
        """
388
354
        self.make_minimal_branch()
389
355
        out, err = self.run_bzr(['log', '-m', '*'], retcode=3)
390
 
        self.assertContainsRe(err, "ERROR.*Invalid pattern.*nothing to repeat")
391
 
        self.assertNotContainsRe(err, "Unprintable exception")
392
 
        self.assertEqual(out, '')
 
356
        self.assertEqual("bzr: ERROR: Invalid regular expression"
 
357
            " in log message filter"
 
358
            ": '*'"
 
359
            ": nothing to repeat\n", err)
 
360
        self.assertEqual('', out)
393
361
 
394
362
    def test_log_unsupported_timezone(self):
395
363
        self.make_linear_branch()
443
411
        self.assertContainsRe(log, r'tags: tag1')
444
412
 
445
413
 
446
 
class TestLogSignatures(TestLog):
447
 
 
448
 
    def test_log_with_signatures(self):
449
 
        self.requireFeature(features.gpgme)
450
 
 
451
 
        tree = self.make_linear_branch(format='dirstate-tags')
452
 
 
453
 
        log = self.run_bzr("log --signatures")[0]
454
 
        self.assertTrue('signature: no signature' in log)
455
 
 
456
 
    def test_log_without_signatures(self):
457
 
        self.requireFeature(features.gpgme)
458
 
 
459
 
        tree = self.make_linear_branch(format='dirstate-tags')
460
 
 
461
 
        log = self.run_bzr("log")[0]
462
 
        self.assertFalse('signature: no signature' in log)
463
 
 
464
 
 
465
414
class TestLogVerbose(TestLog):
466
415
 
467
416
    def setUp(self):
483
432
    def test_log_short_verbose(self):
484
433
        self.assertUseShortDeltaFormat(['log', '--short', '-v'])
485
434
 
486
 
    def test_log_s_verbose(self):
487
 
        self.assertUseShortDeltaFormat(['log', '-S', '-v'])
488
 
 
489
435
    def test_log_short_verbose_verbose(self):
490
436
        self.assertUseLongDeltaFormat(['log', '--short', '-vv'])
491
437
 
947
893
        self.prepare_tree()
948
894
        os.chdir("dir1")
949
895
        self.assertLogRevnos(['dir2', 'file5'], ['5', '3'])
950
 
 
951
 
 
952
 
class MainlineGhostTests(TestLogWithLogCatcher):
953
 
 
954
 
    def setUp(self):
955
 
        super(MainlineGhostTests, self).setUp()
956
 
        tree = self.make_branch_and_tree('')
957
 
        tree.set_parent_ids(["spooky"], allow_leftmost_as_ghost=True)
958
 
        tree.add('')
959
 
        tree.commit('msg1', rev_id='rev1')
960
 
        tree.commit('msg2', rev_id='rev2')
961
 
 
962
 
    def test_log_range(self):
963
 
        self.assertLogRevnos(["-r1..2"], ["2", "1"])
964
 
 
965
 
    def test_log_norange(self):
966
 
        self.assertLogRevnos([], ["2", "1"])
967
 
 
968
 
    def test_log_range_open_begin(self):
969
 
        self.knownFailure("log with ghosts fails. bug #726466")
970
 
        (stdout, stderr) = self.run_bzr(['log', '-r..2'], retcode=3)
971
 
        self.assertEqual(["2", "1"],
972
 
                         [r.revno for r in self.get_captured_revisions()])
973
 
        self.assertEquals("bzr: ERROR: Further revision history missing.", stderr)
974
 
 
975
 
    def test_log_range_open_end(self):
976
 
        self.assertLogRevnos(["-r1.."], ["2", "1"])
977
 
 
978
 
class TestLogMatch(TestLogWithLogCatcher):
979
 
    def prepare_tree(self):
980
 
        tree = self.make_branch_and_tree('')
981
 
        self.build_tree(
982
 
            ['/hello.txt', '/goodbye.txt'])
983
 
        tree.add('hello.txt')
984
 
        tree.commit(message='message1', committer='committer1', authors=['author1'])
985
 
        tree.add('goodbye.txt')
986
 
        tree.commit(message='message2', committer='committer2', authors=['author2'])
987
 
    
988
 
    def test_message(self):
989
 
        self.prepare_tree()
990
 
        self.assertLogRevnos(["-m", "message1"], ["1"])
991
 
        self.assertLogRevnos(["-m", "message2"], ["2"])
992
 
        self.assertLogRevnos(["-m", "message"], ["2", "1"])
993
 
        self.assertLogRevnos(["-m", "message1", "-m", "message2"], ["2", "1"])
994
 
        self.assertLogRevnos(["--match-message", "message1"], ["1"])
995
 
        self.assertLogRevnos(["--match-message", "message2"], ["2"])
996
 
        self.assertLogRevnos(["--match-message", "message"], ["2", "1"])
997
 
        self.assertLogRevnos(["--match-message", "message1", 
998
 
                              "--match-message", "message2"], ["2", "1"])
999
 
        self.assertLogRevnos(["--message", "message1"], ["1"])
1000
 
        self.assertLogRevnos(["--message", "message2"], ["2"])
1001
 
        self.assertLogRevnos(["--message", "message"], ["2", "1"])
1002
 
        self.assertLogRevnos(["--match-message", "message1", 
1003
 
                              "--message", "message2"], ["2", "1"])
1004
 
        self.assertLogRevnos(["--message", "message1", 
1005
 
                              "--match-message", "message2"], ["2", "1"])
1006
 
 
1007
 
    def test_committer(self):
1008
 
        self.prepare_tree()
1009
 
        self.assertLogRevnos(["-m", "committer1"], ["1"])
1010
 
        self.assertLogRevnos(["-m", "committer2"], ["2"])
1011
 
        self.assertLogRevnos(["-m", "committer"], ["2", "1"])
1012
 
        self.assertLogRevnos(["-m", "committer1", "-m", "committer2"], 
1013
 
                             ["2", "1"])
1014
 
        self.assertLogRevnos(["--match-committer", "committer1"], ["1"])
1015
 
        self.assertLogRevnos(["--match-committer", "committer2"], ["2"])
1016
 
        self.assertLogRevnos(["--match-committer", "committer"], ["2", "1"])
1017
 
        self.assertLogRevnos(["--match-committer", "committer1", 
1018
 
                              "--match-committer", "committer2"], ["2", "1"])
1019
 
 
1020
 
    def test_author(self):
1021
 
        self.prepare_tree()
1022
 
        self.assertLogRevnos(["-m", "author1"], ["1"])
1023
 
        self.assertLogRevnos(["-m", "author2"], ["2"])
1024
 
        self.assertLogRevnos(["-m", "author"], ["2", "1"])
1025
 
        self.assertLogRevnos(["-m", "author1", "-m", "author2"], 
1026
 
                             ["2", "1"])
1027
 
        self.assertLogRevnos(["--match-author", "author1"], ["1"])
1028
 
        self.assertLogRevnos(["--match-author", "author2"], ["2"])
1029
 
        self.assertLogRevnos(["--match-author", "author"], ["2", "1"])
1030
 
        self.assertLogRevnos(["--match-author", "author1", 
1031
 
                              "--match-author", "author2"], ["2", "1"])