##// END OF EJS Templates
rhg: Add support for automatic fallback to Python...
rhg: Add support for automatic fallback to Python `rhg` is a command-line application that can do a small subset of what `hg` can. It is written entirely in Rust, which avoids the cost of starting a Python interpreter and importing many Python modules. In a script that runs many `hg` commands, this cost can add up. However making users decide when to use `rhg` instead of `hg` is not practical as we want the subset of supported functionality to grow over time. Instead we introduce "fallback" behavior where, when `rhg` encounters something (a sub-command, a repository format, …) that is not implemented in Rust-only, it does nothing but silently start a subprocess of Python-based `hg` running the same command. That way `rhg` becomes a drop-in replacement for `hg` that sometimes goes faster. Whether Python is used should be an implementation detail not apparent to users (other than through speed). A new `fallback` value is added to the previously introduced `rhg.on-unsupported` configuration key. When in this mode, the new `rhg.fallback-executable` config is determine what command to use to run a Python-based `hg`. The previous `rhg.on-unsupported = abort-silent` configuration was designed to let a wrapper script call `rhg` and then fall back to `hg` based on the exit code. This is still available, but having fallback behavior built-in in rhg might be easier for users instead of leaving that script "as an exercise for the reader". Using a subprocess like this is not idea, especially when `rhg` is to be installed in `$PATH` as `hg`, since the other `hg.py` executable needs to still be available… somewhere. Eventually this could be replaced by using PyOxidizer to a have a single executable that embeds a Python interpreter, but only starts it when needed. Differential Revision: https://phab.mercurial-scm.org/D10093

File last commit:

r47343:755c31a1 default
r47425:93e9f448 default
Show More
Cargo.toml
19 lines | 374 B | text/plain | TOMLLexer
Antoine Cezar
rhg: add rhg crate...
r45503 [package]
name = "rhg"
version = "0.1.0"
Raphaël Gomès
rhg: use `format_bytes!` for error messages...
r46598 authors = [
"Antoine Cezar <antoine.cezar@octobus.net>",
"Raphaël Gomès <raphael.gomes@octobus.net>",
]
Antoine Cezar
rhg: add rhg crate...
r45503 edition = "2018"
[dependencies]
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 hg-core = { path = "../hg-core"}
Simon Sapin
rhg: Add support for the blackbox extension...
r47343 chrono = "0.4.19"
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 clap = "2.33.1"
Simon Sapin
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`...
r47164 derive_more = "0.99"
Antoine Cezar
rhg: Add debug timing...
r46101 log = "0.4.11"
micro-timer = "0.3.1"
env_logger = "0.7.1"
Simon Sapin
rust: Use the DisplayBytes trait in config printing...
r47249 format-bytes = "0.2.0"
Simon Sapin
rhg: Add support for the blackbox extension...
r47343 users = "0.11.0"