README.md
48 lines
| 1.9 KiB
| text/x-minidsrc
|
MarkdownLexer
Gregory Szorc
|
r45129 | # Oxidized Mercurial | ||
This project provides a Rust implementation of the Mercurial (`hg`) | ||||
version control tool. | ||||
Under the hood, the project uses | ||||
[PyOxidizer](https://github.com/indygreg/PyOxidizer) to embed a Python | ||||
interpreter in a binary built with Rust. At run-time, the Rust `fn main()` | ||||
is called and Rust code handles initial process startup. An in-process | ||||
Python interpreter is started (if needed) to provide additional | ||||
functionality. | ||||
# Building | ||||
Kyle Lippincott
|
r49087 | First, acquire and build a copy of PyOxidizer; you probably want to do this in | ||
some directory outside of your clone of Mercurial: | ||||
Gregory Szorc
|
r45129 | |||
$ git clone https://github.com/indygreg/PyOxidizer.git | ||||
$ cd PyOxidizer | ||||
$ cargo build --release | ||||
Kyle Lippincott
|
r49087 | Then build this Rust project using the built `pyoxidizer` executable: | ||
Gregory Szorc
|
r45129 | |||
Kyle Lippincott
|
r49087 | $ /path/to/pyoxidizer/target/release/pyoxidizer build --release | ||
Gregory Szorc
|
r45129 | |||
If all goes according to plan, there should be an assembled application | ||||
Kyle Lippincott
|
r49087 | under `build/<arch>/release/app/` with an `hg` executable: | ||
Gregory Szorc
|
r45129 | |||
Kyle Lippincott
|
r49087 | $ build/x86_64-unknown-linux-gnu/release/app/hg version | ||
Gregory Szorc
|
r45129 | Mercurial Distributed SCM (version 5.3.1+433-f99cd77d53dc+20200331) | ||
(see https://mercurial-scm.org for more information) | ||||
Raphaël Gomès
|
r47575 | Copyright (C) 2005-2020 Olivia Mackall and others | ||
Gregory Szorc
|
r45129 | This is free software; see the source for copying conditions. There is NO | ||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||
# Running Tests | ||||
To run tests with a built `hg` executable, you can use the `--with-hg` | ||||
argument to `run-tests.py`. But there's a wrinkle: many tests run custom | ||||
Python scripts that need to `import` modules provided by Mercurial. Since | ||||
these modules are embedded in the produced `hg` executable, a regular | ||||
Python interpreter can't access them! To work around this, set `PYTHONPATH` | ||||
to the Mercurial source directory. e.g.: | ||||
$ cd /path/to/hg/src/tests | ||||
Kyle Lippincott
|
r49087 | $ PYTHONPATH=`pwd`/.. python3.9 run-tests.py \ | ||
--with-hg `pwd`/../rust/hgcli/build/x86_64-unknown-linux-gnu/release/app/hg | ||||