= 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