Mercurial > hg
view tests/test-convert-authormap.t @ 46667:93e9f448273c
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
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Mon, 01 Mar 2021 20:36:06 +0100 |
parents | 4441705b7111 |
children |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [extensions] > convert= > EOF Prepare orig repo $ hg init orig $ cd orig $ echo foo > foo $ HGUSER='user name' hg ci -qAm 'foo' $ cd .. Explicit --authors $ cat > authormap.txt <<EOF > user name = Long User Name > > # comment > this line is ignored > EOF $ hg convert --authors authormap.txt orig new initializing destination new repository ignoring bad line in author map file authormap.txt: this line is ignored scanning source... sorting... converting... 0 foo writing author map file $TESTTMP/new/.hg/authormap $ cat new/.hg/authormap user name=Long User Name $ hg -Rnew log changeset: 0:d89716e88087 tag: tip user: Long User Name date: Thu Jan 01 00:00:00 1970 +0000 summary: foo $ rm -rf new Implicit .hg/authormap $ hg init new $ mv authormap.txt new/.hg/authormap $ hg convert orig new ignoring bad line in author map file $TESTTMP/new/.hg/authormap: this line is ignored scanning source... sorting... converting... 0 foo $ hg -Rnew log changeset: 0:d89716e88087 tag: tip user: Long User Name date: Thu Jan 01 00:00:00 1970 +0000 summary: foo