# 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 lock
- Improve 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 commit
- Fix an infinite hang when `rhg` is used in the background
- Fix Python DLL loading bug in Windows
- Add `--docket` flag to `debugstate` to check out dirstate-v2 metadata
- Remove `debugdirstateignorepatternhash` in favor of `debugstate --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 unsigned
- When 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 counts
- Fix `amend` with copies in extras
- Abort if commit we're trying to `unamend` was not created by `hg [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. See `hg 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` and `dirstate-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. See `hg 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 of `hg status`. See `hg 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 from `commands.update.check`
 - `rhg`'s fallback detection is more robust in general in the presence of more advanced configs
 - `rhg`'s `blackbox` now supports milliseconds by default and uses the same ISO 8601 format as the Python implementation
 - Fix `rhg` crash on non-generaldelta revlogs
 - The `lfs`, `largefiles` and `sparse` extensions now correctly take the appropriate lock before writing requirements
 - The `notify` extension does not produce errors anymore if a revision is not found
 - Remove 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 the `Default 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 the `merge-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 of `TMPDIR`. The corresponding experimental `mergetempdirprefix` 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.
