changeset 44531:d4f19eb471ca

rust-cpython: add `debug` module to expose debug information to Python This will be mostly used in `debuginstall`. Differential Revision: https://phab.mercurial-scm.org/D8225
author Raphaël Gomès <rgomes@octobus.net>
date Thu, 05 Mar 2020 10:24:10 +0100
parents 4d1634e59f13
children c989737158aa
files rust/hg-cpython/src/debug.rs rust/hg-cpython/src/lib.rs
diffstat 2 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hg-cpython/src/debug.rs	Thu Mar 05 10:24:10 2020 +0100
@@ -0,0 +1,26 @@
+// debug.rs
+//
+// Copyright 2020 Raphaël Gomès <rgomes@octobus.net>
+//
+// This software may be used and distributed according to the terms of the
+// GNU General Public License version 2 or any later version.
+
+//! Module to get debug information about Rust extensions.
+use cpython::{PyDict, PyModule, PyResult, Python};
+
+/// Create the module, with `__package__` given from parent
+pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> {
+    let dotted_name = &format!("{}.debug", package);
+    let m = PyModule::new(py, dotted_name)?;
+
+    m.add(py, "__package__", package)?;
+    m.add(py, "__doc__", "Rust debugging information")?;
+
+    m.add(py, "re2_installed", cfg!(feature = "with-re2"))?;
+
+    let sys = PyModule::import(py, "sys")?;
+    let sys_modules: PyDict = sys.get(py, "modules")?.extract(py)?;
+    sys_modules.set_item(py, dotted_name, &m)?;
+
+    Ok(m)
+}
--- a/rust/hg-cpython/src/lib.rs	Fri Jan 24 11:06:01 2020 +0100
+++ b/rust/hg-cpython/src/lib.rs	Thu Mar 05 10:24:10 2020 +0100
@@ -30,6 +30,7 @@
 #[macro_use]
 pub mod ref_sharing;
 pub mod dagops;
+pub mod debug;
 pub mod dirstate;
 pub mod discovery;
 pub mod exceptions;
@@ -47,6 +48,7 @@
     let dotted_name: String = m.get(py, "__name__")?.extract(py)?;
     m.add(py, "ancestor", ancestors::init_module(py, &dotted_name)?)?;
     m.add(py, "dagop", dagops::init_module(py, &dotted_name)?)?;
+    m.add(py, "debug", debug::init_module(py, &dotted_name)?)?;
     m.add(py, "discovery", discovery::init_module(py, &dotted_name)?)?;
     m.add(py, "dirstate", dirstate::init_module(py, &dotted_name)?)?;
     m.add(py, "revlog", revlog::init_module(py, &dotted_name)?)?;