/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/test_merge.py

  • Committer: Jelmer Vernooij
  • Date: 2018-05-22 02:05:12 UTC
  • mto: (6973.12.2 python3-k)
  • mto: This revision was merged to the branch mainline in revision 6992.
  • Revision ID: jelmer@jelmer.uk-20180522020512-btpj2jchdlehi3en
Add more bees.

Show diffs side-by-side

added added

removed removed

Lines of Context:
308
308
        tree_a.flush()
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')
1251
1251
        return builder
1252
1252
 
1253
1253
    def setup_criss_cross_graph(self):
1261
1261
        # |X|
1262
1262
        # D E
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')
1266
1266
        return builder
1267
1267
 
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])
1330
1330
        #    \|   |/
1331
1331
        #     G   H
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='A-id')
 
1349
            revision_id=b'A-id')
1350
1350
        builder.build_snapshot([],
1351
1351
            [('add', ('', None, 'directory', None))],
1352
 
            revision_id='B-id')
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='A-id')
 
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='C-id')
 
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-id')
 
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='E-id')
 
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')
1424
1424
 
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='A-id')
 
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-id')
 
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='C-id')
 
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='D-id')
 
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='E-id')
 
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'))],
1470
 
            revision_id='G-id')
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')
1473
1473
 
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='A-id')
 
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-id')
 
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='C-id')
 
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='E-id')
 
1500
            revision_id=b'E-id')
1501
1501
        builder.build_snapshot(['B-id', 'C-id'],
1502
1502
            [('unversion', 'a')],
1503
 
            revision_id='D-id')
 
1503
            revision_id=b'D-id')
1504
1504
        merge_obj = self.make_merge_obj(builder, 'E-id')
1505
1505
 
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))],
1528
 
            revision_id='A-id')
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='C-id')
 
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='D-id')
 
1537
            revision_id=b'D-id')
1538
1538
        merge_obj = self.make_merge_obj(builder, 'E-id')
1539
1539
 
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'))],
1552
 
            revision_id='A-id')
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')
1560
1560
 
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'))],
1586
 
            revision_id='A-id')
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')
1593
1593
 
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='A-id')
 
1616
            revision_id=b'A-id')
1617
1617
        builder.build_snapshot(['A-id'], [
1618
1618
            ('modify', ('foo', 'new-content\n'))],
1619
 
            revision_id='B-id')
 
1619
            revision_id=b'B-id')
1620
1620
        builder.build_snapshot(['A-id'],
1621
1621
            [('unversion', 'foo')],
1622
 
            revision_id='C-id')
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')
1626
1626
 
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))],
1655
 
            revision_id='A-id')
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='C-id')
 
1659
            revision_id=b'C-id')
1660
1660
        builder.build_snapshot(['C-id', 'B-id'],
1661
1661
            [('unversion', 'a')],
1662
 
            revision_id='E-id')
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')
1665
1665
 
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))],
1673
 
            revision_id='A-id')
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'))],
1678
 
            revision_id='E-id')
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')
1681
1681
 
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'))],
1709
 
            revision_id='A-id')
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'))],
1713
 
            revision_id='B-id')
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'))],
1717
 
            revision_id='E-id')
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='F-id')
 
1721
            revision_id=b'F-id')
1722
1722
        merge_obj = self.make_merge_obj(builder, 'G-id')
1723
1723
 
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'))],
1759
 
            revision_id='A-id')
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'))],
1763
 
            revision_id='B-id')
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')
1775
1775
 
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'))],
1797
 
            revision_id='A-id')
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'))],
1801
 
            revision_id='B-id')
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='G-id')
 
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')
1811
1811
 
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='A-id')
 
1834
            revision_id=b'A-id')
1835
1835
        builder.build_snapshot(['A-id'],
1836
1836
            [('modify', ('foo', 'B content\n'))],
1837
 
            revision_id='B-id')
 
1837
            revision_id=b'B-id')
1838
1838
        builder.build_snapshot(['A-id'],
1839
1839
            [('modify', ('foo', 'C content\n'))],
1840
 
            revision_id='C-id')
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')
1844
1844
 
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='A-id')
 
1869
            revision_id=b'A-id')
1870
1870
        builder.build_snapshot(['A-id'],
1871
1871
            [('modify', ('foo', 'B content\n'))],
1872
 
            revision_id='B-id')
 
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='F-id')
 
1880
            revision_id=b'F-id')
1881
1881
        merge_obj = self.make_merge_obj(builder, 'E-id')
1882
1882
 
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='A-id')
 
1910
            revision_id=b'A-id')
1911
1911
        builder.build_snapshot(['A-id'],
1912
1912
            [('modify', ('foo', 'B content\n'))],
1913
 
            revision_id='B-id')
 
1913
            revision_id=b'B-id')
1914
1914
        builder.build_snapshot(['A-id'],
1915
1915
            [('modify', ('foo', 'C content\n'))],
1916
 
            revision_id='C-id')
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='F-id')
 
1923
            revision_id=b'F-id')
1924
1924
        merge_obj = self.make_merge_obj(builder, 'E-id')
1925
1925
 
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'))],
1936
 
            revision_id='A-id')
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'))],
1941
 
            revision_id='E-id')
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'))],
1960
 
            revision_id='A-id')
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))],
1967
 
            revision_id='E-id')
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'))],
1986
 
            revision_id='A-id')
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='D-id')
 
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'))],
2007
 
            revision_id='A-id')
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'))],
2013
 
            revision_id='E-id')
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'))],
2033
 
            revision_id='A-id')
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='E-id')
 
2039
            revision_id=b'E-id')
2040
2040
        builder.build_snapshot(['B-id', 'C-id'],
2041
2041
            [('rename', ('b', 'c'))],
2042
 
            revision_id='D-id')
 
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'))],
2061
 
            revision_id='A-id')
2062
 
        builder.build_snapshot(['A-id'],
2063
 
            [('rename', ('c', 'b'))],
2064
 
            revision_id='B-id')
2065
 
        builder.build_snapshot(['A-id'],
2066
 
            [('rename', ('c', 'b'))],
2067
 
            revision_id='C-id')
 
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'))],
2071
 
            revision_id='E-id')
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='A-id')
 
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='E-id')
 
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'))],
2119
 
            revision_id='A-id')
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'))],
2172
 
            revision_id='A-id')
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='D-id')
 
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'))],
2200
 
            revision_id='A-id')
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'))],
2231
 
            revision_id='A-id')
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'))],
2258
 
            revision_id='A-id')
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))],
2299
 
            revision_id='A-id')
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='A-id')
 
2334
            revision_id=b'A-id')
2335
2335
        builder.build_snapshot(['A-id'],
2336
2336
            [('modify', ('foo', 'B content\n'))],
2337
 
            revision_id='B-id')
 
2337
            revision_id=b'B-id')
2338
2338
        builder.build_snapshot(['A-id'],
2339
2339
            [('modify', ('foo', 'C content\n'))],
2340
 
            revision_id='C-id')
 
2340
            revision_id=b'C-id')
2341
2341
        builder.build_snapshot(['C-id', 'B-id'], [],
2342
 
                revision_id='E-id')
 
2342
                revision_id=b'E-id')
2343
2343
        builder.build_snapshot(['B-id', 'C-id'], [],
2344
 
                revision_id='D-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='A-id')
 
2706
            revision_id=b'A-id')
2707
2707
        builder.build_snapshot(['A-id'],
2708
2708
            [('modify', ('foo', 'B content\n'))],
2709
 
            revision_id='B-id')
 
2709
            revision_id=b'B-id')
2710
2710
        builder.build_snapshot(['A-id'],
2711
2711
            [('rename', ('a', 'b'))],
2712
 
            revision_id='C-id')
 
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='E-id')
 
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()