##// END OF EJS Templates
emitrevision: consider ancestors revision to emit as available base...
emitrevision: consider ancestors revision to emit as available base This should make more delta base valid. This notably affects: * case where we skipped some parent with empty delta to directly delta against an ancestors * case where an intermediate snapshots is stored. This change means we could sent largish intermediate snapshots over the wire. However this is actually a sub goal here. Sending snapshots over the wire means the client have a high odd of simply storing the pre-computed delta instead of doing a lengthy process that will… end up doing the same intermediate snapshot. In addition the overall size of snapshot (or any level) is "only" some or the overall delta size. (0.17% for my mercurial clone, 20% for my clone of Mozilla try). So Sending them other the wire is unlikely to change large impact on the bandwidth used. If we decide that minimising the bandwidth is an explicit goal, we should introduce new logic to filter-out snapshot as delta. The current code has no notion explicite of snapshot so far, they just tended to fall into the wobbly filtering options. In some cases, this patch can yield large improvement to the bundling time: ### data-env-vars.name = mozilla-try-2019-02-18-zstd-sparse-revlog # benchmark.name = perf-bundle # benchmark.variants.revs = last-100000 before: 68.787066 seconds after: 47.552677 seconds (-30.87%) That translate to large improvement to the pull time : ### data-env-vars.name = mozilla-try-2019-02-18-zstd-sparse-revlog # benchmark.name = pull # benchmark.variants.issue6528 = disabled # benchmark.variants.revs = last-100000 before: 142.186625 seconds after: 75.897745 seconds (-46.62%) No significant negative impact have been observed.

File last commit:

r45800:53a6feba stable
r50685:f463eb67 stable
Show More
5.5
80 lines | 3.4 KiB | application/x-troff | GroffLexer
== 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, run `hg 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 from `mercurial.merge` to a new `mercurial.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` and `stderr` attributes of the `mercurial.pycompat`
module were removed. Instead, the attributes of same name from the
`mercurial.utils.procutil` module should be used, which provide more
consistent behavior across Python versions and platforms.