1198
1198
return mainline_revs, rev_nos, wt
1200
def make_tree_with_many_merges(self):
1200
def make_branch_with_many_merges(self):
1201
1201
"""Create a tree with well-known revision ids"""
1202
wt = self.make_branch_and_tree('tree1')
1203
self.build_tree_contents([('tree1/f', '1\n')])
1204
wt.add(['f'], ['f-id'])
1205
wt.commit('commit one', rev_id='1')
1206
wt.commit('commit two', rev_id='2')
1208
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
1209
self.build_tree_contents([('tree3/f', '1\n2\n3a\n')])
1210
tree3.commit('commit three a', rev_id='3a')
1212
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
1213
tree2.merge_from_branch(tree3.branch)
1214
tree2.commit('commit three b', rev_id='3b')
1216
wt.merge_from_branch(tree2.branch)
1217
wt.commit('commit three c', rev_id='3c')
1218
tree2.commit('four-a', rev_id='4a')
1220
wt.merge_from_branch(tree2.branch)
1221
wt.commit('four-b', rev_id='4b')
1202
builder = self.make_branch_builder('tree1')
1203
builder.start_series()
1204
builder.build_snapshot('1', None, [
1205
('add', ('', 'TREE_ROOT', 'directory', '')),
1206
('add', ('f', 'f-id', 'file', '1\n'))])
1207
builder.build_snapshot('2', ['1'], [])
1208
builder.build_snapshot('3a', ['2'], [
1209
('modify', ('f-id', '1\n2\n3a\n'))])
1210
builder.build_snapshot('3b', ['2', '3a'], [
1211
('modify', ('f-id', '1\n2\n3a\n'))])
1212
builder.build_snapshot('3c', ['2', '3b'], [
1213
('modify', ('f-id', '1\n2\n3a\n'))])
1214
builder.build_snapshot('4a', ['3b'], [])
1215
builder.build_snapshot('4b', ['3c', '4a'], [])
1216
builder.finish_series()
1223
1230
mainline_revs = [None, '1', '2', '3c', '4b']
1224
1231
rev_nos = {'1':1, '2':2, '3c': 3, '4b':4}
1231
1238
'4a': '2.2.2', # second commit tree 2
1232
1239
'4b': '4', # merges 4a to main
1234
return mainline_revs, rev_nos, wt
1241
return mainline_revs, rev_nos, builder.get_branch()
1236
1243
def test_get_view_revisions_forward(self):
1237
1244
"""Test the get_view_revisions method"""
1298
1305
def test_get_view_revisions_merge2(self):
1299
1306
"""Test get_view_revisions when there are merges"""
1300
mainline_revs, rev_nos, wt = self.make_tree_with_many_merges()
1302
self.addCleanup(wt.unlock)
1307
mainline_revs, rev_nos, b = self.make_branch_with_many_merges()
1309
self.addCleanup(b.unlock)
1303
1310
revisions = list(log.get_view_revisions(
1304
mainline_revs, rev_nos, wt.branch, 'forward'))
1311
mainline_revs, rev_nos, b, 'forward'))
1305
1312
expected = [('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),
1306
('3a', '2.1.1', 1), ('3b', '2.2.1', 1), ('4b', '4', 0),
1313
('3b', '2.2.1', 1), ('3a', '2.1.1', 2), ('4b', '4', 0),
1307
1314
('4a', '2.2.2', 1)]
1308
1315
self.assertEqual(expected, revisions)
1309
1316
revisions = list(log.get_view_revisions(
1310
mainline_revs, rev_nos, wt.branch, 'forward',
1317
mainline_revs, rev_nos, b, 'forward',
1311
1318
include_merges=False))
1312
1319
self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),
1313
1320
('4b', '4', 0)],
1317
1324
def test_file_id_for_range(self):
1318
mainline_revs, rev_nos, wt = self.make_tree_with_many_merges()
1320
self.addCleanup(wt.unlock)
1325
mainline_revs, rev_nos, b = self.make_branch_with_many_merges()
1327
self.addCleanup(b.unlock)
1322
1329
def rev_from_rev_id(revid, branch):
1323
1330
revspec = revisionspec.RevisionSpec.from_string('revid:%s' % revid)
1337
rev_3a = rev_from_rev_id('3a', wt.branch)
1338
rev_4b = rev_from_rev_id('4b', wt.branch)
1339
self.assertEqual([('3c', '3', 0), ('3a', '2.1.1', 1)],
1344
rev_3a = rev_from_rev_id('3a', b)
1345
rev_4b = rev_from_rev_id('4b', b)
1346
self.assertEqual([('3c', '3', 0), ('3b', '2.2.1', 1), ('3a', '2.1.1', 2)],
1340
1347
view_revs(rev_3a, rev_4b, 'f-id', 'reverse'))
1341
1348
# Note: 3c still appears before 3a here because of depth-based sorting
1342
self.assertEqual([('3c', '3', 0), ('3a', '2.1.1', 1)],
1349
self.assertEqual([('3c', '3', 0), ('3b', '2.2.1', 1), ('3a', '2.1.1', 2)],
1343
1350
view_revs(rev_3a, rev_4b, 'f-id', 'forward'))