Mercurial 7.1rc0 (2025-07-16)#
⚠️ These are notes for a release candidate version. Anything and everything below is subject to change before the actual 7.1 release.
This release is the first that does not support Python 3.8.
As always, a lot of patches don’t make it to the release notes.
New Features#
share: add a
--share-source
argument tohg root
fastexport: make it possible to ignore
.gitmodules
in the source repository
Many Rust-related changes
rust-revset: support resolving
wdir()
rhg: allow
--repo
as abbreviation for--repository
rhg: support basic aliases
rhg: support -0 flag in
rhg files
rust-annotate: support
-Tjson
rust-annotate: support
--rev wdir()
rust-annotate: allow
--follow
Better profiling options, Rust tracebacks and tracing framework
profiling: support writing profiles to a directory
tracing: add a way of calling the Rust tracing framework from Python
rust-errors: add support for a runtime-configured backtrace
dispatch: enable Rust traceback processing when using
--tracing
Improvement to debug commands
debugcommands: bring over functionality from debugshell extension
debugindexdot: add flags for more control over graph
Other noteworthy performance work
rhg annotate
is up to 61 times faster in certain pathological casesImproved performance of the low-level Rust storage primitive
Removed a lot of syscalls when listing things from storage with high-level APIs
merge: save one status in certain cases
merge: improve detection of subrepos in Rust fast path
Improved the delta encoding algorithm by avoiding computation, using better heuristics and folding deltas
hgtags-fnode-cache: fast path full warm when no tag exists
Developer tooling
setup-dev-tools: add a first version of script that install dev tools
setup-dev-tools: add make target to format the working copy using
fix
setup-dev-tools: add make target to format the current stack using
fix
Default Format Change#
No default format changes this version.
New Experimental Features#
Following last version’s “update from null”, this is a Rust version of the update logic when all tracked files are clean and we are not merging. It is on by default if you have Rust enabled: if you encounter any problems use rust.update-from-clean=no
to disable it, and please let us know what the problem is.
rust: add an “update from clean” fast-path
New flags are being added to the revlog and transmitted over the network to help with copytracing and delta encoding.
revlog: introduce a
FLAG_FILELOG_META
revlog flag and requirementschangegroup: use
REVIDX_HASMETA
in changegroup ‘04’revlog: add a delta-info-flag requirements
changegroup: transmit snapshot level information in cg4
delta-search: add a option to ignore suspicious delta
A temporary store encoding that should only exist for one version of Mercurial, until we get a better solution to a very specific problem that you probably don’t have.
store: add a first version of a “plain” encoding
rust: add support for plain encoding
Bug Fixes#
diff: fix function name context detection (issue6965)
merge: filter ambiguous files and/or wait for fs tick in
applyupdates
rust: handle censored revisions according to the config
changelog: also disable sparse-revlog when disabling generaldelta
rust-repo: unconditionally load the dirstate before loading the changelog
revlog: fix a bytes vs str crash when emitting a deprecation warning
rust-annotate: prefix abort messages with “abort:”
debugshell: return an exit code 1 on exception
Backwards Compatibility Changes#
fastexport: add support for Git subrepositories (BC)
pycompat: drop support for Python 3.8 (BC)
annotate: use exit code 255 for missing files
contrib: delete debugshell extension
rust: update minimum Rust supported version to 1.85.1 for the 7.1 cycle
Internal API Changes#
revlog: add “writable” parameter to revlog
revlog: enforce that filelog get the
writable
parameter passed
Miscellaneous#
As with every release for a while, there were a ton of patches helping with adding typing information to our Python code, and catching bugs while doing so. The Pytype CI job itself was upgraded to be more helpful.
We’ve migrated our Rust<->Python bridge from using the deprecated rust-cpython
to the new standard PyO3
.
rust: remove
hg-cpython
rust: move from
log
totracing
-based logging
We’ve upgraded our CI to be much easier to update, more up-to-date and use smaller images
ci: switch the “checks” job to a “v3.0” images
Other mentions
debugnodemap: print a message when no action was specified
pyproject: SPDX license expression and license-files (PEP 639)
apache-server: update the setup from Wheezy to Buster
apache-server: update the README, add Anubis, add notes about ProxyPass
rust-pyo3: raise proper Exceptions in more cases