|
@@ -47,11 +47,14 @@ from dulwich.objects import (
|
|
|
hex_to_sha,
|
|
|
object_class,
|
|
|
parse_timezone,
|
|
|
- parse_tree,
|
|
|
pretty_format_tree_entry,
|
|
|
sha_to_hex,
|
|
|
- sorted_tree_items,
|
|
|
)
|
|
|
+
|
|
|
+try:
|
|
|
+ from dulwich.objects import _parse_tree_rs, _sorted_tree_items_rs
|
|
|
+except ImportError:
|
|
|
+ _sorted_tree_items_rs = _parse_tree_rs = None
|
|
|
from dulwich.tests.utils import (
|
|
|
ext_functest_builder,
|
|
|
functest_builder,
|
|
@@ -825,6 +828,18 @@ _SORTED_TREE_ITEMS = [
|
|
|
]
|
|
|
|
|
|
|
|
|
+_TREE_ITEMS_BUG_1325 = {
|
|
|
+ b'gamma': (0o100755, b'5944b31ff85b415573d1a43eb942e2dea30ab8be'),
|
|
|
+ b'gamma-new': (0o100644, b'cf7a729ca69bfabd0995fc9b083e86a18215bd91'),
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+_SORTED_TREE_ITEMS_BUG_1325 = [
|
|
|
+ TreeEntry(path=b'gamma', mode=0o100755, sha=b'5944b31ff85b415573d1a43eb942e2dea30ab8be'),
|
|
|
+ TreeEntry(path=b'gamma-new', mode=0o100644, sha=b'cf7a729ca69bfabd0995fc9b083e86a18215bd91'),
|
|
|
+]
|
|
|
+
|
|
|
+
|
|
|
class TreeTests(ShaFileCheckTests):
|
|
|
def test_add(self):
|
|
|
myhexsha = b"d80c186a03f423a81b39df39dc87fd269736ca86"
|
|
@@ -878,35 +893,40 @@ class TreeTests(ShaFileCheckTests):
|
|
|
)
|
|
|
|
|
|
test_parse_tree = functest_builder(_do_test_parse_tree, _parse_tree_py)
|
|
|
- test_parse_tree_extension = ext_functest_builder(_do_test_parse_tree, parse_tree)
|
|
|
+ test_parse_tree_extension = ext_functest_builder(_do_test_parse_tree, _parse_tree_rs)
|
|
|
|
|
|
def _do_test_sorted_tree_items(self, sorted_tree_items):
|
|
|
- def do_sort(entries):
|
|
|
- return list(sorted_tree_items(entries, False))
|
|
|
+ def do_sort(entries, name_order):
|
|
|
+ return list(sorted_tree_items(entries, name_order))
|
|
|
|
|
|
- actual = do_sort(_TREE_ITEMS)
|
|
|
+ actual = do_sort(_TREE_ITEMS, False)
|
|
|
self.assertEqual(_SORTED_TREE_ITEMS, actual)
|
|
|
self.assertIsInstance(actual[0], TreeEntry)
|
|
|
|
|
|
+ actual = do_sort(_TREE_ITEMS_BUG_1325, True)
|
|
|
+ self.assertEqual(_SORTED_TREE_ITEMS_BUG_1325, actual)
|
|
|
+ self.assertIsInstance(actual[0], TreeEntry)
|
|
|
+
|
|
|
# C/Python implementations may differ in specific error types, but
|
|
|
# should all error on invalid inputs.
|
|
|
# For example, the Rust implementation has stricter type checks, so may
|
|
|
# raise TypeError where the Python implementation raises
|
|
|
# AttributeError.
|
|
|
errors = (TypeError, ValueError, AttributeError)
|
|
|
- self.assertRaises(errors, do_sort, b"foo")
|
|
|
- self.assertRaises(errors, do_sort, {b"foo": (1, 2, 3)})
|
|
|
+ self.assertRaises(errors, do_sort, b"foo", False)
|
|
|
+ self.assertRaises(errors, do_sort, {b"foo": (1, 2, 3)}, False)
|
|
|
|
|
|
myhexsha = b"d80c186a03f423a81b39df39dc87fd269736ca86"
|
|
|
- self.assertRaises(errors, do_sort, {b"foo": (b"xxx", myhexsha)})
|
|
|
- self.assertRaises(errors, do_sort, {b"foo": (0o100755, 12345)})
|
|
|
+ self.assertRaises(errors, do_sort, {b"foo": (b"xxx", myhexsha)}, False)
|
|
|
+ self.assertRaises(errors, do_sort, {b"foo": (0o100755, 12345)}, False)
|
|
|
|
|
|
test_sorted_tree_items = functest_builder(
|
|
|
_do_test_sorted_tree_items, _sorted_tree_items_py
|
|
|
)
|
|
|
- test_sorted_tree_items_extension = ext_functest_builder(
|
|
|
- _do_test_sorted_tree_items, sorted_tree_items
|
|
|
- )
|
|
|
+ if _sorted_tree_items_rs is not None:
|
|
|
+ test_sorted_tree_items_extension = ext_functest_builder(
|
|
|
+ _do_test_sorted_tree_items, _sorted_tree_items_rs
|
|
|
+ )
|
|
|
|
|
|
def _do_test_sorted_tree_items_name_order(self, sorted_tree_items):
|
|
|
self.assertEqual(
|
|
@@ -933,9 +953,10 @@ class TreeTests(ShaFileCheckTests):
|
|
|
test_sorted_tree_items_name_order = functest_builder(
|
|
|
_do_test_sorted_tree_items_name_order, _sorted_tree_items_py
|
|
|
)
|
|
|
- test_sorted_tree_items_name_order_extension = ext_functest_builder(
|
|
|
- _do_test_sorted_tree_items_name_order, sorted_tree_items
|
|
|
- )
|
|
|
+ if _sorted_tree_items_rs is not None:
|
|
|
+ test_sorted_tree_items_name_order_extension = ext_functest_builder(
|
|
|
+ _do_test_sorted_tree_items_name_order, _sorted_tree_items_rs
|
|
|
+ )
|
|
|
|
|
|
def test_check(self):
|
|
|
t = Tree
|