51
45
tree.commit(message='message2')
52
46
tree.add('meep.txt')
53
47
tree.commit(message='message3')
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):
48
self.full_log = self.run_bzr(["log", path])[0]
96
51
def test_log_null_end_revspec(self):
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)
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)
106
full_log = self.run_bzr(['log'])[0]
107
60
log = self.run_bzr("log -r 1..")[0]
108
self.assertEqualDiff(log, full_log)
61
self.assertEqualDiff(log, self.full_log)
110
63
def test_log_null_begin_revspec(self):
111
self.make_linear_branch()
112
full_log = self.run_bzr(['log'])[0]
113
65
log = self.run_bzr("log -r ..3")[0]
114
self.assertEqualDiff(full_log, log)
66
self.assertEqualDiff(self.full_log, log)
116
68
def test_log_null_both_revspecs(self):
117
self.make_linear_branch()
118
full_log = self.run_bzr(['log'])[0]
119
70
log = self.run_bzr("log -r ..")[0]
120
self.assertEqualDiff(full_log, log)
71
self.assertEqualDiff(self.full_log, log)
122
73
def test_log_zero_revspec(self):
123
self.make_minimal_branch()
124
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
75
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
127
78
def test_log_zero_begin_revspec(self):
128
self.make_linear_branch()
129
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
80
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
130
81
['log', '-r0..2'])
132
83
def test_log_zero_end_revspec(self):
133
self.make_linear_branch()
134
self.run_bzr_error(['bzr: ERROR: Logging revision 0 is invalid.'],
85
self.run_bzr_error('bzr: ERROR: Logging revision 0 is invalid.',
135
86
['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'])
137
94
def test_log_negative_begin_revspec_full_log(self):
138
self.make_linear_branch()
139
full_log = self.run_bzr(['log'])[0]
140
96
log = self.run_bzr("log -r -3..")[0]
141
self.assertEqualDiff(full_log, log)
97
self.assertEqualDiff(self.full_log, log)
143
99
def test_log_negative_both_revspec_full_log(self):
144
self.make_linear_branch()
145
full_log = self.run_bzr(['log'])[0]
146
101
log = self.run_bzr("log -r -3..-1")[0]
147
self.assertEqualDiff(full_log, log)
102
self.assertEqualDiff(self.full_log, log)
149
104
def test_log_negative_both_revspec_partial(self):
150
self.make_linear_branch()
151
106
log = self.run_bzr("log -r -3..-2")[0]
152
107
self.assertTrue('revno: 1\n' in log)
153
108
self.assertTrue('revno: 2\n' in log)
154
109
self.assertTrue('revno: 3\n' not in log)
156
111
def test_log_negative_begin_revspec(self):
157
self.make_linear_branch()
158
113
log = self.run_bzr("log -r -2..")[0]
159
114
self.assertTrue('revno: 1\n' not in log)
160
115
self.assertTrue('revno: 2\n' in log)
161
116
self.assertTrue('revno: 3\n' in log)
163
118
def test_log_positive_revspecs(self):
164
self.make_linear_branch()
165
full_log = self.run_bzr(['log'])[0]
166
120
log = self.run_bzr("log -r 1..3")[0]
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))
121
self.assertEqualDiff(self.full_log, log)
174
123
def test_log_reversed_revspecs(self):
175
self.make_linear_branch()
176
125
self.run_bzr_error(('bzr: ERROR: Start revision must be older than '
177
126
'the end revision.\n',),
178
127
['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',),
186
129
def test_log_revno_n_path(self):
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]
130
self._prepare(path='branch1')
131
self._prepare(path='branch2')
132
log = self.run_bzr("log -r revno:2:branch1..revno:3:branch2",
192
134
log = self.run_bzr("log -r revno:1:branch2..revno:3:branch2")[0]
193
full_log = self.run_bzr(['log'], working_dir='branch2')[0]
194
self.assertEqualDiff(full_log, log)
135
self.assertEqualDiff(self.full_log, log)
195
136
log = self.run_bzr("log -r revno:1:branch2")[0]
196
137
self.assertTrue('revno: 1\n' in log)
197
138
self.assertTrue('revno: 2\n' not in log)
199
140
self.assertTrue('branch nick: branch1\n' not in log)
201
142
def test_log_nonexistent_revno(self):
202
self.make_minimal_branch()
203
(out, err) = self.run_bzr_error(
204
["bzr: ERROR: Requested revision: '1234' "
205
"does not exist in branch:"],
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:"])
208
148
def test_log_nonexistent_dotted_revno(self):
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'])
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:"])
215
154
def test_log_change_revno(self):
216
self.make_linear_branch()
217
156
expected_log = self.run_bzr("log -r 1")[0]
218
157
log = self.run_bzr("log -c 1")[0]
219
158
self.assertEqualDiff(expected_log, log)
221
160
def test_log_change_nonexistent_revno(self):
222
self.make_minimal_branch()
223
(out, err) = self.run_bzr_error(
224
["bzr: ERROR: Requested revision: '1234' "
225
"does not exist in branch:"],
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:"])
228
166
def test_log_change_nonexistent_dotted_revno(self):
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'])
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:"])
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'],
172
def test_log_change_single_revno(self):
174
self.run_bzr_error('bzr: ERROR: Option --change does not'
175
' accept revision ranges',
239
176
['log', '--change', '2..3'])
241
178
def test_log_change_incompatible_with_revision(self):
242
self.run_bzr_error(['bzr: ERROR: --revision and --change'
243
' are mutually exclusive'],
180
self.run_bzr_error('bzr: ERROR: --revision and --change'
181
' are mutually exclusive',
244
182
['log', '--change', '2', '--revision', '3'])
246
184
def test_log_nonexistent_file(self):
247
self.make_minimal_branch()
248
185
# files that don't exist in either the basis tree or working tree
249
186
# should give an error
187
wt = self.make_branch_and_tree('.')
250
188
out, err = self.run_bzr('log does-not-exist', retcode=3)
251
self.assertContainsRe(err,
252
'Path unknown at end or start of revision range: '
189
self.assertContainsRe(
190
err, 'Path unknown at end or start of revision range: does-not-exist')
255
192
def test_log_with_tags(self):
256
tree = self.make_linear_branch(format='dirstate-tags')
193
tree = self._prepare(format='dirstate-tags')
257
194
branch = tree.branch
258
195
branch.tags.set_tag('tag1', branch.get_rev_id(1))
259
196
branch.tags.set_tag('tag1.1', branch.get_rev_id(1))
364
294
self.assertUseLongDeltaFormat(['log', '--long', '-vv'])
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())
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>')
389
337
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, """\
391
343
------------------------------------------------------------
393
345
committer: Lorem Ipsum <test@example.com>
395
347
timestamp: Just now
398
350
------------------------------------------------------------
399
351
revno: 1.1.2 [merge]
400
352
committer: Lorem Ipsum <test@example.com>
402
354
timestamp: Just now
405
357
------------------------------------------------------------
407
359
committer: Lorem Ipsum <test@example.com>
360
branch nick: smallerchild
409
361
timestamp: Just now
412
364
------------------------------------------------------------
414
366
committer: Lorem Ipsum <test@example.com>
416
368
timestamp: Just now
419
371
------------------------------------------------------------
421
373
committer: Lorem Ipsum <test@example.com>
423
375
timestamp: Just now
427
self.check_log(expected, ['-n0'])
429
380
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, """\
431
386
------------------------------------------------------------
433
388
committer: Lorem Ipsum <test@example.com>
435
390
timestamp: Just now
438
393
------------------------------------------------------------
440
395
committer: Lorem Ipsum <test@example.com>
442
397
timestamp: Just now
446
self.check_log(expected, ['--long', '-n1'])
448
402
def test_force_merge_revisions_on(self):
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'])
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
468
425
def test_include_merges(self):
469
426
# Confirm --include-merges gives the same output as -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)
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)
475
431
self.assertEqual(out_im, out_n0)
477
433
def test_force_merge_revisions_N(self):
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'])
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
494
453
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, """\
496
459
------------------------------------------------------------
497
460
revno: 1.1.2 [merge]
498
461
committer: Lorem Ipsum <test@example.com>
500
463
timestamp: Just now
503
466
------------------------------------------------------------
505
468
committer: Lorem Ipsum <test@example.com>
469
branch nick: smallerchild
507
470
timestamp: Just now
511
self.check_log(expected, ['-n0', '-r1.1.2'])
513
475
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, """\
515
481
------------------------------------------------------------
516
482
revno: 1.1.2 [merge]
517
483
committer: Lorem Ipsum <test@example.com>
519
485
timestamp: Just now
522
488
------------------------------------------------------------
524
490
committer: Lorem Ipsum <test@example.com>
491
branch nick: smallerchild
526
492
timestamp: Just now
529
495
------------------------------------------------------------
531
497
committer: Lorem Ipsum <test@example.com>
533
499
timestamp: Just now
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())
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>')
559
532
def test_log_show_diff_long_with_merges(self):
560
534
out,err = self.run_bzr('log -p -n0')
561
535
self.assertEqual('', err)
562
log = test_log.normalize_log(out)
536
log = normalize_log(out)
537
self.assertEqualDiff(subst_dates(log), """\
564
538
------------------------------------------------------------
566
540
committer: Lorem Ipsum <test@example.com>
568
542
timestamp: Just now
572
546
=== modified file 'file2'
573
--- file2\t2005-11-22 00:00:01 +0000
574
+++ file2\t2005-11-22 00:00:02 +0000
547
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
548
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
576
-contents of level0/file2
550
-contents of parent/file2
578
552
------------------------------------------------------------
580
554
committer: Lorem Ipsum <test@example.com>
582
556
timestamp: Just now
586
560
=== modified file 'file2'
587
--- file2\t2005-11-22 00:00:01 +0000
588
+++ file2\t2005-11-22 00:00:02 +0000
561
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
562
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
590
-contents of level0/file2
564
-contents of parent/file2
592
566
------------------------------------------------------------
594
568
committer: Lorem Ipsum <test@example.com>
596
570
timestamp: Just now
600
574
=== added file 'file1'
601
--- file1\t1970-01-01 00:00:00 +0000
602
+++ file1\t2005-11-22 00:00:01 +0000
575
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
576
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
604
+contents of level0/file1
578
+contents of parent/file1
606
580
=== added file 'file2'
607
--- file2\t1970-01-01 00:00:00 +0000
608
+++ file2\t2005-11-22 00:00:01 +0000
581
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
582
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
610
+contents of level0/file2
612
self.check_log(expected, ['-p', '-n0'])
584
+contents of parent/file2
614
587
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), """\
616
593
2 Lorem Ipsum\t2005-11-22 [merge]
618
595
=== modified file 'file2'
619
--- file2\t2005-11-22 00:00:01 +0000
620
+++ file2\t2005-11-22 00:00:02 +0000
596
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
597
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
622
-contents of level0/file2
599
-contents of parent/file2
625
602
1 Lorem Ipsum\t2005-11-22
627
604
=== added file 'file1'
628
--- file1\t1970-01-01 00:00:00 +0000
629
+++ file1\t2005-11-22 00:00:01 +0000
605
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
606
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
631
+contents of level0/file1
608
+contents of parent/file1
632
609
\x20\x20\x20\x20\x20\x20
633
610
=== added file 'file2'
634
--- file2\t1970-01-01 00:00:00 +0000
635
+++ file2\t2005-11-22 00:00:01 +0000
611
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
612
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
637
+contents of level0/file2
614
+contents of parent/file2
639
616
Use --include-merges or -n0 to see merged revisions.
641
self.check_log(expected, ['-p', '--short'])
643
619
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)
644
624
# Not supported by this formatter so expect plain output
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"""
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), """\
668
637
2 Lorem Ipsum\t2005-11-22 [merge]
670
639
=== modified file 'file2'
671
--- file2\t2005-11-22 00:00:01 +0000
672
+++ file2\t2005-11-22 00:00:02 +0000
640
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
641
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
674
-contents of level0/file2
643
-contents of parent/file2
677
646
1 Lorem Ipsum\t2005-11-22
679
648
=== added file 'file2'
680
--- file2\t1970-01-01 00:00:00 +0000
681
+++ file2\t2005-11-22 00:00:01 +0000
649
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
650
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
683
+contents of level0/file2
652
+contents of parent/file2
685
654
Use --include-merges or -n0 to see merged revisions.
687
self.check_log(expected, ['-p', '--short', 'file2'])
690
class TestLogUnicodeDiff(TestLog):
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
692
670
def test_log_show_diff_non_ascii(self):
693
671
# Smoke test for bug #328007 UnicodeDecodeError on 'log -p'