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
400
------------------------------------------------------------
401
Use --levels 0 (or -n0) to see merged revisions.
446
self.check_log(expected, ['--long', '-n1'])
404
448
def test_force_merge_revisions_on(self):
405
self._prepare_short()
406
out,err = self.run_bzr('log --short -n0')
407
self.assertEqual('', err)
408
log = normalize_log(out)
409
self.assertEqualDiff(log, """\
410
2 Joe Foo\t2005-11-22 [merge]
413
1.1.2 Joe Foo\t2005-11-22 [merge]
416
1.2.1 Joe Foo\t2005-11-22
419
1.1.1 Joe Foo\t2005-11-22
422
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'])
468
def test_include_merges(self):
469
# 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)
475
self.assertEqual(out_im, out_n0)
427
477
def test_force_merge_revisions_N(self):
428
self._prepare_short()
429
out,err = self.run_bzr('log --short -n2')
430
self.assertEqual('', err)
431
log = normalize_log(out)
432
self.assertEqualDiff(log, """\
433
2 Joe Foo\t2005-11-22 [merge]
436
1.1.2 Joe Foo\t2005-11-22 [merge]
439
1.1.1 Joe Foo\t2005-11-22
442
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'])
447
494
def test_merges_single_merge_rev(self):
449
out,err = self.run_bzr('log -n0 -r1.1.2')
450
self.assertEqual('', err)
451
log = normalize_log(out)
452
self.assertEqualDiff(log, """\
453
496
------------------------------------------------------------
454
497
revno: 1.1.2 [merge]
455
498
committer: Lorem Ipsum <test@example.com>
457
500
timestamp: Just now
460
503
------------------------------------------------------------
462
505
committer: Lorem Ipsum <test@example.com>
463
branch nick: smallerchild
464
507
timestamp: Just now
511
self.check_log(expected, ['-n0', '-r1.1.2'])
469
513
def test_merges_partial_range(self):
471
out, err = self.run_bzr('log -n0 -r1.1.1..1.1.2')
472
self.assertEqual('', err)
473
log = normalize_log(out)
474
self.assertEqualDiff(log, """\
475
515
------------------------------------------------------------
476
516
revno: 1.1.2 [merge]
477
517
committer: Lorem Ipsum <test@example.com>
479
519
timestamp: Just now
482
522
------------------------------------------------------------
484
524
committer: Lorem Ipsum <test@example.com>
485
branch nick: smallerchild
486
526
timestamp: Just now
489
529
------------------------------------------------------------
491
531
committer: Lorem Ipsum <test@example.com>
493
533
timestamp: Just now
499
def subst_dates(string):
500
"""Replace date strings with constant values."""
501
return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
502
'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
505
class TestLogDiff(TestCaseWithoutPropsHandler):
508
parent_tree = self.make_branch_and_tree('parent')
509
self.build_tree(['parent/file1', 'parent/file2'])
510
parent_tree.add('file1')
511
parent_tree.add('file2')
512
parent_tree.commit(message='first post',
513
timestamp=1132586655, timezone=36000,
514
committer='Lorem Ipsum <test@example.com>')
515
child_tree = parent_tree.bzrdir.sprout('child').open_workingtree()
516
self.build_tree_contents([('child/file2', 'hello\n')])
517
child_tree.commit(message='branch 1',
518
timestamp=1132586700, timezone=36000,
519
committer='Lorem Ipsum <test@example.com>')
520
parent_tree.merge_from_branch(child_tree.branch)
521
parent_tree.commit(message='merge branch 1',
522
timestamp=1132586800, timezone=36000,
523
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())
526
559
def test_log_show_diff_long_with_merges(self):
528
560
out,err = self.run_bzr('log -p -n0')
529
561
self.assertEqual('', err)
530
log = normalize_log(out)
531
self.assertEqualDiff(subst_dates(log), """\
562
log = test_log.normalize_log(out)
532
564
------------------------------------------------------------
534
566
committer: Lorem Ipsum <test@example.com>
536
568
timestamp: Just now
540
572
=== modified file 'file2'
541
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
542
+++ 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
544
-contents of parent/file2
576
-contents of level0/file2
546
578
------------------------------------------------------------
548
580
committer: Lorem Ipsum <test@example.com>
550
582
timestamp: Just now
554
586
=== modified file 'file2'
555
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
556
+++ 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
558
-contents of parent/file2
590
-contents of level0/file2
560
592
------------------------------------------------------------
562
594
committer: Lorem Ipsum <test@example.com>
564
596
timestamp: Just now
568
600
=== added file 'file1'
569
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
570
+++ 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
572
+contents of parent/file1
604
+contents of level0/file1
574
606
=== added file 'file2'
575
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
576
+++ 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
578
+contents of parent/file2
610
+contents of level0/file2
612
self.check_log(expected, ['-p', '-n0'])
581
614
def test_log_show_diff_short(self):
583
out,err = self.run_bzr('log -p --short')
584
self.assertEqual('', err)
585
log = normalize_log(out)
586
self.assertEqualDiff(subst_dates(log), """\
587
616
2 Lorem Ipsum\t2005-11-22 [merge]
589
618
=== modified file 'file2'
590
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
591
+++ 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
593
-contents of parent/file2
622
-contents of level0/file2
596
625
1 Lorem Ipsum\t2005-11-22
598
627
=== added file 'file1'
599
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
600
+++ 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
602
+contents of parent/file1
631
+contents of level0/file1
603
632
\x20\x20\x20\x20\x20\x20
604
633
=== added file 'file2'
605
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
606
+++ 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
608
+contents of parent/file2
637
+contents of level0/file2
610
Use --levels 0 (or -n0) to see merged revisions.
639
Use --include-merges or -n0 to see merged revisions.
641
self.check_log(expected, ['-p', '--short'])
613
643
def test_log_show_diff_line(self):
615
out,err = self.run_bzr('log -p --line')
616
self.assertEqual('', err)
617
log = normalize_log(out)
618
644
# Not supported by this formatter so expect plain output
619
self.assertEqualDiff(subst_dates(log), """\
620
2: Lorem Ipsum 2005-11-22 [merge] merge branch 1
621
1: Lorem Ipsum 2005-11-22 first post
624
def test_log_show_diff_file(self):
625
"""Only the diffs for the given file are to be shown"""
627
out,err = self.run_bzr('log -p --short file2')
628
self.assertEqual('', err)
629
log = normalize_log(out)
630
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"""
631
668
2 Lorem Ipsum\t2005-11-22 [merge]
633
670
=== modified file 'file2'
634
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
635
+++ 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
637
-contents of parent/file2
674
-contents of level0/file2
640
677
1 Lorem Ipsum\t2005-11-22
642
679
=== added file 'file2'
643
--- file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
644
+++ file2\tYYYY-MM-DD HH:MM:SS +ZZZZ
646
+contents of parent/file2
648
Use --levels 0 (or -n0) to see merged revisions.
650
out,err = self.run_bzr('log -p --short file1')
651
self.assertEqual('', err)
652
log = normalize_log(out)
653
self.assertEqualDiff(subst_dates(log), """\
654
1 Lorem Ipsum\t2005-11-22
656
=== added file 'file1'
657
--- file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
658
+++ file1\tYYYY-MM-DD HH:MM:SS +ZZZZ
660
+contents of parent/file1
680
--- file2\t1970-01-01 00:00:00 +0000
681
+++ file2\t2005-11-22 00:00:01 +0000
683
+contents of level0/file2
685
Use --include-merges or -n0 to see merged revisions.
687
self.check_log(expected, ['-p', '--short', 'file2'])
690
class TestLogUnicodeDiff(TestLog):
664
692
def test_log_show_diff_non_ascii(self):
665
693
# Smoke test for bug #328007 UnicodeDecodeError on 'log -p'