##// END OF EJS Templates
logtoprocess: avoid traceback when running long commands...
logtoprocess: avoid traceback when running long commands $ hg log -r "present($(yes | tr -d '\n' | head -c 130000))" "$(yes | tr -d '\n' | head -c 5000)" --config extensions.logtoprocess= --config logtoprocess.commandfinish=whatever Traceback (most recent call last): File "/usr/bin/hg", line 67, in <module> dispatch.run() File "/usr/lib64/python2.7/site-packages/mercurial/dispatch.py", line 111, in run status = dispatch(req) File "/usr/lib64/python2.7/site-packages/mercurial/dispatch.py", line 290, in dispatch canonical_command=req.canonical_command, File "/usr/lib64/python2.7/site-packages/mercurial/ui.py", line 1991, in log logger.log(self, event, msg, opts) File "/usr/lib64/python2.7/site-packages/hgext/logtoprocess.py", line 72, in log procutil.runbgcommand(script, fullenv, shell=True) File "/usr/lib64/python2.7/site-packages/mercurial/utils/procutil.py", line 597, in runbgcommand b'error running %r: %s' % (cmd, os.strerror(returncode)), OSError: [Errno 7] error running 'whatever': Argument list too long This can happen if you pass a bunch of filenames to hg commit, for instance. This is due to a size limit on individual env vars (on linux, but I imagine there are similar limits in other OSes): $ FOO=$(yes | head -c 131000) /usr/bin/true $ FOO=$(yes | head -c 132000) /usr/bin/true -bash: /usr/bin/true: Argument list too long I propose to avoid this by truncating the message. I didn't make the limit configurable as it doesn't seem particularly convenient to customize this. I'm not sure if various OSes would want radically different limits here? Differential Revision: https://phab.mercurial-scm.org/D8203

File last commit:

r44574:e1b8b4e4 default
r44900:69392460 default
Show More
README.rst
52 lines | 1.7 KiB | text/x-rst | RstLexer

Mercurial Rust Code

This directory contains various Rust code for the Mercurial project. Rust is not required to use (or build) Mercurial, but using it improves performance in some areas.

There are currently three independent rust projects: - chg. An implementation of chg, in rust instead of C. - hgcli. A experiment for starting hg in rust rather than in python,

by linking with the python runtime. Probably meant to be replaced by PyOxidizer at some point.
  • hg-core (and hg-cpython/hg-directffi): implementation of some functionality of mercurial in rust, e.g. ancestry computations in revision graphs or pull discovery. The top-level Cargo.toml file defines a workspace containing these crates.

Using hg-core

Local use (you need to clean previous build artifacts if you have built without rust previously):

$ HGWITHRUSTEXT=cpython make local # to use ./hg
$ HGWITHRUSTEXT=cpython make tests # to run all tests
$ (cd tests; HGWITHRUSTEXT=cpython ./run-tests.py) # only the .t
$ ./hg debuginstall | grep rust # to validate rust is in use
checking module policy (rust+c-allow)

Setting HGWITHRUSTEXT to other values like true is deprecated and enables only a fraction of the rust code.

Developing hg-core

Simply run:

$ cargo build --release

It is possible to build without --release, but it is not recommended if performance is of any interest: there can be an order of magnitude of degradation when removing --release.

For faster builds, you may want to skip code generation:

$ cargo check

You can run only the rust-specific tests (as opposed to tests of mercurial as a whole) with:

$ cargo test --all