309
309
tree_a.rename_one('a', 'b')
310
310
tree_a.commit('2')
311
bzrdir_b = tree_a.controldir.sprout('B', revision_id='rev-1')
311
bzrdir_b = tree_a.controldir.sprout('B', revision_id=b'rev-1')
312
312
tree_b = bzrdir_b.open_workingtree()
313
313
tree_b.lock_write()
314
314
self.addCleanup(tree_b.unlock)
1245
1245
builder = self.get_builder()
1246
1246
builder.build_snapshot(None,
1247
1247
[('add', ('', None, 'directory', None))],
1248
revision_id='A-id' )
1249
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1250
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1248
revision_id=b'A-id' )
1249
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1250
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1253
1253
def setup_criss_cross_graph(self):
1263
1263
builder = self.setup_simple_graph()
1264
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1265
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1264
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1265
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1268
1268
def make_Merger(self, builder, other_revision_id, interesting_files=None):
1295
1295
def test_cache_trees_with_revision_ids_having_revision_id(self):
1296
1296
merger = self.make_Merger(self.setup_simple_graph(), 'C-id')
1297
1297
original_cache = dict(merger._cached_trees)
1298
tree = merger.this_branch.repository.revision_tree('B-id')
1298
tree = merger.this_branch.repository.revision_tree(b'B-id')
1299
1299
original_cache['B-id'] = tree
1300
1300
merger.cache_trees_with_revision_ids([tree])
1301
1301
self.assertEqual(original_cache, merger._cached_trees)
1314
1314
self.assertEqual(['B-id', 'C-id'], [t.get_revision_id()
1315
1315
for t in merger._lca_trees])
1316
1316
# If we swap the order, we should get a different lca order
1317
builder.build_snapshot(['E-id'], [], revision_id='F-id')
1317
builder.build_snapshot(['E-id'], [], revision_id=b'F-id')
1318
1318
merger = self.make_Merger(builder, 'D-id')
1319
1319
self.assertEqual(['C-id', 'B-id'], [t.get_revision_id()
1320
1320
for t in merger._lca_trees])
1332
1332
builder = self.setup_criss_cross_graph()
1333
builder.build_snapshot(['A-id'], [], revision_id='F-id')
1334
builder.build_snapshot(['E-id', 'F-id'], [], revision_id='H-id')
1335
builder.build_snapshot(['D-id', 'F-id'], [], revision_id='G-id')
1333
builder.build_snapshot(['A-id'], [], revision_id=b'F-id')
1334
builder.build_snapshot(['E-id', 'F-id'], [], revision_id=b'H-id')
1335
builder.build_snapshot(['D-id', 'F-id'], [], revision_id=b'G-id')
1336
1336
merger = self.make_Merger(builder, 'H-id')
1337
1337
self.assertEqual(['B-id', 'C-id', 'F-id'],
1338
1338
[t.get_revision_id() for t in merger._lca_trees])
1346
1346
builder = self.get_builder()
1347
1347
builder.build_snapshot(None,
1348
1348
[('add', ('', None, 'directory', None))],
1349
revision_id=b'A-id')
1350
1350
builder.build_snapshot([],
1351
1351
[('add', ('', None, 'directory', None))],
1353
builder.build_snapshot(['A-id', 'B-id'], [], revision_id='D-id')
1354
builder.build_snapshot(['A-id', 'B-id'], [], revision_id='C-id')
1352
revision_id=b'B-id')
1353
builder.build_snapshot(['A-id', 'B-id'], [], revision_id=b'D-id')
1354
builder.build_snapshot(['A-id', 'B-id'], [], revision_id=b'C-id')
1355
1355
merger = self.make_Merger(builder, 'D-id')
1356
1356
self.assertEqual('A-id', merger.base_rev_id)
1357
1357
self.assertTrue(merger._is_criss_cross)
1407
1407
builder.build_snapshot(None,
1408
1408
[('add', (u'', 'a-root-id', 'directory', None)),
1409
1409
('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1410
revision_id=b'A-id')
1411
1411
builder.build_snapshot(['A-id'],
1412
1412
[('modify', ('a', 'a\nb\nC\nc\n'))],
1413
revision_id=b'C-id')
1414
1414
builder.build_snapshot(['A-id'],
1415
1415
[('modify', ('a', 'a\nB\nb\nc\n'))],
1416
revision_id=b'B-id')
1417
1417
builder.build_snapshot(['C-id', 'B-id'],
1418
1418
[('modify', ('a', 'a\nB\nb\nC\nc\nE\n'))],
1419
revision_id=b'E-id')
1420
1420
builder.build_snapshot(['B-id', 'C-id'],
1421
1421
[('modify', ('a', 'a\nB\nb\nC\nc\n'))],
1422
revision_id='D-id', )
1422
revision_id=b'D-id', )
1423
1423
merge_obj = self.make_merge_obj(builder, 'E-id')
1425
1425
self.assertEqual(['B-id', 'C-id'], [t.get_revision_id()
1452
1452
builder = self.get_builder()
1453
1453
builder.build_snapshot(None,
1454
1454
[('add', (u'', 'a-root-id', 'directory', None))],
1455
revision_id=b'A-id')
1456
1456
builder.build_snapshot(['A-id'],
1457
1457
[('add', (u'foo', 'foo-id', 'file', 'a\nb\nc\n'))],
1458
revision_id=b'B-id')
1459
1459
builder.build_snapshot(['A-id'],
1460
1460
[('add', (u'bar', 'bar-id', 'file', 'd\ne\nf\n'))],
1461
revision_id=b'C-id')
1462
1462
builder.build_snapshot(['B-id', 'C-id'],
1463
1463
[('add', (u'bar', 'bar-id', 'file', 'd\ne\nf\n'))],
1464
revision_id=b'D-id')
1465
1465
builder.build_snapshot(['C-id', 'B-id'],
1466
1466
[('add', (u'foo', 'foo-id', 'file', 'a\nb\nc\n'))],
1467
revision_id=b'E-id')
1468
1468
builder.build_snapshot(['E-id', 'D-id'],
1469
1469
[('modify', (u'bar', 'd\ne\nf\nG\n'))],
1471
builder.build_snapshot(['D-id', 'E-id'], [], revision_id='F-id')
1470
revision_id=b'G-id')
1471
builder.build_snapshot(['D-id', 'E-id'], [], revision_id=b'F-id')
1472
1472
merge_obj = self.make_merge_obj(builder, 'G-id')
1474
1474
self.assertEqual(['D-id', 'E-id'], [t.get_revision_id()
1488
1488
builder.build_snapshot(None,
1489
1489
[('add', (u'', 'a-root-id', 'directory', None)),
1490
1490
('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1491
revision_id=b'A-id')
1492
1492
builder.build_snapshot(['A-id'],
1493
1493
[('modify', ('a', 'a\nB\nb\nc\n'))],
1494
revision_id=b'B-id')
1495
1495
builder.build_snapshot(['A-id'],
1496
1496
[('modify', ('a', 'a\nb\nC\nc\n'))],
1497
revision_id=b'C-id')
1498
1498
builder.build_snapshot(['C-id', 'B-id'],
1499
1499
[('modify', ('a', 'a\nB\nb\nC\nc\nE\n'))],
1500
revision_id=b'E-id')
1501
1501
builder.build_snapshot(['B-id', 'C-id'],
1502
1502
[('unversion', 'a')],
1503
revision_id=b'D-id')
1504
1504
merge_obj = self.make_merge_obj(builder, 'E-id')
1506
1506
self.assertEqual(['B-id', 'C-id'], [t.get_revision_id()
1525
1525
builder = self.get_builder()
1526
1526
builder.build_snapshot(None,
1527
1527
[('add', (u'', 'a-root-id', 'directory', None))],
1529
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1528
revision_id=b'A-id')
1529
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1530
1530
builder.build_snapshot(['A-id'],
1531
1531
[('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1532
revision_id=b'C-id')
1533
1533
builder.build_snapshot(['C-id', 'B-id'],
1534
[], revision_id='E-id') # Inherited from C
1534
[], revision_id=b'E-id') # Inherited from C
1535
1535
builder.build_snapshot(['B-id', 'C-id'], # Merged from C
1536
1536
[('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1537
revision_id=b'D-id')
1538
1538
merge_obj = self.make_merge_obj(builder, 'E-id')
1540
1540
self.assertEqual(['B-id', 'C-id'], [t.get_revision_id()
1549
1549
builder.build_snapshot(None,
1550
1550
[('add', (u'', 'a-root-id', 'directory', None)),
1551
1551
('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1553
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1554
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1552
revision_id=b'A-id')
1553
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1554
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1555
1555
builder.build_snapshot(
1556
1556
['C-id', 'B-id'],
1557
[('unversion', 'a')], revision_id='E-id')
1558
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1557
[('unversion', 'a')], revision_id=b'E-id')
1558
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1559
1559
merge_obj = self.make_merge_obj(builder, 'E-id')
1561
1561
entries = list(merge_obj._entries_lca())
1583
1583
builder.build_snapshot(None,
1584
1584
[('add', (u'', 'a-root-id', 'directory', None)),
1585
1585
('add', (u'foo', 'foo-id', 'file', 'content\n'))],
1587
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1586
revision_id=b'A-id')
1587
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1588
1588
builder.build_snapshot(['A-id'],
1589
[('unversion', 'foo')], revision_id='C-id')
1590
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1591
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1589
[('unversion', 'foo')], revision_id=b'C-id')
1590
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1591
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1592
1592
merge_obj = self.make_merge_obj(builder, 'E-id')
1594
1594
entries = list(merge_obj._entries_lca())
1613
1613
builder.build_snapshot(None,
1614
1614
[('add', (u'', 'a-root-id', 'directory', None)),
1615
1615
('add', (u'foo', 'foo-id', 'file', 'content\n'))],
1616
revision_id=b'A-id')
1617
1617
builder.build_snapshot(['A-id'], [
1618
1618
('modify', ('foo', 'new-content\n'))],
1619
revision_id=b'B-id')
1620
1620
builder.build_snapshot(['A-id'],
1621
1621
[('unversion', 'foo')],
1623
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1624
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1622
revision_id=b'C-id')
1623
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1624
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1625
1625
merge_obj = self.make_merge_obj(builder, 'E-id')
1627
1627
entries = list(merge_obj._entries_lca())
1652
1652
builder = self.get_builder()
1653
1653
builder.build_snapshot(None,
1654
1654
[('add', (u'', 'a-root-id', 'directory', None))],
1656
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1655
revision_id=b'A-id')
1656
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1657
1657
builder.build_snapshot(['A-id'],
1658
1658
[('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1659
revision_id=b'C-id')
1660
1660
builder.build_snapshot(['C-id', 'B-id'],
1661
1661
[('unversion', 'a')],
1663
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1662
revision_id=b'E-id')
1663
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1664
1664
merge_obj = self.make_merge_obj(builder, 'E-id')
1666
1666
entries = list(merge_obj._entries_lca())
1670
1670
builder = self.get_builder()
1671
1671
builder.build_snapshot(None,
1672
1672
[('add', (u'', 'a-root-id', 'directory', None))],
1674
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1675
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1673
revision_id=b'A-id')
1674
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1675
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1676
1676
builder.build_snapshot(['C-id', 'B-id'],
1677
1677
[('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
1679
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1678
revision_id=b'E-id')
1679
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1680
1680
merge_obj = self.make_merge_obj(builder, 'E-id')
1682
1682
entries = list(merge_obj._entries_lca())
1706
1706
builder.build_snapshot(None,
1707
1707
[('add', (u'', 'a-root-id', 'directory', None)),
1708
1708
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1710
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1709
revision_id=b'A-id')
1710
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1711
1711
builder.build_snapshot(['A-id'],
1712
1712
[('modify', ('foo', 'B content\n'))],
1714
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1713
revision_id=b'B-id')
1714
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1715
1715
builder.build_snapshot(['C-id', 'B-id'],
1716
1716
[('modify', ('foo', 'E content\n'))],
1718
builder.build_snapshot(['E-id', 'D-id'], [], revision_id='G-id')
1717
revision_id=b'E-id')
1718
builder.build_snapshot(['E-id', 'D-id'], [], revision_id=b'G-id')
1719
1719
builder.build_snapshot(['D-id', 'E-id'],
1720
1720
[('modify', ('foo', 'F content\n'))],
1721
revision_id=b'F-id')
1722
1722
merge_obj = self.make_merge_obj(builder, 'G-id')
1724
1724
self.assertEqual([], list(merge_obj._entries_lca()))
1756
1756
builder.build_snapshot(None,
1757
1757
[('add', (u'', 'a-root-id', 'directory', None)),
1758
1758
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1760
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1759
revision_id=b'A-id')
1760
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1761
1761
builder.build_snapshot(['A-id'],
1762
1762
[('rename', ('foo', 'bar'))],
1764
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1763
revision_id=b'B-id')
1764
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1765
1765
builder.build_snapshot(['C-id', 'B-id'],
1766
1766
[('rename', ('foo', 'bing'))],
1767
revision_id='E-id') # override to bing
1767
revision_id=b'E-id') # override to bing
1768
1768
builder.build_snapshot(['E-id', 'D-id'],
1769
1769
[('rename', ('bing', 'barry'))],
1770
revision_id='G-id') # override to barry
1770
revision_id=b'G-id') # override to barry
1771
1771
builder.build_snapshot(['D-id', 'E-id'],
1772
1772
[('rename', ('bar', 'bing'))],
1773
revision_id='F-id') # Merge in E's change
1773
revision_id=b'F-id') # Merge in E's change
1774
1774
merge_obj = self.make_merge_obj(builder, 'G-id')
1776
1776
self.expectFailure("We don't do an actual heads() check on lca values,"
1794
1794
builder.build_snapshot(None,
1795
1795
[('add', (u'', 'a-root-id', 'directory', None)),
1796
1796
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1798
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1797
revision_id=b'A-id')
1798
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1799
1799
builder.build_snapshot(['A-id'],
1800
1800
[('rename', ('foo', 'bar'))],
1802
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1803
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1801
revision_id=b'B-id')
1802
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1803
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1804
1804
builder.build_snapshot(['E-id', 'D-id'],
1805
1805
[('rename', ('foo', 'bar'))],
1806
revision_id=b'G-id')
1807
1807
builder.build_snapshot(['D-id', 'E-id'],
1808
1808
[('rename', ('bar', 'bing'))],
1809
revision_id='F-id') # should end up conflicting
1809
revision_id=b'F-id') # should end up conflicting
1810
1810
merge_obj = self.make_merge_obj(builder, 'G-id')
1812
1812
entries = list(merge_obj._entries_lca())
1831
1831
builder.build_snapshot(None,
1832
1832
[('add', (u'', 'a-root-id', 'directory', None)),
1833
1833
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1834
revision_id=b'A-id')
1835
1835
builder.build_snapshot(['A-id'],
1836
1836
[('modify', ('foo', 'B content\n'))],
1837
revision_id=b'B-id')
1838
1838
builder.build_snapshot(['A-id'],
1839
1839
[('modify', ('foo', 'C content\n'))],
1841
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1842
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1840
revision_id=b'C-id')
1841
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1842
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1843
1843
merge_obj = self.make_merge_obj(builder, 'E-id')
1845
1845
entries = list(merge_obj._entries_lca())
1866
1866
builder.build_snapshot(None,
1867
1867
[('add', (u'', 'a-root-id', 'directory', None)),
1868
1868
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1869
revision_id=b'A-id')
1870
1870
builder.build_snapshot(['A-id'],
1871
1871
[('modify', ('foo', 'B content\n'))],
1872
revision_id=b'B-id')
1873
1873
builder.build_snapshot(['A-id'],
1874
1874
[('modify', ('foo', 'C content\n'))],
1875
revision_id='C-id', )
1876
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1877
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1875
revision_id=b'C-id', )
1876
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1877
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1878
1878
builder.build_snapshot(['D-id'],
1879
1879
[('modify', ('foo', 'F content\n'))],
1880
revision_id=b'F-id')
1881
1881
merge_obj = self.make_merge_obj(builder, 'E-id')
1883
1883
entries = list(merge_obj._entries_lca())
1907
1907
builder.build_snapshot(None,
1908
1908
[('add', (u'', 'a-root-id', 'directory', None)),
1909
1909
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
1910
revision_id=b'A-id')
1911
1911
builder.build_snapshot(['A-id'],
1912
1912
[('modify', ('foo', 'B content\n'))],
1913
revision_id=b'B-id')
1914
1914
builder.build_snapshot(['A-id'],
1915
1915
[('modify', ('foo', 'C content\n'))],
1917
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1916
revision_id=b'C-id')
1917
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1918
1918
builder.build_snapshot(['B-id', 'C-id'],
1919
1919
[('modify', ('foo', 'C content\n'))],
1920
revision_id='D-id') # Same as E
1920
revision_id=b'D-id') # Same as E
1921
1921
builder.build_snapshot(['D-id'],
1922
1922
[('modify', ('foo', 'F content\n'))],
1923
revision_id=b'F-id')
1924
1924
merge_obj = self.make_merge_obj(builder, 'E-id')
1926
1926
entries = list(merge_obj._entries_lca())
1933
1933
builder.build_snapshot(None,
1934
1934
[('add', (u'', 'a-root-id', 'directory', None)),
1935
1935
('add', (u'a', 'a-id', 'file', 'content\n'))],
1937
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1938
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1936
revision_id=b'A-id')
1937
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1938
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1939
1939
builder.build_snapshot(['C-id', 'B-id'],
1940
1940
[('rename', (u'a', u'b'))],
1942
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1941
revision_id=b'E-id')
1942
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1943
1943
merge_obj = self.make_merge_obj(builder, 'E-id')
1944
1944
entries = list(merge_obj._entries_lca())
1945
1945
root_id = 'a-root-id'
1957
1957
builder.build_snapshot(None,
1958
1958
[('add', (u'', 'a-root-id', 'directory', None)),
1959
1959
('add', (u'a', 'a-id', 'file', 'content\n'))],
1961
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1962
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1960
revision_id=b'A-id')
1961
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1962
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1963
1963
builder.build_snapshot(['C-id', 'B-id'],
1964
1964
[('unversion', 'a'),
1965
1965
('flush', None),
1966
1966
('add', (u'a', 'a-id', 'directory', None))],
1968
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
1967
revision_id=b'E-id')
1968
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
1969
1969
merge_obj = self.make_merge_obj(builder, 'E-id')
1970
1970
entries = list(merge_obj._entries_lca())
1971
1971
root_id = 'a-root-id'
1983
1983
builder.build_snapshot(None,
1984
1984
[('add', (u'', 'a-root-id', 'directory', None)),
1985
1985
('add', (u'a', 'a-id', 'file', 'content\n'))],
1987
builder.build_snapshot(['A-id'], [], revision_id='B-id')
1988
builder.build_snapshot(['A-id'], [], revision_id='C-id')
1989
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
1986
revision_id=b'A-id')
1987
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
1988
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
1989
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
1990
1990
builder.build_snapshot(['B-id', 'C-id'],
1991
1991
[('unversion', 'a'),
1992
1992
('flush', None),
1993
1993
('add', (u'a', 'a-id', 'directory', None))],
1994
revision_id=b'D-id')
1995
1995
merge_obj = self.make_merge_obj(builder, 'E-id')
1996
1996
entries = list(merge_obj._entries_lca())
1997
1997
# Only the kind was changed (content)
2004
2004
[('add', (u'', 'a-root-id', 'directory', None)),
2005
2005
('add', (u'a', 'a-id', 'file', 'content\n')),
2006
2006
('add', (u'b', 'b-id', 'file', 'content\n'))],
2008
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2009
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2007
revision_id=b'A-id')
2008
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2009
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2010
2010
builder.build_snapshot(['C-id', 'B-id'],
2011
2011
[('modify', ('a', 'new-content\n')),
2012
2012
('modify', ('b', 'new-content\n'))],
2014
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2013
revision_id=b'E-id')
2014
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2015
2015
merge_obj = self.make_merge_obj(builder, 'E-id',
2016
2016
interesting_files=['b'])
2017
2017
entries = list(merge_obj._entries_lca())
2030
2030
[('add', (u'', 'a-root-id', 'directory', None)),
2031
2031
('add', (u'a', 'a-id', 'file', 'content\n')),
2032
2032
('add', (u'b', 'b-id', 'file', 'content\n'))],
2034
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2035
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2033
revision_id=b'A-id')
2034
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2035
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2036
2036
builder.build_snapshot(['C-id', 'B-id'],
2037
2037
[('modify', ('a', 'new-content\n')),
2038
2038
('modify', ('b', 'new-content\n'))],
2039
revision_id=b'E-id')
2040
2040
builder.build_snapshot(['B-id', 'C-id'],
2041
2041
[('rename', ('b', 'c'))],
2042
revision_id=b'D-id')
2043
2043
merge_obj = self.make_merge_obj(builder, 'E-id',
2044
2044
interesting_files=['c'])
2045
2045
entries = list(merge_obj._entries_lca())
2058
2058
[('add', (u'', 'a-root-id', 'directory', None)),
2059
2059
('add', (u'a', 'a-id', 'file', 'content\n')),
2060
2060
('add', (u'c', 'c-id', 'file', 'content\n'))],
2062
builder.build_snapshot(['A-id'],
2063
[('rename', ('c', 'b'))],
2065
builder.build_snapshot(['A-id'],
2066
[('rename', ('c', 'b'))],
2061
revision_id=b'A-id')
2062
builder.build_snapshot(['A-id'],
2063
[('rename', ('c', 'b'))],
2064
revision_id=b'B-id')
2065
builder.build_snapshot(['A-id'],
2066
[('rename', ('c', 'b'))],
2067
revision_id=b'C-id')
2068
2068
builder.build_snapshot(['C-id', 'B-id'],
2069
2069
[('modify', ('a', 'new-content\n')),
2070
2070
('modify', ('b', 'new-content\n'))],
2072
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2071
revision_id=b'E-id')
2072
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2073
2073
merge_obj = self.make_merge_obj(builder, 'E-id',
2074
2074
interesting_files=['c'])
2075
2075
entries = list(merge_obj._entries_lca())
2088
2088
[('add', (u'', 'a-root-id', 'directory', None)),
2089
2089
('add', (u'a', 'a-id', 'file', 'content\n')),
2090
2090
('add', (u'b', 'b-id', 'file', 'content\n'))],
2091
revision_id=b'A-id')
2092
2092
builder.build_snapshot(['A-id'],
2093
[('rename', ('b', 'c'))], revision_id='B-id')
2094
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2093
[('rename', ('b', 'c'))], revision_id=b'B-id')
2094
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2095
2095
builder.build_snapshot(['C-id', 'B-id'],
2096
2096
[('modify', ('a', 'new-content\n')),
2097
2097
('modify', ('b', 'new-content\n'))],
2098
revision_id=b'E-id')
2099
2099
builder.build_snapshot(['B-id', 'C-id'],
2100
[('rename', ('c', 'b'))], revision_id='D-id')
2100
[('rename', ('c', 'b'))], revision_id=b'D-id')
2101
2101
merge_obj = self.make_merge_obj(builder, 'E-id',
2102
2102
interesting_files=['c'])
2103
2103
entries = list(merge_obj._entries_lca())
2116
2116
[('add', (u'', 'a-root-id', 'directory', None)),
2117
2117
('add', (u'a', 'a-id', 'file', 'content\n')),
2118
2118
('add', (u'b', 'b-id', 'file', 'content\n'))],
2120
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2121
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2119
revision_id=b'A-id')
2120
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2121
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2122
2122
builder.build_snapshot(['C-id', 'B-id'],
2123
2123
[('modify', ('a', 'new-content\n')),
2124
('modify', ('b', 'new-content\n'))], revision_id='E-id')
2125
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2124
('modify', ('b', 'new-content\n'))], revision_id=b'E-id')
2125
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2126
2126
merge_obj = self.make_merge_obj(builder, 'E-id',
2127
2127
interesting_files=['b'])
2128
2128
entries = list(merge_obj._entries_lca())
2169
2169
builder.build_snapshot(None,
2170
2170
[('add', (u'', 'a-root-id', 'directory', None)),
2171
2171
('add', (u'a', 'a-id', 'file', 'a\nb\nc\n'))],
2173
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2174
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2175
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
2172
revision_id=b'A-id')
2173
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2174
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2175
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
2176
2176
builder.build_snapshot(['B-id', 'C-id'],
2177
2177
[('modify', ('a', 'a\nb\nc\nd\ne\nf\n'))],
2178
revision_id=b'D-id')
2179
2179
wt, conflicts = self.do_merge(builder, 'E-id')
2180
2180
self.assertEqual(0, conflicts)
2181
2181
# The merge should have simply update the contents of 'a'
2197
2197
builder.build_snapshot(None,
2198
2198
[('add', (u'', 'a-root-id', 'directory', None)),
2199
2199
('add', (u'foo', 'foo-id', 'file', 'a\nb\nc\n'))],
2201
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2200
revision_id=b'A-id')
2201
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2202
2202
builder.build_snapshot(['A-id'],
2203
[('rename', ('foo', 'bar'))], revision_id='B-id', )
2203
[('rename', ('foo', 'bar'))], revision_id=b'B-id', )
2204
2204
builder.build_snapshot(['C-id', 'B-id'], # merge the rename
2205
[('rename', ('foo', 'bar'))], revision_id='E-id')
2205
[('rename', ('foo', 'bar'))], revision_id=b'E-id')
2206
2206
builder.build_snapshot(['E-id'],
2207
[('rename', ('bar', 'baz'))], revision_id='F-id')
2208
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2207
[('rename', ('bar', 'baz'))], revision_id=b'F-id')
2208
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2209
2209
wt, conflicts = self.do_merge(builder, 'F-id')
2210
2210
self.assertEqual(0, conflicts)
2211
2211
# The merge should simply recognize that the final rename takes
2228
2228
builder.build_snapshot(None,
2229
2229
[('add', (u'', 'a-root-id', 'directory', None)),
2230
2230
('add', (u'foo', 'foo-id', 'file', 'a\nb\nc\n'))],
2232
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2231
revision_id=b'A-id')
2232
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2233
2233
builder.build_snapshot(['A-id'],
2234
[('rename', ('foo', 'bar'))], revision_id='B-id')
2234
[('rename', ('foo', 'bar'))], revision_id=b'B-id')
2235
2235
builder.build_snapshot(['C-id', 'B-id'], # merge the rename
2236
[('rename', ('foo', 'bar'))], revision_id='E-id')
2236
[('rename', ('foo', 'bar'))], revision_id=b'E-id')
2237
2237
builder.build_snapshot(['E-id'],
2238
[('unversion', 'bar')], revision_id='F-id')
2239
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2238
[('unversion', 'bar')], revision_id=b'F-id')
2239
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2240
2240
wt, conflicts = self.do_merge(builder, 'F-id')
2241
2241
self.assertEqual(0, conflicts)
2242
2242
self.assertRaises(errors.NoSuchId, wt.id2path, 'foo-id')
2255
2255
builder.build_snapshot(None,
2256
2256
[('add', (u'', 'a-root-id', 'directory', None)),
2257
2257
('add', (u'foo', 'foo-id', 'file', 'a\nb\nc\n'))],
2259
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2260
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2261
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2262
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
2258
revision_id=b'A-id')
2259
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2260
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2261
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2262
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
2263
2263
# Have to use a real WT, because BranchBuilder doesn't support exec bit
2264
2264
wt = self.get_wt_from_builder(builder)
2265
2265
tt = transform.TreeTransform(wt)
2296
2296
builder = self.get_builder()
2297
2297
builder.build_snapshot(None,
2298
2298
[('add', (u'', 'a-root-id', 'directory', None))],
2300
builder.build_snapshot(['A-id'], [], revision_id='C-id')
2301
builder.build_snapshot(['A-id'], [], revision_id='B-id')
2302
builder.build_snapshot(['B-id', 'C-id'], [], revision_id='D-id')
2303
builder.build_snapshot(['C-id', 'B-id'], [], revision_id='E-id')
2299
revision_id=b'A-id')
2300
builder.build_snapshot(['A-id'], [], revision_id=b'C-id')
2301
builder.build_snapshot(['A-id'], [], revision_id=b'B-id')
2302
builder.build_snapshot(['B-id', 'C-id'], [], revision_id=b'D-id')
2303
builder.build_snapshot(['C-id', 'B-id'], [], revision_id=b'E-id')
2304
2304
# Have to use a real WT, because BranchBuilder doesn't support exec bit
2305
2305
wt = self.get_wt_from_builder(builder)
2306
2306
os.symlink('bar', 'path/foo')
2331
2331
builder.build_snapshot(None,
2332
2332
[('add', (u'', 'a-root-id', 'directory', None)),
2333
2333
('add', (u'foo', 'foo-id', 'file', 'A content\n'))],
2334
revision_id=b'A-id')
2335
2335
builder.build_snapshot(['A-id'],
2336
2336
[('modify', ('foo', 'B content\n'))],
2337
revision_id=b'B-id')
2338
2338
builder.build_snapshot(['A-id'],
2339
2339
[('modify', ('foo', 'C content\n'))],
2340
revision_id=b'C-id')
2341
2341
builder.build_snapshot(['C-id', 'B-id'], [],
2342
revision_id=b'E-id')
2343
2343
builder.build_snapshot(['B-id', 'C-id'], [],
2344
revision_id=b'D-id')
2345
2345
wt, conflicts = self.do_merge(builder, 'E-id')
2346
2346
self.assertEqual(1, conflicts)
2347
2347
self.assertEqualDiff('<<<<<<< TREE\n'
2703
2703
[('add', (u'', 'a-root-id', 'directory', None)),
2704
2704
('add', (u'a', 'a-id', 'file', 'base content\n')),
2705
2705
('add', (u'foo', 'foo-id', 'file', 'base content\n'))],
2706
revision_id=b'A-id')
2707
2707
builder.build_snapshot(['A-id'],
2708
2708
[('modify', ('foo', 'B content\n'))],
2709
revision_id=b'B-id')
2710
2710
builder.build_snapshot(['A-id'],
2711
2711
[('rename', ('a', 'b'))],
2712
revision_id=b'C-id')
2713
2713
builder.build_snapshot(['C-id', 'B-id'],
2714
2714
[('rename', ('b', 'c')),
2715
2715
('modify', ('foo', 'E content\n'))],
2716
revision_id=b'E-id')
2717
2717
builder.build_snapshot(['B-id', 'C-id'],
2718
[('rename', ('a', 'b'))], revision_id='D-id') # merged change
2718
[('rename', ('a', 'b'))], revision_id=b'D-id') # merged change
2719
2719
wt_this = self.get_wt_from_builder(builder)
2720
2720
wt_base = wt_this.controldir.sprout('base', 'A-id').open_workingtree()
2721
2721
wt_base.lock_read()