Mercurial 6.1 (2022-02-28)#
‘’’This is the last release to support Python 2 and Python 3.5. Mercurial is Python 3.6+ only starting with 6.2’’’
Mercurial 6.1.4#
Additional stable release just before 6.2 since we’re dropping Python 2.
url: raise error if CONNECT request to proxy was unsuccessful
docker: avoid /tmp write access issues by fixing permissions
logcmdutil: use the same data as {file*} template keywords (issue6642)
commit: allow to close branch when committing change over a closed head
rust-status: don’t trigger dirstate v1 rewrite when only v2 data is changed
purge: prevent a silly crash with –confirm –files
rust: relax im-rc dependency to allow minor updates
Improve PyPy support
Improve py3 error handling
Documentation fixes
Mercurial 6.1.3#
‘’’security: ‘’’
narrow_widen_acl: enforce narrowacl in narrow_widen (SEC) 6b10151b9621
‘’’normal notes: ‘’’
censor: fix [hg update] away from a revision with censored files
amend: stop losing copies when amending
rhg: strengthen dirstate v2 writing in broken filesystems
work around some broken DLL imports in Windows
worker: adapt _blockingreader to work around a python3.8.[0-1] bug (issue6444)
rhg: correctly handle the case where diffs are encoded relative to nullrev
fix bugs and race-conditions in the Mercurial test runner
chg: ignore already closed fds when cleaning up
Mercurial 6.1.2#
Improve Windows test suite
Fix
debuglock
not ignoring a missing lockfile when forcing a lockImprove help of
ui.large-file-limit
Set the large-file-limit to 10MB (from 10MiB) for clarity
While rewriting desc hashes, ignore ambiguous prefix “hashes”
Fix a crash in partial amend with copies
Fix a py3 compatiblity bug
‘’’Fix incorrect metadata causing dirstate-v2 data loss in edge case (dd2503a63d33)’’’
Fix cleanup of old dirstate-v2 data files when using
rhg
Make reference to
.hg/last_message.txt
relative in commitFix an infinite hang when
rhg
is used in the backgroundFix Python DLL loading bug in Windows
Add
--docket
flag todebugstate
to check out dirstate-v2 metadataRemove
debugdirstateignorepatternhash
in favor ofdebugstate --docket
Fix incorrect metadata causing systematic complete dirstate-v2 rewrite
Mercurial 6.1.1#
‘’’Fix unsoundness (no known exploits) in Rust extensions (see cfd270d83169 and dd6b67d5c256)’’’
Fix Rust compilation on
aarcch64
Fix Rust compilation on architectures where
char
is unsignedWhen the merge tool uses
$output
, don’t leave markers in$local
Improve test suite support on big-endian platforms
Cap the number of concurrent threads to 16 in Rust
hg status
to prevent huge speed regression at higher thread countsFix
amend
with copies in extrasAbort if commit we’re trying to
unamend
was not created byhg [un]amend
Fix file name in the pullbundle help text
Fix an issue with data not being correctly reset in the C implementation of dirstate-v2
Fix issue6673 where some tags were missing from cache after a merge
Fix stream-cloning a repo with empty requirements
Fix a false warning about content-divergence creation
Fix silly blackbox entries when hg is interrupted
Fix Rust dirstate counters not being updated correctly leading to some potential bugs (none known)
Stop relying on a compiler implementation detail in Rust HgPath
Mercurial 6.1#
New Features#
Added a way of specifying required extensions that prevent Mercurial from starting if they are not found. See
hg help config.extensions
.Merge conflict markers have been made clearer (see backwards compatibility below)
Improve detailed error codes
Added a hint about mangled whitespace on bad patch
Explain which order the commits are presented in
chistedit
Introduce a
dirstate-tracked-hint
feature to help automation keep track of changes to tracked files. Seehg help config.use-dirstate-tracked-hint
.Shared repositories can be upgraded if the upgrade is specific to the share. For now, this only applies to
dirstate-v2
anddirstate-tracked-hint
.When using the
narrow
extension, non-conflicting changes to files outside of the narrow specification can now be merged.When cloning a repository using stream-clone, the client can now control the repository format variants to use as long as the stream content does not restrict that variant.
Default Format Change#
These changes affect newly created repositories (or new clones) done with Mercurial 6.1.
The
share-safe
format variant is now enabled by default. It makes configuration and requirements more consistent across repository and their shares. This introduces a behavior change as shares from a repository using the new format will also use their main repository’s configuration. Seehg help config.format.use-share-safe
for details about the feature and the available options for auto-upgrading existing shares.
New Experimental Features#
The pure Rust version of Mercurial called
rhg
added support for most common invocations ofhg status
. Seehg help rust.rhg
for details on how to try it out.rhg
supports narrow clones and sparse checkouts.
Bug Fixes#
‘’’Obsolete revisions are skipped while computing heads. In conjunction with the
evolve
extension >= 10.5.0, this leads to massive exchange (push/pull) speedups in repositories with a lot of heads and/or obsolete revisions.’’’Stream-clones now properly advertise all requirements needed. This can result in the stream-clone feature being disabled for some clients using < 6.0.2. A small bugfix patch for these older client is available if necessary.
The
--no-check
and--no-merge
flags now properly overwrite the behavior fromcommands.update.check
rhg
’s fallback detection is more robust in general in the presence of more advanced configsrhg
’sblackbox
now supports milliseconds by default and uses the same ISO 8601 format as the Python implementationFix
rhg
crash on non-generaldelta revlogsThe
lfs
,largefiles
andsparse
extensions now correctly take the appropriate lock before writing requirementsThe
notify
extension does not produce errors anymore if a revision is not foundRemove unnecessary and overly strict check for divergence in
hg fix
Windows compatibility improvements
Miscellaneous Python 3 and typing improvements
Many other small or internal fixes
Backwards Compatibility Changes#
The use of
share-safe
, means shares (of new repositories) will also use their main repository’s configuration see theDefault Format Change
section for details.The fix to stream-clone requirements advertising means some requirements previously (wronly) omitted are now sent. This can confuse client using a Mercurial version < 6.0.2. The client would consider these requirements unsupported even if it actually know them. If you encounter this, either upgrade your client or apply the necessary patch.
The labels passed to merge tools have changed slightly. Merge tools can get labels passed to them if you include
$labellocal
,$labelbase
, and/or$labelother
in themerge-tool.<tool name>.args
configuration. These labels used to have some space-padding, and truncation to fit within 72 columns. Both the padding and the truncation has been removed.Some of the text in labels passed to merge tools has changed. For example, in conflicts while running
hg histedit
, the labels used to be “local”, “base”, and “histedit”. They are now “already edited”, “parent of current change”, and “current change”, respectively.The computation of namedbranch heads now ignores obsolete revisions. User of the Changeset Evolution feature may see a change in location and numbers of heads of each named branches (and topic).
The remotefilelog extension now requires an appropriate excludepattern for subrepositories.
debugsparse
’s interface has been reworked to be more flexible. Since it’s a debug command it is not actually a breaking change, but it is worth noting here.Temporary files for merges are now all inside a
hgmerge
directory instead of at the root ofTMPDIR
. The corresponding experimentalmergetempdirprefix
config option has been removed.
Internal API Changes#
The dirstate API received minor modifications.
Miscellaneous#
Removed exchange-v2. It was a prototype that had never been in a working state and had been left untouched since 2017.