Mercurial 5.5 (2020-08-01)#
Mercurial 5.5 release#
This is an overview of the 5.5 release.
New Features#
clonebundles can be annotated with the expected memory requirements using the
REQUIREDRAM
option. This allows clients to skip bundles created with large zstd windows and fallback to larger, but less demanding bundles.The
phabricator
extension now provides more functionality of the arcanist CLI like changing the status of a differential.Phases processing is much faster, especially for repositories with old non-public changesets.
New Experimental Features#
The core of some hg operations have been (and are being) implemented in rust, for speed.
hg status
on a repository with 300k tracked files goes from 1.8s to 0.6s for instance. This has currently been tested only on linux, and does not build on windows. See rust/README.rst in the mercurial repository for instructions to opt into this.An experimental config
rewrite.empty-successor
was introduced to control what happens when rewrite operations result in empty changesets.
Bug Fixes#
For the case when connected to a TTY, stdout was fixed to be line-buffered on Python 3 (where it was block-buffered before, causing the process to seem hanging) and Windows on Python 2 (where it was unbuffered before).
Subversion sources of the convert extension were fixed to work on Python 3.
Subversion sources of the convert extension now interpret the encoding of URLs like Subversion. Previously, there were situations where the convert extension recognized a repository as present but Subversion did not, and vice versa.
The empty changeset check of in-memory rebases was fixed to match that of normal rebases (and that of the commit command).
The push command now checks the correct set of outgoing changesets for obsolete and unstable changesets. Previously, it could happen that the check prevented pushing changesets which were already on the server.
Backwards Compatibility Changes#
Mercurial now requires at least Python 2.7.9 or a Python version that backported modern SSL/TLS features (as defined in PEP 466), and that Python was compiled against a OpenSSL version supporting TLS 1.1 or TLS 1.2 (likely this requires the OpenSSL version to be at least 1.0.1).
The
hg perfwrite
command from contrib/perf.py was made more flexible and changed its default behavior. To get the previous behavior, runhg perfwrite --nlines=100000 --nitems=1 --item='Testing write performance' --batch-line
.The absorb extension now preserves changesets with no file changes that can be created by the commit command (those which change the branch name compared to the parent and those closing a branch head).
Internal API Changes#
logcmdutil.diffordiffstat() now takes contexts instead of nodes.
The
mergestate
class along with some related methods and constants have moved frommercurial.merge
to a newmercurial.mergestate
module.The
phasecache
class now uses sparse dictionaries for the phase data. New accessors are provided to detect if any non-public changeset exists (hasnonpublicphases
) and get the correponsponding root set (nonpublicphaseroots
).The
stdin
,stdout
andstderr
attributes of themercurial.pycompat
module were removed. Instead, the attributes of same name from themercurial.utils.procutil
module should be used, which provide more consistent behavior across Python versions and platforms.
Unsorted#
commands#
clonebundles: optional memory-requirement attribution
commit: check branch change on to-be-committed changeset
commit: tell user what to do with .hg/last-message.txt
config: add option to control creation of empty successors during rewrite
files: speed up ‘hg files’ when no flags change display
push: another test for checks preventing pushing orphaness to a server
push: test the checks preventing pushing orphaness to a server
status: also support for ‘traversedir’ callback in the Rust fast-path
status: match category text in the option description
core#
revlog: avoid hard-coded hash sizes
revlog: fix excessive decref on tuple creation failure in parse_index2()
ui: add option to timestamp status and diagnostic messages
ui: fix Python 2.7 support for ui.timestamp-output
extensions#
rebase: add test case that shows that inmemory rebase does not preserve merges
rebase: consider rewrite.empty-successor configuration
rebase: correctly check for empty commit in in-memory mode
rebase: fix regression in file change detection introduced by 0ecb3b11fcad
unsorted#
chg: suppress OSError in _restoreio() and add some logging (Bts:issue6330)
chgserver: discard buffered output before restoring fds (Bts:issue6207)
cmdserver: add option to not exit from message loop on SIGINT
curses: do not initialize LC_ALL to user settings (Bts:issue6358)
debian: support building a single deb for multiple py3 versions
demandimport: ignore ‘lzma’ module for demandimport
dispatch: handle late KeyboardInterrupt occurred in run()
exchange: check actually missing revs for obsolete / unstable revs (Bts:issue6372)
git: decode node IDs back into Python strings (Bts:issue6349)
infinitepush: fix ‘{get,put}_args’ formatting on Python 3
nodemap: add a new mode option, with an optional “warn” value
nodemap: gate the feature behind a new requirement
phabupdate: allow revisions to be commandeered
py3: fix crash when server address is 0.0.0.0 (Bts:issue6362)
rhg: add Command trait for subcommands implemented by rhg
rhg: add a limited ‘rhg root’ subcommand
run-tests: find python binary on Python 3 (Bts:issue6361)
rust-hg-cpython: update status bridge with the new ‘traversedir’ support
rust-status: collect traversed directories if required
rust-status: don’t dispatch unknown file when traversing if not listing unknowns
rust-status: improve documentation and readability
sshpeer: make client print (likely) server errors on stderr (BC)
sslutil: add FIXME about supportedprotocols possibly containing too many items
sslutil: check for OpenSSL without TLS 1.0 support in one case
sslutil: properly detect which TLS versions are supported by the ssl module
sslutil: stop storing protocol and options for SSLContext in settings dict
state: support validated declaration of nested unfinished ops
test: redirect stderr so warning messages don’t change output (Bts:issue6237)
upgrade: support the –quiet flag
upgrade: support upgrade and downgrade from persistent nodemap
sshpeer: make client print (likely) server errors on stderr (BC)