Mercurial > hg
view relnotes/6.8 @ 52284:f4aede0f01af
rust-manifest: use `memchr` crate for all byte-finding needs
While writing a very dumb manifest diffing algorithm for a proof-of-concept
I saw that `Manifest::find_by_path` was much slower than I was expecting.
It turns out that the Rust stdlib uses slow (all is relative) code when
searching for byte positions for reasons ranging from portability, SIMD
API stability, nobody doing the work, etc. `memch` is much faster for these
purposes, so let's use it.
I was measuring ~670ms of profile time in `find_by_path`, after this patch
it went down to ~230ms.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 12 Nov 2024 23:20:04 +0100 |
parents | eae3ec345e5e |
children |
line wrap: on
line source
= Mercurial 6.8.2 = This is the last version that supports Python 3.6 and 3.7. * Compatibility for Python 3.12 and 3.13 * evolution: stop wrongly flagging unrelated part of a split as divergent * histedit: create state and acquire locks earlier * copytracing: fix a bug in an edge case in metadata.compute_all_files_changes * rhg: ignore readonly FS error when saving dirstate * merge: sort filemap only if requested by the caller * windows: implement `util.cachestat` to fix numerous dirstate problems * subrepo: propagate non-default path on outgoing * import: fix erroneous comparison of str with bytes * largefiles: fix check that ensures that --all-largefiles is only used locally * profiling: improve 3.12 error message for calling lsprof twice * profiling: use "stat" profiler to profile individual request * module-policy: ignore empty module policy * relnotes: skip the test if the source repository is not readable * wireprototypes: fix exception handling code with a bad pytype suppression * Many more type fixes and improvements * Improvements to the test suite = Mercurial 6.8.1 = * Python 3.12: fix an issue between `threading` and `demandimport` * rhg: expand user and environment variable in paths to ignore in config and includes * `win32mbcs` extension: fix an encoding issue = Mercurial 6.8 = As usual, a *lot* of patches don't make it to this list. == New Features or performance improvements == * Phases have been reworked to improve their general performance * revset: stop serializing node when using "%ln" * phases: convert remote phase root to node while reading them * phases: use revision number in new_heads * phases: use revision number in analyze_remote_phases * phases: stop using `repo.set` in `remotephasessummary` * phases: move RemotePhasesSummary to revision number * phases: use revision number in `_pushdiscoveryphase` * phases: introduce a performant efficient way to access revision in a set * phases: rework the logic of _pushdiscoveryphase to bound complexity * The Rust working copy code is being used by more places now: * matchers: support patternmatcher in rust * dirstate: remove the python-side whitelist of allowed matchers * stream-clone: disable gc for `_entries_walk` duration * stream-clone: disable gc for the initial section for the v3 format * postincoming: avoid computing branchhead if no report will be posted * stream-clone: disable gc for the entry listing section for the v2 format * perf: allow profiling of more than one run * perf: run the gc before each run * perf: start recording total time after warming * perf: clear vfs audit_cache before each run * outgoing: rework the handling of the `missingroots` case to be faster * outgoing: add a simple fastpath when there is no common * tags-cache: skip the filternode step if we are not going to use it * tags-cache: directly operate on rev-num warming hgtagsfnodescache * tags-cache: directly perform a monimal walk for hgtagsfnodescache warming == New Experimental Features == * Introduce a new experimental branch cache "v3": * branchcache: add more test for the logic around obsolescence and branch heads * branchcache: skip entries that are topological heads in the on disk file * branchcache: add a "pure topological head" fast path * branchcache: allow to detect "pure topological case" for branchmap == Bug Fixes == * rust: use `cpython` 0.7.2 crate to add support for Python 3.12 * perf-stream-locked-section: actually use v1 generation when requested * perf-stream-locked-section: fix the call to the v3 generator * perf-stream-locked-section: advertise the right version key in the help * stream: in v3, skip the "size" fast path if the entries have some unknown size * stream-clone: stop getting the file size of all file in v3 * streamclone: stop listing files for entries that have no volatile files * perf-stream-consume: use the source repository config when applying * bundle: do no check the changegroup version if no changegroup is included * perf: create the temporary target next to the source in stream-consume * bundlespec: fix the "streamv2" and "streamv3-exp" variant * push: rework the computation of fallbackheads to be correct * profiler: flush after writing the profiler output * base-revsets: use an author that actually exercises a lot of changesets * hgrc: search XDG_CONFIG_HOME on mac * clonebundles: add missing newline to legacy response * narrow: add a test for linkrev computation done during widen * Multiple fixes to guard against mmap issues * portability: fix build on Solaris-derived systemd == Backwards Compatibility Changes == == Internal API Changes == == Miscellaneous == * obsolete: quote the feature name