##// END OF EJS Templates
bundlerepo: fix mismatches with repository and revlog classes...
bundlerepo: fix mismatches with repository and revlog classes Both pytype and PyCharm complained that `write()` and `_write()` in the bundlephasecache class aren't proper overrides- indeed they seem to be missing an argument that the base class has. PyCharm and pytype also complained that the `revlog.revlog` class doesn't have a `_chunk()` method. That looks like it was moved from revlog to `_InnerRevlog` back in e8ad6d8de8b8, and wasn't caught because this module wasn't type checked. However, I couldn't figure out a syntax with `revlog.revlog._inner._chunk(self, rev)`, as it complained about passing too many args. `bundlerevlog._rawtext()` uses this `super(...)` style to call the super class, so hopefully that works, even with the wonky dynamic subclassing. The revlog class needed the `_InnerRevlog` field typed because it isn't set in the constructor. Finally, the vfs type hints look broken. This initially failed with: File "/mnt/c/Users/Matt/hg/mercurial/bundlerepo.py", line 65, in __init__: Function readonlyvfs.__init__ was called with the wrong arguments [wrong-arg-types] Expected: (self, vfs: mercurial.vfs.vfs) Actually passed: (self, vfs: Callable) Called from (traceback): line 232, in dirlog line 214, in __init__ I don't see a raw Callable, but I tried changing some of the vfs args to be typed as `vfsmod.abstractvfs`, but that class doesn't have `options`, so it failed elsewhere. `readonlyvfs` isn't a subclass of `vfs` (it's a subclass of `abstractvfs`), so I'm not sure how to handle that. It would be a shame to have to make a union of vfs subclasses (but not all of them have `options` either).

File last commit:

r51283:b88e9c70 default
r52764:cfd30df0 default
Show More
rust.txt
99 lines | 3.1 KiB | text/plain | TextLexer
Mercurial can be augmented with Rust extensions for speeding up certain
operations.
Compatibility
=============
Though the Rust extensions are only tested by the project under Linux, users of
MacOS, FreeBSD and other UNIX-likes have been using the Rust extensions. Your
mileage may vary, but by all means do give us feedback or signal your interest
for better support.
No Rust extensions are available for Windows at this time.
Features
========
The following operations are sped up when using Rust:
- discovery of differences between repositories (pull/push)
- nodemap (see :hg:`help config.format.use-persistent-nodemap`)
- all commands using the dirstate (status, commit, diff, add, update, etc.)
- dirstate-v2 (see :hg:`help config.format.use-dirstate-v2`)
- iteration over ancestors in a graph
More features are in the works, and improvements on the above listed are still
in progress. For more experimental work see the "rhg" section.
Checking for Rust
=================
You may already have the Rust extensions depending on how you install
Mercurial::
$ hg debuginstall | grep -i rust
checking Rust extensions (installed)
checking module policy (rust+c-allow)
If those lines don't even exist, you're using an old version of `hg` which does
not have any Rust extensions yet.
Installing
==========
You will need `cargo` to be in your `$PATH`. See the "MSRV" section for which
version to use.
Using pip
---------
Users of `pip` can install the Rust extensions with the following command::
$ pip install mercurial --global-option --rust --no-use-pep517
`--no-use-pep517` is here to tell `pip` to preserve backwards compatibility with
the legacy `setup.py` system. Mercurial has not yet migrated its complex setup
to the new system, so we still need this to add compiled extensions.
This might take a couple of minutes because you're compiling everything.
See the "Checking for Rust" section to see if the install succeeded.
From your distribution
----------------------
Some distributions are shipping Mercurial with Rust extensions enabled and
pre-compiled (meaning you won't have to install `cargo`), or allow you to
specify an install flag. Check with your specific distribution for how to do
that, or ask their team to add support for hg+Rust!
From source
-----------
Please refer to the `rust/README.rst` file in the Mercurial repository for
instructions on how to install from source.
MSRV
====
The minimum supported Rust version is defined in `rust/clippy.toml`.
The project's policy is to keep it at or below the version from Debian testing,
to make the distributions' job easier.
rhg
===
There exists an experimental pure-Rust version of Mercurial called `rhg` with a
fallback mechanism for unsupported invocations. It allows for much faster
execution of certain commands while adding no discernable overhead for the rest.
The only way of trying it out is by building it from source. Please refer to
`rust/README.rst` in the Mercurial repository.
See `hg help config.rhg` for configuration options.
Contributing
============
If you would like to help the Rust endeavor, please refer to `rust/README.rst`
in the Mercurial repository.