Mercurial > public > mercurial-scm > hg
diff mercurial/cext/parsers.c @ 42303:e240bec26626
rust-dirstate: add rust-cpython bindings to the new parse/pack functions
This allows for Python code to call `parse/pack_dirstate` transparently.
These bindings are heavy given the relatively simple task, as they are bound
to implementation details of both the C and Python code. They will be slimmed
down in future patches and eventually completely removed once more of the
dirstate code has been refactored/rewritten in Rust.
Both functions emulate the mutate-on-loop style of the Python and C
implementations by looping over changed items in the compatibility layer,
instead of at the core functions.
Differential Revision: https://phab.mercurial-scm.org/D6349
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Mon, 06 May 2019 22:50:34 +0200 |
parents | 509a0477b3a6 |
children | d8e55c0c642c |
line wrap: on
line diff
--- a/mercurial/cext/parsers.c Mon May 06 22:48:09 2019 +0200 +++ b/mercurial/cext/parsers.c Mon May 06 22:50:34 2019 +0200 @@ -671,6 +671,7 @@ static void module_init(PyObject *mod) { + PyObject *capsule = NULL; PyModule_AddIntConstant(mod, "version", version); /* This module constant has two purposes. First, it lets us unit test @@ -687,6 +688,12 @@ manifest_module_init(mod); revlog_module_init(mod); + capsule = PyCapsule_New( + make_dirstate_tuple, + "mercurial.cext.parsers.make_dirstate_tuple_CAPI", NULL); + if (capsule != NULL) + PyModule_AddObject(mod, "make_dirstate_tuple_CAPI", capsule); + if (PyType_Ready(&dirstateTupleType) < 0) { return; }