Mercurial > public > mercurial-scm > hg-stable
diff rust/hgcli/src/main.rs @ 44642:af739894a4c1
hgcli: add stub PyOxidizer project
Using commit c772a1379c3026314eda1c8ea244b86c0658951d of
PyOxidizer, I ran `pyoxidizer init-rust-project hgcli` to
create a stub Rust project. The only modifications I made from
what that command produced are:
* Update location of pyembed crate to PyOxidizer's Git repository.
* Removed some trailing whitespace from pyoxidizer.bzl
* Added auto-generated Cargo.lock file
Subsequent commits will modify the stub project to Mercurial's
needs.
Differential Revision: https://phab.mercurial-scm.org/D8350
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 31 Mar 2020 19:07:36 -0700 |
parents | |
children | 26ce8e751503 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rust/hgcli/src/main.rs Tue Mar 31 19:07:36 2020 -0700 @@ -0,0 +1,38 @@ +use pyembed::MainPythonInterpreter; + +// Include an auto-generated file containing the default +// `pyembed::PythonConfig` derived by the PyOxidizer configuration file. +// +// If you do not want to use PyOxidizer to generate this file, simply +// remove this line and instantiate your own instance of +// `pyembed::PythonConfig`. +include!(env!("PYOXIDIZER_DEFAULT_PYTHON_CONFIG_RS")); + +fn main() { + // The following code is in a block so the MainPythonInterpreter is destroyed in an + // orderly manner, before process exit. + let code = { + // Load the default Python configuration as derived by the PyOxidizer config + // file used at build time. + let config = default_python_config(); + + // Construct a new Python interpreter using that config, handling any errors + // from construction. + match MainPythonInterpreter::new(config) { + Ok(mut interp) => { + // And run it using the default run configuration as specified by the + // configuration. If an uncaught Python exception is raised, handle it. + // This includes the special SystemExit, which is a request to terminate the + // process. + interp.run_as_main() + } + Err(msg) => { + eprintln!("{}", msg); + 1 + } + } + }; + + // And exit the process according to code execution results. + std::process::exit(code); +}