Mercurial 6.4 (2023-03-23)#
Mercurial 6.4.5#
- re2: fix reporting of availability in - hg debuginstall
- ui: fix crash in - hg pathswhen 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-deltaoption
- 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:unionbut 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 - wlockfor the full- hg addduration
- locking: take the - wlockfor the full- hg removeduration
- locking: take the - wlockfor the full- hg forgetduration
- locking: take the - wlockfor the full- hg addremoveduration
- 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 - restorebackupmore 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 - _mapproperty cache
- status: invalidate dirstate on LockError 
- dirstate: check that dirstate is clean at the initial context opening 
- dirstate: have - running_statuswrite the dirstate when holding the lock
- dirstate: have - running_statuswarn 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 - rayondependency
- dirstate: fix the bug in [status] dealing with committed&ignored directories 
- dirstate: fix a potential traceback when in - copyand- 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 - zstddependency
- hg-core: upgrade - clapdependency
- hg-core: upgrade all remaining dependencies 
- hg-cpython: upgrade dependencies 
- rhg: upgrade - clapdependency
- 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 - remotethat 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_timerinstead of- micro_timer
- rust: run - cargo clippy
- makefile: add - cargo clippyto tests if cargo is available
- heptapod-ci: add - clippyto 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