Mercurial 6.7 (2024-03-15)#

Mercurial 6.7.4#

Exceptional release following a critical regression causing possible data loss in certain conditions:

  • inline-changelog: fix a critical bug in write_pending that delete data (3cf9e52f5e27)

  • inline-changelog: fix pending transaction visibility when splitting (1721d983dd6d)

Other changes in this release:

  • exchange: fix locking to actually be scoped

  • chistedit: change action for the correct item

  • rust-status: sort the failed matches when printing them

  • hooks: add a prewlock and a prelock hooks

  • bookmark: fix remote bookmark deletion when the push is raced

Mercurial 6.7.3#

⚠️ This release contains a bug causing possible data loss, use 6.7.4 instead.

  • setup: display return code information about failed hg call

  • bundle-spec: properly identify changegroup-less bundle

  • bundle-spec: properly parse boolean configuration as boolean

  • matchers: fix the bug in rust PatternMatcher that made it cut off early

  • match: fix the “visitdir” method on “rootfilesin” matchers

  • match: fix the rust-side bug in visit_children_set for rootfilesin matchers

  • match: strengthen visit_children_set invariant, Recursive means “all files”

  • wireprotoserver: ensure that output stream gets flushed on exception

  • re2: make errors quiet

  • dirstate-v2: add check of parent/child nodes being related when writing

  • dirstate-v2: check that root nodes are at the root before writing

  • rust-cpython: don’t swallow the dirstate error message

  • rust: blanket implementation of Graph for Graph references

  • Various fixes to admin::verify

Mercurial 6.7.2#

⚠️ This release contains a bug causing possible data loss, use 6.7.4 instead.

Exceptional release following a large performance regression when cloning.

We are setting up automated benchmarks to reduce the likelihood of regressions of the sort from happening in the future.

  • phases: avoid a potentially costly dictionary interation in some case

  • phases: update the phase set as we go during retract boundary

  • bundle2: make the “hgtagsfnodes” part advisory

Mercurial 6.7.1#

⚠️ This release contains a bug causing possible data loss, use 6.7.4 instead.

Exceptional release following a crash found in delta code that can be triggered with complex repository shapes.

  • delta-search: fix crash caused by unbound variable

  • sshpeer: fix path when handling invalid url exception

  • subrepo: fix normalizing paths with scheme

Mercurial 6.7#

⚠️ This release contains a bug causing possible data loss, use 6.7.4 instead.

As usual, a lot of patches don’t make it to this list.

New Features#

  • JSON templates can now use structured diffstat data

  • Support rhg status –rev –rev

  • The index for REVLOGv1 now has a Rust implementation

  • Improved hg censor’s output

  • censor: add a command flag to skip the head checks

  • censor: accept multiple revision in a single call

  • usage: add a usage.repository-role config

  • branchmap: use mmap for faster revbranchcache loading

  • crecord: enable search hotkeys (issue6834)

  • hg-core: separate timestamp and extra methods

  • annotate: limit output to range of lines

  • unbundle: faster computation of changed heads

  • Large improvements of some of the phases code (23950e39281f)

  • rust-filepatterns: export glob_to_re function

New Experimental Features#

  • Introduce hg admin::chainsaw-update for automation and advanced users

Bug Fixes#

  • templatekw: fix inconsistency of diffstat with diff.merge

  • The endless stream of Python 3 cleanups continues

  • Improved setup.py robustness

  • Improved test suite robustness

  • add: don’t attempt to add back removed files unless explicitly listed

  • statprof: handle lineno == None in more cases

  • rust: fix cargo doc for hg-cpython

  • rust-python-index: don’t panic on a corrupted index when calling from Python

  • debugindexstats: handle the lack of Rust support better

  • matchers: use correct method for finding index in vector

  • narrow: strip trailing / from manifest dir before matching it

  • cext: fix potential memory leaks of list items appended with PyList_Append

  • doc: document that labels must have a dot in them to have an effect

  • debugformat: fix formatting for compression level

  • obsutil: sort metadata before comparing in geteffectflag()

  • crecord: drop calls to curses.endwin()

  • rust-index: don’t use mutable borrow for head-diff computation

  • rust-index: don’t use mutable borrow to computed filtered heads

Backwards Compatibility Changes#

Users of the Rust extensions and/or rhg should be aware that the new Rust index can result in a performance degradation for push/pull on repositories

  • not* using persistent-nodemap (see hg help config.format.use-persistent-nodemap).

If this is something that matters to you, please reach out to us as this is not an insurmountable obstacle. This is a choice base on the assumption that there are few people in this situation and our time should be spent on more pressing matters.

Internal API Changes#

  • 62913:498017baa34b “cleanup: remove some code scheduled to be removed after 5.9”

  • 62914:88ef80210d67 “cleanup: drop dirstate.is_changing_parent deprecated since 6.5”

  • 62915:591845f89ada “cleanup: drop path.pushloc deprecated since 6.5”

  • 62916:d8f65fc72e7b “cleanup: drop deprecated config attribute on the revlog class”

  • 62917:5c9c41273367 “cleanup: turn pathsuboption deprecation warning into an error”

  • 62918:7b837fabc990 “cleanup: turn wrappedfunction deprecation warning into an error”

  • 62919:eda075d7b2ac “cleanup: turn wrapfunction deprecation warning into an error”

  • 62920:c845479fc64d “cleanup: drop the bytes compatibility for attribute related function”

  • 63464:dcaa2df1f688 “changelog: never inline changelog”

  • 63465:a93e52f0b6ff “changelog: disallow delayed write on inline changesets”

  • 63825:79cd29d598af “dirstate: make the transaction argument of setbranch mandatory”

Miscellaneous#

  • perf: support –template on perf::phases

  • perf: add a –as-push option to perf::unbundle

  • debug: add a debug::unbundle command that simulate the unbundle from a push

  • Lots of refactorings to prepare for performance improvements and remove tech debt