/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 bzrlib/tests/test_knit.py

  • Committer: Robert Collins
  • Date: 2008-03-20 00:43:25 UTC
  • mto: This revision was merged to the branch mainline in revision 3306.
  • Revision ID: robertc@robertcollins.net-20080320004325-ee5fzf6ax6cmjgfx
Refactor internals of knit implementations to implement get_parents_with_ghosts in terms of get_parent_map.

Show diffs side-by-side

added added

removed removed

Lines of Context:
554
554
            "version option 0 1 .%s :" % (utf8_revision_id,)
555
555
            ])
556
556
        index = self.get_knit_index(transport, "filename", "r")
557
 
        self.assertEqual([utf8_revision_id],
 
557
        self.assertEqual((utf8_revision_id,),
558
558
            index.get_parents_with_ghosts("version"))
559
559
 
560
560
    def test_read_ignore_corrupted_lines(self):
588
588
        self.assertEqual("1", index._version_list_to_index(["version"]))
589
589
        self.assertEqual((None, 3, 4), index.get_position("version"))
590
590
        self.assertEqual(["options3"], index.get_options("version"))
591
 
        self.assertEqual(["parent", "other"],
 
591
        self.assertEqual(("parent", "other"),
592
592
            index.get_parents_with_ghosts("version"))
593
593
 
594
594
    def test_read_compressed_parents(self):
634
634
        self.assertEqual([], index.get_graph())
635
635
 
636
636
        index.add_version("a", ["option"], (None, 0, 1), ["b"])
637
 
        self.assertEqual([("a", ["b"])], index.get_graph())
 
637
        self.assertEqual([("a", ("b",))], index.get_graph())
638
638
 
639
639
        index.add_version("c", ["option"], (None, 0, 1), ["d"])
640
 
        self.assertEqual([("a", ["b"]), ("c", ["d"])],
 
640
        self.assertEqual([("a", ("b",)), ("c", ("d",))],
641
641
            sorted(index.get_graph()))
642
642
 
643
643
    def test_get_ancestry(self):
771
771
        self.assertEqual(1, index.num_versions())
772
772
        self.assertEqual((None, 0, 1), index.get_position("a"))
773
773
        self.assertEqual(["option"], index.get_options("a"))
774
 
        self.assertEqual(["b"], index.get_parents_with_ghosts("a"))
 
774
        self.assertEqual(("b",), index.get_parents_with_ghosts("a"))
775
775
 
776
776
        index.add_version("a", ["opt"], (None, 1, 2), ["c"])
777
777
        self.assertEqual(("append_bytes",
781
781
        self.assertEqual(1, index.num_versions())
782
782
        self.assertEqual((None, 1, 2), index.get_position("a"))
783
783
        self.assertEqual(["opt"], index.get_options("a"))
784
 
        self.assertEqual(["c"], index.get_parents_with_ghosts("a"))
 
784
        self.assertEqual(("c",), index.get_parents_with_ghosts("a"))
785
785
 
786
786
        index.add_version("b", ["option"], (None, 2, 3), ["a"])
787
787
        self.assertEqual(("append_bytes",
791
791
        self.assertEqual(2, index.num_versions())
792
792
        self.assertEqual((None, 2, 3), index.get_position("b"))
793
793
        self.assertEqual(["option"], index.get_options("b"))
794
 
        self.assertEqual(["a"], index.get_parents_with_ghosts("b"))
 
794
        self.assertEqual(("a",), index.get_parents_with_ghosts("b"))
795
795
 
796
796
    def test_add_versions(self):
797
797
        transport = MockTransport([
816
816
        self.assertEqual((None, 2, 3), index.get_position("b"))
817
817
        self.assertEqual(["opt"], index.get_options("a"))
818
818
        self.assertEqual(["option"], index.get_options("b"))
819
 
        self.assertEqual(["c"], index.get_parents_with_ghosts("a"))
820
 
        self.assertEqual(["a"], index.get_parents_with_ghosts("b"))
 
819
        self.assertEqual(("c",), index.get_parents_with_ghosts("a"))
 
820
        self.assertEqual(("a",), index.get_parents_with_ghosts("b"))
821
821
 
822
822
    def test_add_versions_random_id_is_accepted(self):
823
823
        transport = MockTransport([
924
924
            ])
925
925
        index = self.get_knit_index(transport, "filename", "r")
926
926
 
927
 
        self.assertEqual([], index.get_parents_with_ghosts("a"))
928
 
        self.assertEqual(["a", "c"], index.get_parents_with_ghosts("b"))
929
 
        self.assertEqual(["b", "a", "e"],
 
927
        self.assertEqual((), index.get_parents_with_ghosts("a"))
 
928
        self.assertEqual(("a", "c"), index.get_parents_with_ghosts("b"))
 
929
        self.assertEqual(("b", "a", "e"),
930
930
            index.get_parents_with_ghosts("c"))
931
931
 
932
932
    def test_check_versions_present(self):
1601
1601
            ]
1602
1602
        expected_data_list = [
1603
1603
            # version, options, length, parents
1604
 
            ('text-a', ['fulltext'], 122, []),
 
1604
            ('text-a', ['fulltext'], 122, ()),
1605
1605
           ]
1606
1606
        for version_id, parents, lines in test_data:
1607
1607
            k1.add_lines(version_id, parents, split_lines(lines))
1630
1630
            ]
1631
1631
        expected_data_list = [
1632
1632
            # version, options, length, parents
1633
 
            ('text-m', ['line-delta'], 84, ['text-b', 'text-d']),
 
1633
            ('text-m', ['line-delta'], 84, ('text-b', 'text-d')),
1634
1634
            ]
1635
1635
        for version_id, parents, lines in test_data:
1636
1636
            k1.add_lines(version_id, parents, split_lines(lines))
1660
1660
        original_versions = k1.versions
1661
1661
        k1.versions = lambda: reversed(original_versions())
1662
1662
        expected_data_list = [
1663
 
            ('text-a', ['fulltext'], 122, []),
1664
 
            ('text-b', ['line-delta'], 84, ['text-a'])]
 
1663
            ('text-a', ['fulltext'], 122, ()),
 
1664
            ('text-b', ['line-delta'], 84, ('text-a',))]
1665
1665
        # now check the fulltext is first and the delta second
1666
1666
        format, data_list, _ = k1.get_data_stream(['text-a', 'text-b'])
1667
1667
        self.assertEqual('knit-plain', format)
1673
1673
        format, data_list, _ = k1.get_data_stream([
1674
1674
            'text-m', 'text-b', 'text-a'])
1675
1675
        self.assertEqual([
1676
 
            ('text-a', ['fulltext'], 122, []),
1677
 
            ('text-b', ['line-delta'], 84, ['text-a']),
1678
 
            ('text-m', ['line-delta'], 84, ['text-b', 'text-d']),
 
1676
            ('text-a', ['fulltext'], 122, ()),
 
1677
            ('text-b', ['line-delta'], 84, ('text-a',)),
 
1678
            ('text-m', ['line-delta'], 84, ('text-b', 'text-d')),
1679
1679
            ], data_list)
1680
1680
 
1681
1681
    def test_get_stream_ghost_parent(self):
1688
1688
        # Expected data
1689
1689
        expected_data_list = [
1690
1690
            # version, options, length, parents
1691
 
            ('text-b', ['line-delta'], 84, ['text-a', 'text-ghost']),
 
1691
            ('text-b', ['line-delta'], 84, ('text-a', 'text-ghost')),
1692
1692
            ]
1693
1693
        
1694
1694
        format, data_list, reader_callable = k1.get_data_stream(['text-b'])
1716
1716
        # behaviour.
1717
1717
        expected_data_list = [
1718
1718
            # version, options, length, parents
1719
 
            ('text-d', ['line-delta'], 84, ['text-c']),
1720
 
            ('text-b', ['line-delta'], 84, ['text-a']),
 
1719
            ('text-d', ['line-delta'], 84, ('text-c',)),
 
1720
            ('text-b', ['line-delta'], 84, ('text-a',)),
1721
1721
            ]
1722
1722
        # Note that even though we request the revision IDs in a particular
1723
1723
        # order, the data stream may return them in any order it likes.  In this
1758
1758
        # behaviour.
1759
1759
        expected_data_list = [
1760
1760
            # version, options, length, parents
1761
 
            ('text-a', ['fulltext'], 122, []),
1762
 
            ('text-b', ['line-delta'], 84, ['text-a']),
1763
 
            ('text-m', ['line-delta'], 84, ['text-b', 'text-d']),
1764
 
            ('text-c', ['fulltext'], 121, []),
1765
 
            ('text-d', ['line-delta'], 84, ['text-c']),
 
1761
            ('text-a', ['fulltext'], 122, ()),
 
1762
            ('text-b', ['line-delta'], 84, ('text-a',)),
 
1763
            ('text-m', ['line-delta'], 84, ('text-b', 'text-d')),
 
1764
            ('text-c', ['fulltext'], 121, ()),
 
1765
            ('text-d', ['line-delta'], 84, ('text-c',)),
1766
1766
            ]
1767
1767
        format, data_list, reader_callable = k1.get_data_stream(
1768
1768
            ['text-a', 'text-b', 'text-c', 'text-d', 'text-m'])
2185
2185
            'a-3 fulltext 0 0 1 :'
2186
2186
            )
2187
2187
        self.assertEqual(['a-1', 'a-2', 'a-3'], idx._history)
2188
 
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0),
2189
 
                          'a-2':('a-2', ['fulltext'], 0, 0, ['a-1'], 1),
2190
 
                          'a-3':('a-3', ['fulltext'], 0, 0, ['a-2'], 2),
 
2188
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, (), 0),
 
2189
                          'a-2':('a-2', ['fulltext'], 0, 0, ('a-1',), 1),
 
2190
                          'a-3':('a-3', ['fulltext'], 0, 0, ('a-2',), 2),
2191
2191
                         }, idx._cache)
2192
2192
 
2193
2193
    def test_add_versions_fails_clean(self):
2211
2211
 
2212
2212
        def generate_failure():
2213
2213
            """Add some entries and then raise an exception"""
2214
 
            yield ('a-2', ['fulltext'], (None, 0, 0), ['a-1'])
2215
 
            yield ('a-3', ['fulltext'], (None, 0, 0), ['a-2'])
 
2214
            yield ('a-2', ['fulltext'], (None, 0, 0), ('a-1',))
 
2215
            yield ('a-3', ['fulltext'], (None, 0, 0), ('a-2',))
2216
2216
            raise StopEarly()
2217
2217
 
2218
2218
        # Assert the pre-condition
2219
2219
        self.assertEqual(['a-1'], idx._history)
2220
 
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0)}, idx._cache)
 
2220
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, (), 0)}, idx._cache)
2221
2221
 
2222
2222
        self.assertRaises(StopEarly, idx.add_versions, generate_failure())
2223
2223
 
2224
2224
        # And it shouldn't be modified
2225
2225
        self.assertEqual(['a-1'], idx._history)
2226
 
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0)}, idx._cache)
 
2226
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, (), 0)}, idx._cache)
2227
2227
 
2228
2228
    def test_knit_index_ignores_empty_files(self):
2229
2229
        # There was a race condition in older bzr, where a ^C at the right time
2914
2914
 
2915
2915
    def test_iter_parents(self):
2916
2916
        knit = self.make_knit_with_4_versions_2_dags()
2917
 
        self.assertIterParents(knit, ['a'], ['a'], [('a', [])])
 
2917
        self.assertIterParents(knit, ['a'], ['a'], [('a', ())])
2918
2918
        self.assertIterParents(knit, ['a', 'b'], ['a', 'b'],
2919
 
            [('a', []), ('b', [])])
 
2919
            [('a', ()), ('b', ())])
2920
2920
        self.assertIterParents(knit, ['a', 'b', 'c'], ['a', 'b', 'c'],
2921
 
            [('a', []), ('b', []), ('c', ['b', 'a'])])
 
2921
            [('a', ()), ('b', ()), ('c', ('b', 'a'))])
2922
2922
        self.assertIterParents(knit, ['a', 'b', 'c', 'd'],
2923
2923
            ['a', 'b', 'c', 'd'],
2924
 
            [('a', []), ('b', []), ('c', ['b', 'a']), ('d', ['e', 'f'])])
 
2924
            [('a', ()), ('b', ()), ('c', ('b', 'a')), ('d', ('e', 'f'))])
2925
2925
        self.assertIterParents(knit, ['c'], ['a', 'b', 'c'],
2926
 
            [('c', ['b', 'a'])])
 
2926
            [('c', ('b', 'a'))])
2927
2927
 
2928
2928
    def test_get_options(self):
2929
2929
        knit = self.make_knit_with_4_versions_2_dags()
2932
2932
 
2933
2933
    def test_get_parents_with_ghosts(self):
2934
2934
        knit = self.make_knit_with_4_versions_2_dags()
2935
 
        self.assertGetParentsWithGhosts(knit, ['a'], 'a', [])
2936
 
        self.assertGetParentsWithGhosts(knit, ['c'], 'c', ['b', 'a'])
2937
 
        self.assertGetParentsWithGhosts(knit, ['d'], 'd', ['e', 'f'])
 
2935
        self.assertGetParentsWithGhosts(knit, ['a'], 'a', ())
 
2936
        self.assertGetParentsWithGhosts(knit, ['c'], 'c', ('b', 'a'))
 
2937
        self.assertGetParentsWithGhosts(knit, ['d'], 'd', ('e', 'f'))
2938
2938
 
2939
2939
    def test_get_position(self):
2940
2940
        knit = self.make_knit_with_4_versions_2_dags()