Mercurial > hg
view relnotes/6.1 @ 50671:e06d1a779eb6
store: stop relying on a `revlog_type` property
We want to know if a file is related to a revlog, but the rest is dealt with
differently already, so we simplify things further.
as a bonus, this cleanup This provides a small but noticeable speedup.
The number below use `hg perf::stream-locked-section` to measure the time spend
in the locked section of the streaming clone. Number are run on various
repository and compare different steps.:
1) the effect of this patchs,
2) the effect of the cleanup series,
2) current state compared to because large refactoring.
All benchmarks are run on linux with Python 3.10.7.
### Effect of this patch
# mercurial-2018-08-01-zstd-sparse-revlog
# benchmark.name = perf-stream-locked-section
before: 0.030246 seconds
after: 0.029274 seconds (-3.21%)
# pypy-2018-08-01-zstd-sparse-revlog
before: 0.545012 seconds
after: 0.520872 seconds (-4.43%)
# netbeans-2018-08-01-zstd-sparse-revlog
before: 2.719939 seconds
after: 2.626791 seconds (-3.42%)
# mozilla-central-2018-08-01-zstd-sparse-revlog
before: 6.304179 seconds
after: 6.096700 seconds (-3.29%)
# mozilla-try-2019-02-18-zstd-sparse-revlog
before: 14.142687 seconds
after: 13.640779 seconds (-3.55%)
### Effect of this series
A small but sizeable speedup
# mercurial-2018-08-01-zstd-sparse-revlog
before: 0.031122 seconds
after: 0.029274 seconds (-5.94%)
# pypy-2018-08-01-zstd-sparse-revlog
before: 0.589970 seconds
after: 0.520872 seconds (-11.71%)
# netbeans-2018-08-01-zstd-sparse-revlog
before: 2.980300 seconds
after: 2.626791 seconds (-11.86%)
# mozilla-central-2018-08-01-zstd-sparse-revlog
before: 6.863204 seconds
after: 6.096700 seconds (-11.17%)
# mozilla-try-2019-02-18-zstd-sparse-revlog
before: 14.921393 seconds
after: 13.640779 seconds (-8.58%)
### Current state compared to the pre-refactoring state
The refactoring introduced multiple string manipulation and dictionary creation
that seems to induce a signifiant slowdown
Slowdown
# mercurial-2018-08-01-zstd-sparse-revlog
6.4.3: 0.019459 seconds
after: 0.029274 seconds (+50.44%)
## pypy-2018-08-01-zstd-sparse-revlog
6.4.3: 0.290715 seconds
after: 0.520872 seconds (+79.17%)
# netbeans-2018-08-01-zstd-sparse-revlog
6.4.3: 1.403447 seconds
after: 2.626791 seconds (+87.17%)
# mozilla-central-2018-08-01-zstd-sparse-revlog
6.4.3: 3.163549 seconds
after: 6.096700 seconds (+92.72%)
# mozilla-try-2019-02-18-zstd-sparse-revlog
6.4.3: 6.702184 seconds
after: 13.640779 seconds (+103.53%)
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 30 May 2023 17:43:59 +0100 |
parents | 79b2c98ab7b4 |
children |
line wrap: on
line source
'''This is the last release to support Python 2. Mercurial is Python 3 only starting with 6.2''' = Mercurial 6.1.4 = * url: raise error if CONNECT request to proxy was unsuccessful * docker: avoid /tmp write access issues by fixing permissions * logcmdutil: use the same data as {file*} template keywords (issue6642) * commit: allow to close branch when committing change over a closed head * rust-status: don't trigger dirstate v1 rewrite when only v2 data is changed * purge: prevent a silly crash with --confirm --files * rust: relax im-rc dependency to allow minor updates" * Improve PyPy support * Improve Py3 error handling * Documentation fixes = Mercurial 6.1.3 = '''security: ''' * narrow_widen_acl: enforce narrowacl in narrow_widen (SEC) 6b10151b9621 '''normal notes: ''' * censor: fix [hg update] away from a revision with censored files * amend: stop losing copies when amending * rhg: strengthen dirstate v2 writing in broken filesystems * work around some broken DLL imports in Windows * worker: adapt _blockingreader to work around a python3.8.[0-1] bug (issue6444) * rhg: correctly handle the case where diffs are encoded relative to nullrev * fix bugs and race-conditions in the Mercurial test runner * chg: ignore already closed fds when cleaning up = Mercurial 6.1.2 = * Improve Windows test suite * Fix `debuglock` not ignoring a missing lockfile when forcing a lock * Improve help of `ui.large-file-limit` * Set the large-file-limit to 10MB (from 10MiB) for clarity * While rewriting desc hashes, ignore ambiguous prefix "hashes" * Fix a crash in partial amend with copies * Fix a py3 compatiblity bug * Fix incorrect metadata causing dirstate-v2 data loss in edge case * Fix cleanup of old dirstate-v2 data files when using `rhg` * Make reference to `.hg/last_message.txt` relative in commit * Fix an infinite hang when `rhg` is used in the background * Fix Python DLL loading bug in Windows * Add `--docket` flag to `debugstate` to check out dirstate-v2 metadata * Remove `debugdirstateignorepatternhash` in favor of `debugstate --docket` * Fix incorrect metadata causing systematic complete dirstate-v2 rewrite = Mercurial 6.1.1 = * Fix Rust compilation on `aarcch64` * Fix Rust compilation on architectures where `char` is unsigned * When the merge tool uses `$output`, don't leave markers in `$local` * Improve test suite support on big-endian platforms * Cap the number of concurrent threads to 16 in Rust `hg status` to prevent huge speed regression at higher thread counts * Fix `amend` with copies in extras * Abort if commit we're trying to `unamend` was not created by `hg [un]amend` * Fix file name in the pullbundle help text * Fix an issue with data not being correctly reset in the C implementation of dirstate-v2 * Fix issue6673 where some tags were missing from cache after a merge * Fix stream-cloning a repo with empty requirements * Fix a false warning about content-divergence creation * Fix silly blackbox entries when hg is interrupted * Fix unsoundness (no known exploits) in Rust extensions (see cfd270d83169 and dd6b67d5c256) * Fix Rust dirstate counters not being updated correctly leading to some potential bugs (none known) * Stop relying on a compiler implementation detail in Rust HgPath = Mercurial 6.1 = == New Features == * Added a way of specifying required extensions that prevent Mercurial from starting if they are not found. See `hg help config.extensions`. * Merge conflict markers have been made clearer (see backwards compatibility below) * Improve detailed error codes * Added a hint about mangled whitespace on bad patch * Explain which order the commits are presented in `chistedit` * Introduce a `dirstate-tracked-hint` feature to help automation keep track of changes to tracked files. See `hg help config.use-dirstate-tracked-hint`. * Shared repositories can be upgraded if the upgrade is specific to the share. For now, this only applies to `dirstate-v2` and `dirstate-tracked-hint`. * When using the `narrow` extension, non-conflicting changes to files outside of the narrow specification can now be merged. * When cloning a repository using stream-clone, the client can now control the repository format variants to use as long as the stream content does not restrict that variant. == Default Format Change == These changes affect newly created repositories (or new clones) done with Mercurial 6.1. * The `share-safe` format variant is now enabled by default. It makes configuration and requirements more consistent across repository and their shares. This introduces a behavior change as shares from a repository using the new format will also use their main repository's configuration. See `hg help config.format.use-share-safe` for details about the feature and the available options for auto-upgrading existing shares. == New Experimental Features == * The pure Rust version of Mercurial called `rhg` added support for most common invocations of `hg status`. See `hg help rust.rhg` for details on how to try it out. * `rhg` supports narrow clones and sparse checkouts. == Bug Fixes == * '''Obsolete revisions are skipped while computing heads. In conjunction with the `evolve` extension >= 10.5.0, this leads to massive exchange (push/pull) speedups in repositories with a lot of heads and/or obsolete revisions.''' * Stream-clones now properly advertise all requirements needed. This can result in the stream-clone feature being disabled for some clients using < 6.0.2. A small bugfix patch for these older client is available if necessary. * The `--no-check` and `--no-merge` flags now properly overwrite the behavior from `commands.update.check` * `rhg`'s fallback detection is more robust in general in the presence of more advanced configs * `rhg`'s `blackbox` now supports milliseconds by default and uses the same ISO 8601 format as the Python implementation * Fix `rhg` crash on non-generaldelta revlogs * The `lfs`, `largefiles` and `sparse` extensions now correctly take the appropriate lock before writing requirements * The `notify` extension does not produce errors anymore if a revision is not found * Remove unnecessary and overly strict check for divergence in `hg fix` * Windows compatibility improvements * Miscellaneous Python 3 and typing improvements * Many other small or internal fixes == Backwards Compatibility Changes == * The use of `share-safe`, means shares (of new repositories) will also use their main repository's configuration see the `Default Format Change` section for details. * The fix to stream-clone requirements advertising means some requirements previously (wrongly) omitted are now sent. This can confuse client using a Mercurial version < 6.0.2. The client would consider these requirements unsupported even if it actually know them. If you encounter this, either upgrade your client or apply the necessary patch. * The labels passed to merge tools have changed slightly. Merge tools can get labels passed to them if you include `$labellocal`, `$labelbase`, and/or `$labelother` in the `merge-tool.<tool name>.args` configuration. These labels used to have some space-padding, and truncation to fit within 72 columns. Both the padding and the truncation has been removed. * Some of the text in labels passed to merge tools has changed. For example, in conflicts while running `hg histedit`, the labels used to be "local", "base", and "histedit". They are now "already edited", "parent of current change", and "current change", respectively. * The computation of namedbranch heads now ignores obsolete revisions. User of the Changeset Evolution feature may see a change in location and numbers of heads of each named branches (and topic). * The remotefilelog extension now requires an appropriate excludepattern for subrepositories. * `debugsparse`'s interface has been reworked to be more flexible. Since it's a debug command it is not actually a breaking change, but it is worth noting here. * Temporary files for merges are now all inside a `hgmerge` directory instead of at the root of `TMPDIR`. The corresponding experimental `mergetempdirprefix` config option has been removed. == Internal API Changes == * The dirstate API received minor modifications. == Miscellaneous == * Removed exchange-v2. It was a prototype that had never been in a working state and had been left untouched since 2017.