316
316
rev_nos = {'1': 1, '2': 2, '3': 3}
317
317
return mainline_revs, rev_nos, wt
319
def pseudo_merge(self, source, target):
320
revision_id = source.last_revision()
321
target.branch.fetch(source.branch, revision_id)
322
target.add_pending_merge(revision_id)
324
319
def make_tree_with_merges(self):
325
320
"""Create a tree with well-known revision ids and a merge"""
326
321
mainline_revs, rev_nos, wt = self.make_tree_with_commits()
327
322
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
328
323
tree2.commit('four-a', rev_id='4a')
329
self.pseudo_merge(tree2, wt)
324
wt.merge_from_branch(tree2.branch)
330
325
wt.commit('four-b', rev_id='4b')
331
326
mainline_revs.append('4b')
332
327
rev_nos['4b'] = 4
333
329
return mainline_revs, rev_nos, wt
335
331
def make_tree_with_many_merges(self):
337
333
wt = self.make_branch_and_tree('tree1')
338
334
wt.commit('commit one', rev_id='1')
339
335
wt.commit('commit two', rev_id='2')
340
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
341
336
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
342
337
tree3.commit('commit three a', rev_id='3a')
343
self.pseudo_merge(tree3, tree2)
338
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
339
tree2.merge_from_branch(tree3.branch)
344
340
tree2.commit('commit three b', rev_id='3b')
345
self.pseudo_merge(tree2, wt)
341
wt.merge_from_branch(tree2.branch)
346
342
wt.commit('commit three c', rev_id='3c')
347
343
tree2.commit('four-a', rev_id='4a')
348
self.pseudo_merge(tree2, wt)
344
wt.merge_from_branch(tree2.branch)
349
345
wt.commit('four-b', rev_id='4b')
350
346
mainline_revs = [None, '1', '2', '3c', '4b']
351
rev_nos = {'1': 1, '2': 2, '3c': 3, '4b': 4}
347
rev_nos = {'1':1, '2':2, '3c': 3, '4b':4}
348
full_rev_nos_for_reference = {
351
'3a': '2.2.1', #first commit tree 3
352
'3b': '2.1.1', # first commit tree 2
353
'3c': '3', #merges 3b to main
354
'4a': '2.1.2', # second commit tree 2
355
'4b': '4', # merges 4a to main
352
357
return mainline_revs, rev_nos, wt
354
359
def test_get_view_revisions_forward(self):
366
372
mainline_revs, rev_nos, wt = self.make_tree_with_commits()
367
373
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
369
self.assertEqual(revisions, [('3', 3, 0), ('2', 2, 0), ('1', 1, 0), ])
375
self.assertEqual([('3', '3', 0), ('2', '2', 0), ('1', '1', 0), ],
370
377
revisions2 = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
371
378
'reverse', include_merges=False))
372
379
self.assertEqual(revisions, revisions2)
376
383
mainline_revs, rev_nos, wt = self.make_tree_with_merges()
377
384
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
379
self.assertEqual(revisions, [('1', 1, 0), ('2', 2, 0), ('3', 3, 0),
380
('4b', 4, 0), ('4a', None, 1)])
386
self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3', '3', 0),
387
('4b', '4', 0), ('4a', '3.1.1', 1)],
381
389
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
382
390
'forward', include_merges=False))
383
self.assertEqual(revisions, [('1', 1, 0), ('2', 2, 0), ('3', 3, 0),
391
self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3', '3', 0),
386
395
def test_get_view_revisions_merge_reverse(self):
387
396
"""Test get_view_revisions in reverse when there are merges"""
388
397
mainline_revs, rev_nos, wt = self.make_tree_with_merges()
389
398
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
391
self.assertEqual(revisions, [('4b', 4, 0), ('4a', None, 1),
392
('3', 3, 0), ('2', 2, 0), ('1', 1, 0)])
400
self.assertEqual([('4b', '4', 0), ('4a', '3.1.1', 1),
401
('3', '3', 0), ('2', '2', 0), ('1', '1', 0)],
393
403
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
394
404
'reverse', include_merges=False))
395
self.assertEqual(revisions, [('4b', 4, 0), ('3', 3, 0), ('2', 2, 0),
405
self.assertEqual([('4b', '4', 0), ('3', '3', 0), ('2', '2', 0),
398
409
def test_get_view_revisions_merge2(self):
399
410
"""Test get_view_revisions when there are merges"""
400
411
mainline_revs, rev_nos, wt = self.make_tree_with_many_merges()
401
412
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
403
expected = [('1', 1, 0), ('2', 2, 0), ('3c', 3, 0), ('3a', None, 1),
404
('3b', None, 1), ('4b', 4, 0), ('4a', None, 1)]
405
self.assertEqual(revisions, expected)
414
expected = [('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),
415
('3a', '2.2.1', 1), ('3b', '2.1.1', 1), ('4b', '4', 0),
417
self.assertEqual(expected, revisions)
406
418
revisions = list(get_view_revisions(mainline_revs, rev_nos, wt.branch,
407
419
'forward', include_merges=False))
408
self.assertEqual(revisions, [('1', 1, 0), ('2', 2, 0), ('3c', 3, 0),
420
self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),