Skip to content
Snippets Groups Projects
Commit c2480ac4c5e2 authored by Georges Racinet's avatar Georges Racinet :squid:
Browse files

rust-pyo3: retrieving the InnerRevlog of hg-cpython

This allows PyO3-based code to use the InnerRevlog, access its shared data
(core InnerRevlog), which will then allow, e.g., to retrieve references on
the core Index.

On the `hg-cpython` (`rusthg` crate, `rustext` Python extension module),
we had to also build as a Rust library, and open up some accesses (see
notably the public accessor for `inner`, the core `InnerRevlog`).

Retrieving the Rust struct underlying a Python object defined by another
extension module written in Rust is tricky because the Python type objects
are duplicated in the extension modules, leading to failure of the normal
type checking. See the doc-comment of `convert_cpython::extract_inner_revlog`
for a complete explanation.
To solve this, we import the Python type object of `rustext` (defined
by `hg-cpython`) and perform a manual check. Checking the Python type is
necessary, as PyO3 documentation clearly state that downcasting an object
that has not the proper type is Undefined Behaviour.

At this point, we do not have conversion facilities for exceptions (`PyErr`
on both sides), hence the remaining unwraps).
parent 15011324a80b
No related branches found
No related tags found
2 merge requests!1292Draft: 7.0rc preparation,!1134Bootstraping PyO3 Rust bindings
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment