45
51
tree.commit(message='message2')
46
52
tree.add('meep.txt')
47
53
tree.commit(message='message3')
48
self.full_log = self.run_bzr(["log", path])[0]
56
def make_merged_branch(self, path='.', format=None):
57
tree = self.make_linear_branch(path, format)
58
tree2 = tree.bzrdir.sprout('tree2',
59
revision_id=tree.branch.get_rev_id(1)).open_workingtree()
60
tree2.commit(message='tree2 message2')
61
tree2.commit(message='tree2 message3')
62
tree.merge_from_branch(tree2.branch)
63
tree.commit(message='merge')
66
def assertRevnos(self, log, must_have=(), must_not_have=()):
67
"""Check if revnos are in or not in the log output"""
68
for revno in must_have:
69
self.assertTrue(('revno: %s\n' % revno) in log,
70
'Does not contain expected revno %s' % revno)
71
for revno in must_not_have:
72
self.assertFalse(('revno: %s\n' % revno) in log,
73
'Contains unexpected revno %s' % revno)
75
def commit_options(self):
76
"""Use some mostly fixed values for commits to simplify tests.
78
Tests can use this function to get some commit attributes. The time
79
stamp is incremented at each commit.
81
self.timestamp += 1 # 1 second between each commit
82
return dict(committer='Lorem Ipsum <joe@foo.com>',
83
timezone=self.timezone,
84
timestamp=self.timestamp,
87
def check_log(self, expected, args, working_dir='level0'):
88
out, err = self.run_bzr(['log', '--timezone', 'utc'] + args,
89
working_dir=working_dir)
90
self.assertEqual('', err)
91
self.assertEqualDiff(expected, test_log.normalize_log(out))
94
class TestLogRevSpecs(TestLog):
51
96
def test_log_null_end_revspec(self):
53
self.assertTrue('revno: 1\n' in self.full_log)
54
self.assertTrue('revno: 2\n' in self.full_log)
55
self.assertTrue('revno: 3\n' in self.full_log)
56
self.assertTrue('message:\n message1\n' in self.full_log)
57
self.assertTrue('message:\n message2\n' in self.full_log)
58
self.assertTrue('message:\n message3\n' in self.full_log)
97
self.make_linear_branch()
98
log = self.run_bzr(['log'])[0]
99
self.assertTrue('revno: 1\n' in log)
100
self.assertTrue('revno: 2\n' in log)
101
self.assertTrue('revno: 3\n' in log)
102
self.assertTrue('message:\n message1\n' in log)
103
self.assertTrue('message:\n message2\n' in log)
104
self.assertTrue('message:\n message3\n' in log)
106
full_log = self.run_bzr(['log'])[0]
60
107
log = self.run_bzr("log -r 1..")[0]
61
self.assertEqualDiff(log, self.full_log)
108
self.assertEqualDiff(log, full_log)
63
110
def test_log_null_begin_revspec(self):
111
self.make_linear_branch()
112
full_log = self.run_bzr(['log'])[0]
65
113
log = self.run_bzr("log -r ..3")[0]
66
self.assertEqualDiff(self.full_log, log)
114
self.assertEqualDiff(full_log, log)
68
116
def test_log_null_both_revspecs(self):
117
self.make_linear_branch()
118
full_log = self.run_bzr(['log'])[0]
70
119
log = self.run_bzr("log -r ..")[0]
71
self.assertEqualDiff(self.full_log, log)
120
self.assertEqualDiff(full_log, log)
73
122
def test_log_zero_revspec(self):
75
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
123
self.make_minimal_branch()
124
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
78
127
def test_log_zero_begin_revspec(self):
80
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
128
self.make_linear_branch()
129
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
81
130
['log', '-r0..2'])
83
132
def test_log_zero_end_revspec(self):
85
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
133
self.make_linear_branch()
134
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
86
135
['log', '-r-2..0'])
88
def test_log_unsupported_timezone(self):
90
self.run_bzr_error('bzr: ERROR: Unsupported timezone format "foo", '
91
'options are "utc", "original", "local".',
92
['log', '--timezone', 'foo'])
94
137
def test_log_negative_begin_revspec_full_log(self):
138
self.make_linear_branch()
139
full_log = self.run_bzr(['log'])[0]
96
140
log = self.run_bzr("log -r -3..")[0]
97
self.assertEqualDiff(self.full_log, log)
141
self.assertEqualDiff(full_log, log)
99
143
def test_log_negative_both_revspec_full_log(self):
144
self.make_linear_branch()
145
full_log = self.run_bzr(['log'])[0]
101
146
log = self.run_bzr("log -r -3..-1")[0]
102
self.assertEqualDiff(self.full_log, log)
147
self.assertEqualDiff(full_log, log)
104
149
def test_log_negative_both_revspec_partial(self):
150
self.make_linear_branch()
106
151
log = self.run_bzr("log -r -3..-2")[0]
107
152
self.assertTrue('revno: 1\n' in log)
108
153
self.assertTrue('revno: 2\n' in log)
109
154
self.assertTrue('revno: 3\n' not in log)
111
156
def test_log_negative_begin_revspec(self):
157
self.make_linear_branch()
113
158
log = self.run_bzr("log -r -2..")[0]
114
159
self.assertTrue('revno: 1\n' not in log)
115
160
self.assertTrue('revno: 2\n' in log)
116
161
self.assertTrue('revno: 3\n' in log)
118
163
def test_log_positive_revspecs(self):
164
self.make_linear_branch()
165
full_log = self.run_bzr(['log'])[0]
120
166
log = self.run_bzr("log -r 1..3")[0]
121
self.assertEqualDiff(self.full_log, log)
167
self.assertEqualDiff(full_log, log)
169
def test_log_dotted_revspecs(self):
170
self.make_merged_branch()
171
log = self.run_bzr("log -n0 -r 1..1.1.1")[0]
172
self.assertRevnos(log, (1, '1.1.1'), (2, 3, '1.1.2', 4))
123
174
def test_log_reversed_revspecs(self):
175
self.make_linear_branch()
125
176
self.run_bzr_error(('bzr: ERROR: Start revision must be older than '
126
177
'the end revision.\n',),
127
178
['log', '-r3..1'])
180
def test_log_reversed_dotted_revspecs(self):
181
self.make_merged_branch()
182
self.run_bzr_error(('bzr: ERROR: Start revision not found in '
183
'left-hand history of end revision.\n',),
129
186
def test_log_revno_n_path(self):
130
self._prepare(path='branch1')
131
self._prepare(path='branch2')
132
log = self.run_bzr("log -r revno:2:branch1..revno:3:branch2",
187
self.make_linear_branch('branch1')
188
self.make_linear_branch('branch2')
190
self.run_bzr("log -r revno:2:branch1..revno:3:branch2", retcode=3)[0]
134
192
log = self.run_bzr("log -r revno:1:branch2..revno:3:branch2")[0]
135
self.assertEqualDiff(self.full_log, log)
193
full_log = self.run_bzr(['log'], working_dir='branch2')[0]
194
self.assertEqualDiff(full_log, log)
136
195
log = self.run_bzr("log -r revno:1:branch2")[0]
137
196
self.assertTrue('revno: 1\n' in log)
138
197
self.assertTrue('revno: 2\n' not in log)
140
199
self.assertTrue('branch nick: branch1\n' not in log)
142
201
def test_log_nonexistent_revno(self):
144
(out, err) = self.run_bzr_error(args="log -r 1234",
145
error_regexes=["bzr: ERROR: Requested revision: '1234' "
146
"does not exist in branch:"])
202
self.make_minimal_branch()
203
(out, err) = self.run_bzr_error(
204
["bzr: ERROR: Requested revision: '1234' "
205
"does not exist in branch:"],
148
208
def test_log_nonexistent_dotted_revno(self):
150
(out, err) = self.run_bzr_error(args="log -r 123.123",
151
error_regexes=["bzr: ERROR: Requested revision: '123.123' "
152
"does not exist in branch:"])
209
self.make_minimal_branch()
210
(out, err) = self.run_bzr_error(
211
["bzr: ERROR: Requested revision: '123.123' "
212
"does not exist in branch:"],
213
['log', '-r123.123'])
154
215
def test_log_change_revno(self):
216
self.make_linear_branch()
156
217
expected_log = self.run_bzr("log -r 1")[0]
157
218
log = self.run_bzr("log -c 1")[0]
158
219
self.assertEqualDiff(expected_log, log)
160
221
def test_log_change_nonexistent_revno(self):
162
(out, err) = self.run_bzr_error(args="log -c 1234",
163
error_regexes=["bzr: ERROR: Requested revision: '1234' "
164
"does not exist in branch:"])
222
self.make_minimal_branch()
223
(out, err) = self.run_bzr_error(
224
["bzr: ERROR: Requested revision: '1234' "
225
"does not exist in branch:"],
166
228
def test_log_change_nonexistent_dotted_revno(self):
168
(out, err) = self.run_bzr_error(args="log -c 123.123",
169
error_regexes=["bzr: ERROR: Requested revision: '123.123' "
170
"does not exist in branch:"])
229
self.make_minimal_branch()
230
(out, err) = self.run_bzr_error(
231
["bzr: ERROR: Requested revision: '123.123' "
232
"does not exist in branch:"],
233
['log', '-c123.123'])
172
def test_log_change_single_revno(self):
174
self.run_bzr_error('bzr: ERROR: Option --change does not'
175
' accept revision ranges',
235
def test_log_change_single_revno_only(self):
236
self.make_minimal_branch()
237
self.run_bzr_error(['bzr: ERROR: Option --change does not'
238
' accept revision ranges'],
176
239
['log', '--change', '2..3'])
178
241
def test_log_change_incompatible_with_revision(self):
180
self.run_bzr_error('bzr: ERROR: --revision and --change'
181
' are mutually exclusive',
242
self.run_bzr_error(['bzr: ERROR: --revision and --change'
243
' are mutually exclusive'],
182
244
['log', '--change', '2', '--revision', '3'])
184
246
def test_log_nonexistent_file(self):
247
self.make_minimal_branch()
185
248
# files that don't exist in either the basis tree or working tree
186
249
# should give an error
187
wt = self.make_branch_and_tree('.')
188
250
out, err = self.run_bzr('log does-not-exist', retcode=3)
189
self.assertContainsRe(
190
err, 'Path unknown at end or start of revision range: does-not-exist')
251
self.assertContainsRe(err,
252
'Path unknown at end or start of revision range: '
192
255
def test_log_with_tags(self):
193
tree = self._prepare(format='dirstate-tags')
256
tree = self.make_linear_branch(format='dirstate-tags')
194
257
branch = tree.branch
195
258
branch.tags.set_tag('tag1', branch.get_rev_id(1))
196
259
branch.tags.set_tag('tag1.1', branch.get_rev_id(1))
294
364
self.assertUseLongDeltaFormat(['log', '--long', '-vv'])
297
class TestLogMerges(TestCaseWithoutPropsHandler):
300
parent_tree = self.make_branch_and_tree('parent')
301
parent_tree.commit(message='first post', allow_pointless=True)
302
child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
303
child_tree.commit(message='branch 1', allow_pointless=True)
305
child_tree.bzrdir.sprout('smallerchild').open_workingtree()
306
smaller_tree.commit(message='branch 2', allow_pointless=True)
307
child_tree.merge_from_branch(smaller_tree.branch)
308
child_tree.commit(message='merge branch 2')
309
parent_tree.merge_from_branch(child_tree.branch)
310
parent_tree.commit(message='merge branch 1')
313
def _prepare_short(self):
314
parent_tree = self.make_branch_and_tree('parent')
315
parent_tree.commit(message='first post',
316
timestamp=1132586700, timezone=36000,
317
committer='Joe Foo <joe@foo.com>')
318
child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
319
child_tree.commit(message='branch 1',
320
timestamp=1132586800, timezone=36000,
321
committer='Joe Foo <joe@foo.com>')
323
child_tree.bzrdir.sprout('smallerchild').open_workingtree()
324
smaller_tree.commit(message='branch 2',
325
timestamp=1132586900, timezone=36000,
326
committer='Joe Foo <joe@foo.com>')
327
child_tree.merge_from_branch(smaller_tree.branch)
328
child_tree.commit(message='merge branch 2',
329
timestamp=1132587000, timezone=36000,
330
committer='Joe Foo <joe@foo.com>')
331
parent_tree.merge_from_branch(child_tree.branch)
332
parent_tree.commit(message='merge branch 1',
333
timestamp=1132587100, timezone=36000,
334
committer='Joe Foo <joe@foo.com>')
367
class TestLogMerges(TestLog):
370
super(TestLogMerges, self).setUp()
371
self.make_branches_with_merges()
373
def make_branches_with_merges(self):
374
level0 = self.make_branch_and_tree('level0')
375
level0.commit(message='in branch level0', **self.commit_options())
377
level1 = level0.bzrdir.sprout('level1').open_workingtree()
378
level1.commit(message='in branch level1', **self.commit_options())
380
level2 = level1.bzrdir.sprout('level2').open_workingtree()
381
level2.commit(message='in branch level2', **self.commit_options())
383
level1.merge_from_branch(level2.branch)
384
level1.commit(message='merge branch level2', **self.commit_options())
386
level0.merge_from_branch(level1.branch)
387
level0.commit(message='merge branch level1', **self.commit_options())
337
389
def test_merges_are_indented_by_level(self):
339
out,err = self.run_bzr('log -n0')
340
self.assertEqual('', err)
341
log = normalize_log(out)
342
self.assertEqualDiff(log, """\
343
391
------------------------------------------------------------
345
393
committer: Lorem Ipsum <test@example.com>
347
395
timestamp: Just now
350
398
------------------------------------------------------------
351
399
revno: 1.1.2 [merge]
352
400
committer: Lorem Ipsum <test@example.com>
354
402
timestamp: Just now
357
405
------------------------------------------------------------
359
407
committer: Lorem Ipsum <test@example.com>
360
branch nick: smallerchild
361
409
timestamp: Just now
364
412
------------------------------------------------------------
366
414
committer: Lorem Ipsum <test@example.com>
368
416
timestamp: Just now
371
419
------------------------------------------------------------
373
421
committer: Lorem Ipsum <test@example.com>
375
423
timestamp: Just now
427
self.check_log(expected, ['-n0'])
380
429
def test_force_merge_revisions_off(self):
382
out,err = self.run_bzr('log --long -n1')
383
self.assertEqual('', err)
384
log = normalize_log(out)
385
self.assertEqualDiff(log, """\
386
431
------------------------------------------------------------
388
433
committer: Lorem Ipsum <test@example.com>
390
435
timestamp: Just now
393
438
------------------------------------------------------------
395
440
committer: Lorem Ipsum <test@example.com>
397
442
timestamp: Just now
446
self.check_log(expected, ['--long', '-n1'])
402
448
def test_force_merge_revisions_on(self):
403
self._prepare_short()
404
out,err = self.run_bzr('log --short -n0')
405
self.assertEqual('', err)
406
log = normalize_log(out)
407
self.assertEqualDiff(log, """\
408
2 Joe Foo\t2005-11-22 [merge]
411
1.1.2 Joe Foo\t2005-11-22 [merge]
414
1.2.1 Joe Foo\t2005-11-22
417
1.1.1 Joe Foo\t2005-11-22
420
1 Joe Foo\t2005-11-22
450
2 Lorem Ipsum\t2005-11-22 [merge]
453
1.1.2 Lorem Ipsum\t2005-11-22 [merge]
456
1.2.1 Lorem Ipsum\t2005-11-22
459
1.1.1 Lorem Ipsum\t2005-11-22
462
1 Lorem Ipsum\t2005-11-22
466
self.check_log(expected, ['--short', '-n0'])
425
468
def test_include_merges(self):
426
469
# Confirm --include-merges gives the same output as -n0
427
self._prepare_short()
428
out_im, err_im = self.run_bzr('log --include-merges')
429
out_n0, err_n0 = self.run_bzr('log -n0')
430
self.assertEqual(err_im, err_n0)
470
out_im, err_im = self.run_bzr('log --include-merges',
471
working_dir='level0')
472
out_n0, err_n0 = self.run_bzr('log -n0', working_dir='level0')
473
self.assertEqual('', err_im)
474
self.assertEqual('', err_n0)
431
475
self.assertEqual(out_im, out_n0)
433
477
def test_force_merge_revisions_N(self):
434
self._prepare_short()
435
out,err = self.run_bzr('log --short -n2')
436
self.assertEqual('', err)
437
log = normalize_log(out)
438
self.assertEqualDiff(log, """\
439
2 Joe Foo\t2005-11-22 [merge]
442
1.1.2 Joe Foo\t2005-11-22 [merge]
445
1.1.1 Joe Foo\t2005-11-22
448
1 Joe Foo\t2005-11-22
479
2 Lorem Ipsum\t2005-11-22 [merge]
482
1.1.2 Lorem Ipsum\t2005-11-22 [merge]
485
1.1.1 Lorem Ipsum\t2005-11-22
488
1 Lorem Ipsum\t2005-11-22
492
self.check_log(expected, ['--short', '-n2'])
453
494
def test_merges_single_merge_rev(self):
455
out,err = self.run_bzr('log -n0 -r1.1.2')
456
self.assertEqual('', err)
457
log = normalize_log(out)
458
self.assertEqualDiff(log, """\
459
496
------------------------------------------------------------
460
497
revno: 1.1.2 [merge]
461
498
committer: Lorem Ipsum <test@example.com>
463
500
timestamp: Just now
466
503
------------------------------------------------------------
468
505
committer: Lorem Ipsum <test@example.com>
469
branch nick: smallerchild
470
507
timestamp: Just now
511
self.check_log(expected, ['-n0', '-r1.1.2'])
475
513
def test_merges_partial_range(self):
477
out, err = self.run_bzr('log -n0 -r1.1.1..1.1.2')
478
self.assertEqual('', err)
479
log = normalize_log(out)
480
self.assertEqualDiff(log, """\
481
515
------------------------------------------------------------
482
516
revno: 1.1.2 [merge]
483
517
committer: Lorem Ipsum <test@example.com>
485
519
timestamp: Just now
488
522
------------------------------------------------------------
490
524
committer: Lorem Ipsum <test@example.com>
491
branch nick: smallerchild
492
526
timestamp: Just now
495
529
------------------------------------------------------------
497
531
committer: Lorem Ipsum <test@example.com>
499
533
timestamp: Just now
505
def subst_dates(string):
506
"""Replace date strings with constant values."""
507
return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
508
'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
511
class TestLogDiff(TestCaseWithoutPropsHandler):
514
parent_tree = self.make_branch_and_tree('parent')
515
self.build_tree(['parent/file1', 'parent/file2'])
516
parent_tree.add('file1')
517
parent_tree.add('file2')
518
parent_tree.commit(message='first post',
519
timestamp=1132586655, timezone=36000,
520
committer='Lorem Ipsum <test@example.com>')
521
child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
522
self.build_tree_contents([('child/file2', 'hello\n')])
523
child_tree.commit(message='branch 1',
524
timestamp=1132586700, timezone=36000,
525
committer='Lorem Ipsum <test@example.com>')
526
parent_tree.merge_from_branch(child_tree.branch)
527
parent_tree.commit(message='merge branch 1',
528
timestamp=1132586800, timezone=36000,
529
committer='Lorem Ipsum <test@example.com>')
537
self.check_log(expected, ['-n0', '-r1.1.1..1.1.2'])
540
class TestLogDiff(TestLog):
543
super(TestLogDiff, self).setUp()
544
self.make_branch_with_diffs()
546
def make_branch_with_diffs(self):
547
level0 = self.make_branch_and_tree('level0')
548
self.build_tree(['level0/file1', 'level0/file2'])
551
level0.commit(message='in branch level0', **self.commit_options())
553
level1 = level0.bzrdir.sprout('level1').open_workingtree()
554
self.build_tree_contents([('level1/file2', 'hello\n')])
555
level1.commit(message='in branch level1', **self.commit_options())
556
level0.merge_from_branch(level1.branch)
557
level0.commit(message='merge branch level1', **self.commit_options())
532
559
def test_log_show_diff_long_with_merges(self):
534
560
out,err = self.run_bzr('log -p -n0')
535
561
self.assertEqual('', err)
536
log = normalize_log(out)
537
self.assertEqualDiff(subst_dates(log), """\
562
log = test_log.normalize_log(out)
538
564
------------------------------------------------------------
540
566
committer: Lorem Ipsum <test@example.com>
542
568
timestamp: Just now
546
572
=== modified file 'file2'
547
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
548
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
573
--- file2\t2005-11-22 00:00:01 +0000
574
+++ file2\t2005-11-22 00:00:02 +0000
550
-contents of parent/file2
576
-contents of level0/file2
552
578
------------------------------------------------------------
554
580
committer: Lorem Ipsum <test@example.com>
556
582
timestamp: Just now
560
586
=== modified file 'file2'
561
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
562
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
587
--- file2\t2005-11-22 00:00:01 +0000
588
+++ file2\t2005-11-22 00:00:02 +0000
564
-contents of parent/file2
590
-contents of level0/file2
566
592
------------------------------------------------------------
568
594
committer: Lorem Ipsum <test@example.com>
570
596
timestamp: Just now
574
600
=== added file 'file1'
575
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
576
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
601
--- file1\t1970-01-01 00:00:00 +0000
602
+++ file1\t2005-11-22 00:00:01 +0000
578
+contents of parent/file1
604
+contents of level0/file1
580
606
=== added file 'file2'
581
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
582
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
607
--- file2\t1970-01-01 00:00:00 +0000
608
+++ file2\t2005-11-22 00:00:01 +0000
584
+contents of parent/file2
610
+contents of level0/file2
612
self.check_log(expected, ['-p', '-n0'])
587
614
def test_log_show_diff_short(self):
589
out,err = self.run_bzr('log -p --short')
590
self.assertEqual('', err)
591
log = normalize_log(out)
592
self.assertEqualDiff(subst_dates(log), """\
593
616
2 Lorem Ipsum\t2005-11-22 [merge]
595
618
=== modified file 'file2'
596
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
597
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
619
--- file2\t2005-11-22 00:00:01 +0000
620
+++ file2\t2005-11-22 00:00:02 +0000
599
-contents of parent/file2
622
-contents of level0/file2
602
625
1 Lorem Ipsum\t2005-11-22
604
627
=== added file 'file1'
605
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
606
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
628
--- file1\t1970-01-01 00:00:00 +0000
629
+++ file1\t2005-11-22 00:00:01 +0000
608
+contents of parent/file1
631
+contents of level0/file1
609
632
\x20\x20\x20\x20\x20\x20
610
633
=== added file 'file2'
611
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
612
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
634
--- file2\t1970-01-01 00:00:00 +0000
635
+++ file2\t2005-11-22 00:00:01 +0000
614
+contents of parent/file2
637
+contents of level0/file2
616
639
Use --include-merges or -n0 to see merged revisions.
641
self.check_log(expected, ['-p', '--short'])
619
643
def test_log_show_diff_line(self):
621
out,err = self.run_bzr('log -p --line')
622
self.assertEqual('', err)
623
log = normalize_log(out)
624
644
# Not supported by this formatter so expect plain output
625
self.assertEqualDiff(subst_dates(log), """\
626
2: Lorem Ipsum 2005-11-22 [merge] merge branch 1
627
1: Lorem Ipsum 2005-11-22 first post
630
def test_log_show_diff_file(self):
631
"""Only the diffs for the given file are to be shown"""
633
out,err = self.run_bzr('log -p --short file2')
634
self.assertEqual('', err)
635
log = normalize_log(out)
636
self.assertEqualDiff(subst_dates(log), """\
646
2: Lorem Ipsum 2005-11-22 [merge] merge branch level1
647
1: Lorem Ipsum 2005-11-22 in branch level0
649
self.check_log(expected, ['-p', '--line'])
651
def test_log_show_diff_file1(self):
652
"""Only the diffs for the given file are to be shown"""
654
1 Lorem Ipsum\t2005-11-22
656
=== added file 'file1'
657
--- file1\t1970-01-01 00:00:00 +0000
658
+++ file1\t2005-11-22 00:00:01 +0000
660
+contents of level0/file1
663
self.check_log(expected, ['-p', '--short', 'file1'])
665
def test_log_show_diff_file2(self):
666
"""Only the diffs for the given file are to be shown"""
637
668
2 Lorem Ipsum\t2005-11-22 [merge]
639
670
=== modified file 'file2'
640
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
641
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
671
--- file2\t2005-11-22 00:00:01 +0000
672
+++ file2\t2005-11-22 00:00:02 +0000
643
-contents of parent/file2
674
-contents of level0/file2
646
677
1 Lorem Ipsum\t2005-11-22
648
679
=== added file 'file2'
649
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
650
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
680
--- file2\t1970-01-01 00:00:00 +0000
681
+++ file2\t2005-11-22 00:00:01 +0000
652
+contents of parent/file2
683
+contents of level0/file2
654
685
Use --include-merges or -n0 to see merged revisions.
656
out,err = self.run_bzr('log -p --short file1')
657
self.assertEqual('', err)
658
log = normalize_log(out)
659
self.assertEqualDiff(subst_dates(log), """\
660
1 Lorem Ipsum\t2005-11-22
662
=== added file 'file1'
663
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
664
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
666
+contents of parent/file1
687
self.check_log(expected, ['-p', '--short', 'file2'])
690
class TestLogUnicodeDiff(TestLog):
670
692
def test_log_show_diff_non_ascii(self):
671
693
# Smoke test for bug #328007 UnicodeDecodeError on 'log -p'