view relnotes/6.4 @ 50942:75d3306fbc9a stable

tags: avoid expensive access to repo.changelog in a loop repo.changelog needs some cache invalidation when run on filtered repository. Accessing it in that loop can be expensive when there is many heads (e.g. mozilla try and it 25 000 heads). Note that the loop itself seems useless, but after this patch it no longer take about ⅛ of the time we spend computing cache for mozilla try. before : ! wall 0.350994 comb 0.350000 user 0.330000 sys 0.020000 (median of 28) after : ! wall 0.319520 comb 0.310000 user 0.290000 sys 0.020000 (median of 30)
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 21 Jun 2023 21:57:44 +0200
parents 271a4ab29605
children
line wrap: on
line source

= Mercurial 6.4.5 =

 * re2: fix reporting of availability in `hg debuginstall`
 * ui: fix crash in `hg paths` when pulled-delta-reuse-policy is in use
 * path: display proper user facing value for pulled-delta-reuse-policy

= Mercurial 6.4.4 =

 * clonebundles: filter out invalid schemes instead of failing on them
 * doc: format argument for date uses strftime format string (issue6818)
 * test: make test-contrib-perf.t more robust
 * revlog: fix a bug in revlog splitting
 * bundles: clarify streaming v2 bundle usage
 * delta-find: fix pulled-delta-reuse-policy=forced behavior
 * dirstate: fall back to v1 if reading v2 failed
 * revlog: avoid possible collision between directory and temporary index

= Mercurial 6.4.3 =

 * chg: declare environ (issue6812)
 * chg: set CHGHG before connecting to command server
 * delta-find: never do anything fancy when general delta is off
 * delta-find: add a simple safeguard to prevent bad non-general-delta
 * debug-delta: add minimal documentation for `devel.bundle-delta` option
 * fix: highlight the required configuration and behavior of the fixer tools
 * rhg: don't print copy source when --no-status is passed
 * rhg: correctly relativize copy source path
 * repo-upgrade: write new requirement before upgrading the dirstate
 * backup: fix issue when the backup end up in a different directory

= Mercurial 6.4.2 =

Exceptional bugfix release due to a corruption bug that happens when using
clonebundles on repositories with large files.

 * revlog-split: make sure the self._indexfile attribute is reset (issue6811)


= Mercurial 6.4.1 =

 * rhg: fix a bug in path encoding
 * rhg: don't crash on empty directory names in path_encode, just in case
 * commands: correct documentation of hg serve’s --ipv6 options
 * run-tests: remove obsolete coverage check and packaging import (issue6805)
 * chg: populate CHGHG if not set
 * match: sort patterns before compiling them into a regex
 * match: match explicit file using a set
 * rebase: do not cleanup the working copy when --dry-run is used (issue6802)
 * sslutil: set context security level for legacy tls testing (issue6760)


= Mercurial 6.4 =

== New Features ==

 * There is a new internal merge tool called `internal:union-other-first`.
   It works like `internal:union` but add other side on top of local.
 * Pullbundles are enabled by default
 * delta-find: add a way to control the number of bases tested at the same time
 * changelog-v2: add a configuration to disable rank computation
 * debug: add an option to display statistic about a bundling operation
 * debug: add an option to display statistic about a unbundling operation
 * delta-find: add a delta-reuse policy that blindly accepts incoming deltas
 * debug: add debug-revlog-stats command
 * dirstate: add narrow support to `verify`
 * verify: also check dirstate
 * commit: add --draft option to use draft phase
 * amend: add a --draft option to set phase to draft
 * debug: add a config to abort update early
 * rhg: implement checkexec to support weird filesystems
 * debugshell: allow commands to be specified as a CLI argument
 * rhg-files: add support for narrow when specifying a revision
 * rust-narrow: enable narrow support for plain `rhg files`

== Bug Fixes ==

Aside from the following (unordered) commits which made it through a manual filter, there are a bunch of typing improvements and fixes, removal of deprecated code and general code cleanup.

 * lfs: improve an exception message for blob corruption detected on transfer
 * revlog: use the user facing filename as the display_id for filelogs
 * rust-status: query fs traversal metadata lazily
 * shelve: add Shelf.changed_files for resolving changed files in a plugin
 * demandimport: ensure lazyloaderex sets loader attributes (issue6725)
 * typing: fix a syntax error in mercurial/cext/bdiff.pyi
 * cffi: fix a bytes vs str issue on macOS when listing directories
 * changelog-v2: fix the docket `struct`
 * schemes: fix a broken check for drive letter conflicts
 * worker: avoid reading 1 byte at a time from the OS pipe
 * rust-narrow: fix loop that never loops
 * setup: Ensure target directory exists with building rust extension
 * dirstate: invalidate changes when parent-change fails
 * dirstate: warn about non-explicitly rolledback parent-change
 * dirstate: write dirstate on successful exit of changing_parents context
 * largefile: make sure we hold the lock when updating the second dirstate
 * dirstate: enforce holding the lock while doing any changes
 * run-tests: stop ignoring venv-installed packages
 * transaction: run abort callback in all cases
 * transaction: quietly rollback if no other changes than temporary files
 * debugrebuilddirstate: double check that no transaction is open
 * dirstate: do not write an empty dirstate just for backup
 * locking: take the `wlock` for the full `hg add` duration
 * locking: take the `wlock` for the full `hg remove` duration
 * locking: take the `wlock` for the full `hg forget` duration
 * locking: take the `wlock` for the full `hg addremove` duration
 * locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
 * locking: hold the wlock for the full duration of the "keyword demo"
 * mq: properly take the wlock during the full qfold operation
 * dirstate: invalidate the dirstate change on transaction failure
 * status: fix post status writing
 * status: fix post status invalidation
 * dirstate: avoid transaction backup/restore if we do not hold the lock
 * rollback: explicitly skip dirstate rollback when applicable
 * dirstate-guard: remove the feature
 * dirstate: make `restorebackup` more robust when it is a noop
 * dirstate: generalize the dirstate's invalidation on transaction abort
 * dirstate: detect potential fishy transaction patterns while changing
 * mq: write the dirstate before stripping
 * dirstate: explicitly backup the datafile
 * localrepo: enforce a clean dirstate when the transaction open
 * localrepo: "blindly" do a dirstate backup at the end of the transaction
 * dirstate: remove the dedicated backup logic
 * rhg: fix a bug in path_encode
 * dirstate: invalidate on all exceptions
 * large-files: make sure we write newly initialized standin file early
 * dirstate: warn if dirty when starting an edition
 * dirstate: track that changes are pending in a transaction
 * dirstate: distinct transaction callback from largefile
 * automv: lock the repository before searching for renames
 * dirstate: only reload the dirstate when it may have changed
 * dirstate: cleanup the `_map` property cache
 * status: invalidate dirstate  on LockError
 * dirstate: check that dirstate is clean at the initial context opening
 * dirstate: have `running_status` write the dirstate when holding the lock
 * dirstate: have `running_status` warn when exiting with a dirty dirstate
 * narrow: widden the lock context in `tracking`
 * narrow: enforce that narrow spec is written within a transaction
 * transaction: no longer explicitly cache phaseroots
 * transaction: no longer explicitly cache bookmarks
 * transaction: use the standard transaction mechanism to backup branch
 * bundlerepo: handle changegroup induced phase movement in the associated method
 * bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
 * config-item: declare undeclared path suboption
 * narrow: read pending file when applicable
 * rust: fix building on macOS (issue6801)
 * run-tests: fix a crash when using the coverage options
 * undo-files: also remove the undo.backupfiles
 * undo-files: cleanup backup when cleaning undos
 * undo-files: clean existing files up before writing new one
 * undo-files: cleanup legacy files when applicable
 * dirstate-v2: fix an incorrect handling of readdir errors
 * rust: update zstd dependency
 * rust: upgrade `rayon` dependency
 * dirstate: fix the bug in [status] dealing with committed&ignored directories
 * dirstate: fix a potential traceback when in `copy` and `rename`
 * histedit: fix diff colors
 * cext: fix for PyLong refactoring in CPython 3.12
 * py3: fix for Python 3.12 emitting SyntaxWarning on invalid escape sequences
 * statprof: with Python 3.12, lineno is (more) often None
 * transaction: properly clean up backup file outside of .hg/store/
 * transaction: raise on backup restoration error
 * revlog: improve the robustness of the splitting process
 * debugdeltachain: stop summing the same chain over and over
 * url: don't ignore timeout for https connections
 * py3: fix for Python 3.12 emitting SyntaxWarning on invalid escape sequences
 * tests: accept a test output change in [tests/test-serve.t]
 * rust: fix thread cap (for real this time)
 * dirstate: try refreshing the changelog when parent are unknown
 * hooks: invalidate the repo after the hooks

== Backwards Compatibility Changes ==
 * rust: upgrade supported Rust toolchain version
 * rust: move all crates in the main workspace to edition 2021
 * hg-core: upgrade `zstd` dependency
 * hg-core: upgrade `clap` dependency
 * hg-core: upgrade all remaining dependencies
 * hg-cpython: upgrade dependencies
 * rhg: upgrade `clap` dependency
 * rhg: upgrade the remainder of the dependencies

== Internal API Changes ==

 * Many APIs around the dirstate have been made much stricter with regards to
   locking and transaction handling
 * Some dirstate APIs have been renamed/removed
 * In both cases, you should get loud complaints in your tests if you do
   something wrong.

== Miscellaneous ==

 * pullbundle support no longer requires setting a server-side option,
   providing a .hg/pullbundles.manifest according to the syntax specified in
   'hg help -e clonebundles' is enough.
 * debug-delta-find: add a --source option
 * delta-find: add debug information about reuse of cached data
 * delta-find: set the default candidate chunk size to 10
 * attr: vendor 22.1.0
 * configitems: add a default value for "merge-tools.xxx.regappend"
 * debugrevlog: display total stored information
 * emitrevision: if we need to compute a delta on the fly, try p1 or p2 first
 * emitrevision: consider ancestors revision to emit as available base
 * find-delta: pass the cache-delta usage policy alongside the cache-delta
 * delta-find: use a smarter object for snapshot caching
 * delta-find: use sets instead of list in the snapshot cache
 * delta-find: make sure we only use newer full snapshot as candidate
 * delta-find: use a single snapshot cache when applying a group to an object
 * bundleoperation: optionnaly record the `remote` that produced the bundle
 * bundle: when forcing acceptance of incoming delta also accept snapshot
 * bundle: emit full snapshot as is, without doing a redelta
 * pathutil: slightly faster path audit in the common case
 * merge: don't pay for pathconflicts if there are none
 * merge: short-circuit the _checkfs loop upon getting ENOENT
 * merge: disable the whole filesystem access loop if [_realfs] is false
 * merge: cache the fs checks made during [_checkunknownfiles]
 * rust: use `logging_timer` instead of `micro_timer`
 * rust: run `cargo clippy`
 * makefile: add `cargo clippy` to tests if cargo is available
 * heptapod-ci: add `clippy` to the CI
 * convert: use a priority queue for sorting commits, to make sorting faster
 * delta-find: adjust the default candidate group chunk size
 * delta-find: declare the "paths..*:pulled-delta-reuse-policy option