annotate rust/hg-cpython/src/debug.rs @ 47379:f6bb181c75f8

rust: Parse "subinclude"d files along the way, not later When parsing a `.hgignore` file and encountering an `include:` line, the included file is parsed recursively right then in a depth-first fashion. With `subinclude:` however included files were parsed (recursively) much later. This changes it to be expanded during parsing, like `.hgignore`. The motivation for this is an upcoming changeset that needs to detect changes in which files are ignored or not. The plan is to hash all ignore files while they are being read, and store that hash in the dirstate (in v2 format). In order to allow a potential alternative implementations to read that format, the algorithm to compute that hash must be documented. Having a well-defined depth-first ordering for the tree of (sub-)included files makes that easier. Differential Revision: https://phab.mercurial-scm.org/D10834
author Simon Sapin <simon.sapin@octobus.net>
date Wed, 02 Jun 2021 18:03:43 +0200
parents 9f96beb9bafe
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44531
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
1 // debug.rs
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
2 //
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
3 // Copyright 2020 Raphaël Gomès <rgomes@octobus.net>
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
4 //
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
5 // This software may be used and distributed according to the terms of the
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
6 // GNU General Public License version 2 or any later version.
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
7
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
8 //! Module to get debug information about Rust extensions.
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
9 use cpython::{PyDict, PyModule, PyResult, Python};
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
10
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
11 /// Create the module, with `__package__` given from parent
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
12 pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> {
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
13 let dotted_name = &format!("{}.debug", package);
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
14 let m = PyModule::new(py, dotted_name)?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
15
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
16 m.add(py, "__package__", package)?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
17 m.add(py, "__doc__", "Rust debugging information")?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
18
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
19 let sys = PyModule::import(py, "sys")?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
20 let sys_modules: PyDict = sys.get(py, "modules")?.extract(py)?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
21 sys_modules.set_item(py, dotted_name, &m)?;
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
22
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
23 Ok(m)
d4f19eb471ca rust-cpython: add `debug` module to expose debug information to Python
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
24 }