Show More
@@ -668,7 +668,7 b' void dirs_module_init(PyObject *mod);' | |||
|
668 | 668 | void manifest_module_init(PyObject *mod); |
|
669 | 669 | void revlog_module_init(PyObject *mod); |
|
670 | 670 | |
|
671 |
static const int version = |
|
|
671 | static const int version = 20; | |
|
672 | 672 | |
|
673 | 673 | static void module_init(PyObject *mod) |
|
674 | 674 | { |
@@ -101,8 +101,10 b' struct indexObjectStruct {' | |||
|
101 | 101 | int inlined; |
|
102 | 102 | long entry_size; /* size of index headers. Differs in v1 v.s. v2 format |
|
103 | 103 | */ |
|
104 | char format_version; /* size of index headers. Differs in v1 v.s. v2 | |
|
105 |
|
|
|
104 | long rust_ext_compat; /* compatibility with being used in rust | |
|
105 | extensions */ | |
|
106 | char format_version; /* size of index headers. Differs in v1 v.s. v2 | |
|
107 | format */ | |
|
106 | 108 | }; |
|
107 | 109 | |
|
108 | 110 | static Py_ssize_t index_length(const indexObject *self) |
@@ -2769,6 +2771,7 b' static int index_init(indexObject *self,' | |||
|
2769 | 2771 | self->offsets = NULL; |
|
2770 | 2772 | self->nodelen = 20; |
|
2771 | 2773 | self->nullentry = NULL; |
|
2774 | self->rust_ext_compat = 1; | |
|
2772 | 2775 | |
|
2773 | 2776 | revlogv2 = NULL; |
|
2774 | 2777 | if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|O", kwlist, |
@@ -2941,6 +2944,8 b' static PyGetSetDef index_getset[] = {' | |||
|
2941 | 2944 | static PyMemberDef index_members[] = { |
|
2942 | 2945 | {"entry_size", T_LONG, offsetof(indexObject, entry_size), 0, |
|
2943 | 2946 | "size of an index entry"}, |
|
2947 | {"rust_ext_compat", T_LONG, offsetof(indexObject, rust_ext_compat), 0, | |
|
2948 | "size of an index entry"}, | |
|
2944 | 2949 | {NULL} /* Sentinel */ |
|
2945 | 2950 | }; |
|
2946 | 2951 |
@@ -80,7 +80,7 b' def _importfrom(pkgname, modname):' | |||
|
80 | 80 | ('cext', 'bdiff'): 3, |
|
81 | 81 | ('cext', 'mpatch'): 1, |
|
82 | 82 | ('cext', 'osutil'): 4, |
|
83 |
('cext', 'parsers'): |
|
|
83 | ('cext', 'parsers'): 20, | |
|
84 | 84 | } |
|
85 | 85 | |
|
86 | 86 | # map import request to other package or module |
@@ -47,6 +47,8 b' def offset_type(offset, type):' | |||
|
47 | 47 | |
|
48 | 48 | |
|
49 | 49 | class BaseIndexObject(object): |
|
50 | # Can I be passed to an algorithme implemented in Rust ? | |
|
51 | rust_ext_compat = 0 | |
|
50 | 52 | # Format of an index entry according to Python's `struct` language |
|
51 | 53 | index_format = revlog_constants.INDEX_ENTRY_V1 |
|
52 | 54 | # Size of a C unsigned long long int, platform independent |
@@ -42,6 +42,7 b' def offset_type(offset, type):' | |||
|
42 | 42 | |
|
43 | 43 | |
|
44 | 44 | class revlogoldindex(list): |
|
45 | rust_ext_compat = 0 | |
|
45 | 46 | entry_size = INDEX_ENTRY_V0.size |
|
46 | 47 | null_item = ( |
|
47 | 48 | 0, |
@@ -11,8 +11,8 b'' | |||
|
11 | 11 | //! but this will take some time to get there. |
|
12 | 12 | |
|
13 | 13 | use cpython::{ |
|
14 |
exc::ImportError, ObjectProtocol, PyClone, PyErr, |
|
|
15 | PyTuple, Python, PythonObject, | |
|
14 | exc::ImportError, exc::TypeError, ObjectProtocol, PyClone, PyErr, | |
|
15 | PyObject, PyResult, PyTuple, Python, PythonObject, | |
|
16 | 16 | }; |
|
17 | 17 | use hg::revlog::{Node, RevlogIndex}; |
|
18 | 18 | use hg::{Graph, GraphError, Revision, WORKING_DIRECTORY_REVISION}; |
@@ -90,6 +90,13 b' impl Index {' | |||
|
90 | 90 | ), |
|
91 | 91 | )); |
|
92 | 92 | } |
|
93 | let compat: u64 = index.getattr(py, "rust_ext_compat")?.extract(py)?; | |
|
94 | if compat == 0 { | |
|
95 | return Err(PyErr::new::<TypeError, _>( | |
|
96 | py, | |
|
97 | "index object not compatible with Rust", | |
|
98 | )); | |
|
99 | } | |
|
93 | 100 | Ok(Index { index, capi }) |
|
94 | 101 | } |
|
95 | 102 |
@@ -300,6 +300,11 b' py_class!(pub class MixedIndex |py| {' | |||
|
300 | 300 | self.cindex(py).borrow().inner().getattr(py, "entry_size")?.extract::<PyInt>(py) |
|
301 | 301 | } |
|
302 | 302 | |
|
303 | @property | |
|
304 | def rust_ext_compat(&self) -> PyResult<PyInt> { | |
|
305 | self.cindex(py).borrow().inner().getattr(py, "rust_ext_compat")?.extract::<PyInt>(py) | |
|
306 | } | |
|
307 | ||
|
303 | 308 | }); |
|
304 | 309 | |
|
305 | 310 | impl MixedIndex { |
General Comments 0
You need to be logged in to leave comments.
Login now