920
921
return make_file_factory(annotate, mapper)(self.get_transport())
924
class TestBadShaError(KnitTests):
925
"""Tests for handling of sha errors."""
927
def test_exception_has_text(self):
928
# having the failed text included in the error allows for recovery.
929
source = self.make_test_knit()
930
target = self.make_test_knit(name="target")
931
if not source._max_delta_chain:
932
raise TestNotApplicable(
933
"cannot get delta-caused sha failures without deltas.")
937
source.add_lines(basis, (), ['foo\n'])
938
source.add_lines(broken, (basis,), ['foo\n', 'bar\n'])
939
# Seed target with a bad basis text
940
target.add_lines(basis, (), ['gam\n'])
941
target.insert_record_stream(
942
source.get_record_stream([broken], 'unordered', False))
943
err = self.assertRaises(errors.KnitCorrupt,
944
target.get_record_stream([broken], 'unordered', True).next)
945
self.assertEqual(['gam\n', 'bar\n'], err.content)
946
# Test for formatting with live data
947
self.assertStartsWith(str(err), "Knit ")
923
950
class TestKnitIndex(KnitTests):
925
952
def test_add_versions_dictionary_compresses(self):
1408
1435
basis.calls = []
1409
1436
test.add_lines(key_cross_border, (key_basis,), ['foo\n'])
1410
1437
self.assertEqual('fulltext', test._index.get_method(key_cross_border))
1411
self.assertEqual([("get_parent_map", set([key_basis]))], basis.calls)
1438
# we don't even need to look at the basis to see that this should be
1439
# stored as a fulltext
1440
self.assertEqual([], basis.calls)
1412
1441
# Subsequent adds do delta.
1413
1442
basis.calls = []
1414
1443
test.add_lines(key_delta, (key_cross_border,), ['foo\n'])
1669
1698
source.add_lines(key_delta, (key_basis,), ['bar\n'])
1670
1699
stream = source.get_record_stream([key_delta], 'unordered', False)
1671
1700
test.insert_record_stream(stream)
1672
self.assertEqual([("get_parent_map", set([key_basis]))],
1701
# XXX: this does somewhat too many calls in making sure of whether it
1702
# has to recreate the full text.
1703
self.assertEqual([("get_parent_map", set([key_basis])),
1704
('get_parent_map', set([key_basis])),
1705
('get_record_stream', [key_basis], 'unordered', True)],
1674
1707
self.assertEqual({key_delta:(key_basis,)},
1675
1708
test.get_parent_map([key_delta]))
1736
1769
test.add_mpdiffs([(key_delta, (key_basis,),
1737
1770
source.get_sha1s([key_delta])[key_delta], diffs[0])])
1738
1771
self.assertEqual([("get_parent_map", set([key_basis])),
1739
('get_record_stream', [key_basis], 'unordered', True),
1740
('get_parent_map', set([key_basis]))],
1772
('get_record_stream', [key_basis], 'unordered', True),],
1742
1774
self.assertEqual({key_delta:(key_basis,)},
1743
1775
test.get_parent_map([key_delta]))
1762
1794
multiparent.NewText(['foo\n']),
1763
1795
multiparent.ParentText(1, 0, 2, 1)])],
1765
self.assertEqual(4, len(basis.calls))
1797
self.assertEqual(3, len(basis.calls))
1766
1798
self.assertEqual([
1767
1799
("get_parent_map", set([key_left, key_right])),
1768
1800
("get_parent_map", set([key_left, key_right])),
1769
("get_parent_map", set([key_left, key_right])),
1772
last_call = basis.calls[3]
1803
last_call = basis.calls[-1]
1773
1804
self.assertEqual('get_record_stream', last_call[0])
1774
1805
self.assertEqual(set([key_left, key_right]), set(last_call[1]))
1775
1806
self.assertEqual('unordered', last_call[2])