Skip to content
Snippets Groups Projects
  1. Nov 30, 2024
    • Georges Racinet's avatar
      rust-pyo3: retrieving the InnerRevlog of hg-cpython · c2480ac4
      Georges Racinet authored
      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).
      c2480ac4
    • Georges Racinet's avatar
      rust-pyo3: conversion helpers for Revision objects · a642c0a3
      Georges Racinet authored
      Although the PyO3 API is indeed nicer and has derive macros, we still need
      the collection helpers. The `Result` issue is not very relevant any more,
      however the checking of incoming revisions for Python definitely is.
      a642c0a3
  2. Nov 20, 2024
  3. Nov 27, 2023
Loading