Release Notes

Features and bugfixes in our latest releases. Please see the Download page for links to source and binaries.

Note that Mercurial follows a time-based release plan with major releases every three months and minor (bugfix) releases on the first of every month (see TimeBasedReleasePlan).

Be sure to read the upgrade notes when upgrading.

(See the archive for older versions)

1. Mercurial 5.5.1 (2020-09-1)

Regularly scheduled bug fix release.

1.1. bug fixes

keepalive: Do not append _rbuf if _raw_readinto exists (issue6356)

2. Mercurial 5.5 (2020-08-03)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.

3. Mercurial 5.4.2 (2020-07-1)

Regularly scheduled bug fix release.

3.1. extensions

rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)

3.2. unsorted

curses: do not initialize LC_ALL to user settings (issue6358)

4. Mercurial 5.4.1 (2020-06-15)

Regularly scheduled bug fix release.

4.1. commands

graft-state: save --base in graft's state, fixing bug with graft --continue

graft: fix --base value to be saved in state file

4.2. core

dirstate: make sure the dirstate is loaded before the changelog (issue6303)

4.3. unsorted

bash_completion: do not use aliased hg if it sources a script (issue6308)

demandimport: fix compatibility with meta path finders w/o find_spec() method

flags: read flag from dirstate/disk for workingcopyctx (issue5743)

fsmonitor: coerce 'clock' variable to byte-string (issue6321)

url: fix a bytes vs str crash in processing proxy headers (issue6249)

5. Mercurial 5.4 (2020-05-01)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.

6. Mercurial 5.3.2 (2020-04-02)

Regularly scheduled bug fix release.

6.1. unsorted

discovery: avoid wrong detection of multiple branch heads (issue6256)

gzip: use the stdlib version with python 3 (issue6284)

7. Mercurial 5.3.1 (2020-03-04)

Regularly scheduled bug fix release.

7.1. commands

branch: make --force work even when specifying revs

import: don't ignore '--secret' when '--bypass' is specified

7.2. extensions

shelve: fix ordering of merge labels

7.3. unsorted

phabricator: fix a phabsend crash when processing a renamed binary

remotefilelog-test: glob some flaky output line (issue6083)

remotefilelog: add 'changelog' arg to shallowcg1packer.generate (issue6269)

8. Mercurial 5.3 (2020-02-03)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.

9. Mercurial 5.2 (2019-11-05)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.

9.1. Backwards Compatibility Changes

* The infinitepush extension is believed to be unused, and will be deleted at

the end of 2020 unless users contact mercurial-devel@mercurial-scm.org.

* 'hg grep' now searches working copy file contents by default. We recognize

this is a significant change from past behavior, but surveys of large bodies of users indicated nobody used (and almost nobody understood) the previous no-flags behavior of 'hg grep'. The new behavior aligns with the behavior most users expected (including hg's maintainers), which also happens to be the behavior of 'git grep'. Given that the old behavior was confusing to the point of being unusable, we were comfortable changing this behavior.

9.2. API Changes

* 'mercurial.hg.update*' and 'mercurial.merge.update' now expect a value from

a set of NAMED_CONSTANTS ('merge.UPDATECHECK_*' constants) rather than a collection of magic strings. As of now, the values are the same, but code should be prepared for these values to change in the future.

* 'mercurial.hg.updatetotally' is now more thorough about checking its

'updatecheck' keyword argument. Previously invalid values would have used the configured default updatecheck method, but now will raise ValueError.

* 'mercurial.bookmarks.bmstore' no longer has a convenience method for looking

up changectx instances from a bookmark name. Use 'repo[repo.bookmarks[name]]' intead of 'repo.bookmarks.changectx(name)'.

9.3. commands

amend: add option to update to the current user

amend: enable support for closing the branch

amend: enable support for using the secret phase

bookmarks: actual fix for race condition deleting bookmark

bookmarks: remove changectx() method from bmstore (API)

branchmap: explicitly warm+write all subsets of the branchmap caches

import: add debug messages when parsing data from patch header

import: read X-Mercurial-Node email header to determine nodeid

log: populate keywords if specified in custom -Tjson(...) or -Tcbor(...)

merge: replace magic strings with NAMED_CONSTANTS (API)

push: support config option to require revs be specified when running push

9.4. core

exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)

exchange: avoid unnecessary conversion of bookmark nodes to hex (API)

revlog: add a 'sidedata' parameters to addrevision

revlog: add a way to control sidedata changes during revlog.clone

revlog: add the appropriate flag is sidedata are passed to 'addrevision'

revlog: assign rawtext earlier in '_revisiondata'

revlog: avoid caching raw text too early in _revisiondata

revlog: deprecate the use of 'revision(..., raw=True)'

revlog: drop silly 'raw' parameter to 'rawdata' function

revlog: explicitly set revlogv0 in vfs options

revlog: introduce a 'sidedata' method

revlog: move 'nullid' early return sooner in '_revisiondata'

revlog: return sidedata map from '_revisiondata'

revlog: stop calling 'basetext' 'rawtext' in _revisiondata

revlog: stop using '_processflags' directly

revlog: use the new sidedata map return in the sidedata method

templatefuncs: account for user's diffopts in diff() (BC)

ui: option to preserve the progress bar

9.5. extensions

eol: don't fallback to use .hgeol from tip (BC)

largefiles: use context manager for setting "lfstatus" on subrepos too

rebase: track new nodes when --keep is set

unshelve: abort on using --keep and --interactive together

unshelve: add abort on using continue and interactive together

unshelve: changes how date is set on interactive mode

unshelve: create a matcher only if required on creating unshelve ctx

unshelve: delete shelvedstate after a successful unshelve --continue

unshelve: forget unknown files after a partial unshelve

unshelve: handle stripping changesets on interactive mode

unshelve: store information about interactive mode in shelvedstate

unshelve: unify logic around creating an unshelve changeset

9.6. unsorted

automation: add a command to submit to a Try server

automation: support and use Debian Buster by default

changelog: make copies related function return None or a valid value

continue: added support for transplant

copies: remove existing copy info from the changeset on amend (BC)

demandimport: explicitly declare '_session' at the module level

discovery: replace "heads" by "changesets" in a output note (BC)

fastannotate: remove support for flock() locking

fix: warn when a fixer doesn't have a configured command

flagprocessors: deprecate _processflags

flagprocessors: have the read transform function return side data (API)

flagprocessors: writetransform function take side data as parameter (API)

flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)

flagutil: move addflagprocessor to the new module (API)

flagutil: move insertflagprocessor to the new module (API)

format: format commands.py, which recently regressed

grep: enable all-files by default (BC)

hg: have 'updatetotally' more thoroughly check updatecheck argument (API)

infinitepush: mark extension as likely to be deleted

narrow: don't hexify paths and double-hexify known nodes on wire (BC)

narrow: drop server support for widening using the getbundle command (BC)

notify: add option for deterministic message-id generation

py3: prevent comparison with None in curses histedit (issue6196)

python-zstandard: apply big-endian fix (issue6188)

remotefilelog: reduce probability of race-condition in remotefilelog tests

rust-dirstate-status: add call to rust-fast path for 'dirstate.status'

rust-dirstate-status: rust-cpython bindings for 'dirstate.status'

rust-dirstate-status: use fast-path even with fsmonitor and sparse extensions

rust-discovery: optionally don't randomize at all, for tests

sidedata: introduce a new requirement to protect the feature

split: handle partial commit of renames when doing split or record (issue5723)

sshserver: flush stream after command dispatch

test: allow different result for zstd compression (issue6188)

transplant: added support for --stop flag

uncommit: add options to update to the current user or current date

uncommit: add support to modify the commit message and date

uncommit: drop the hyphen from --current-user and --current-date

uncommit: enable support for adding a note

uncommit: make -D/--date and -U/--user mutually exclusive

9.7. Behavior Changes

copies: remove existing copy info from the changeset on amend (BC)

discovery: replace "heads" by "changesets" in a output note (BC)

eol: don't fallback to use .hgeol from tip (BC)

grep: enable all-files by default (BC)

narrow: don't hexify paths and double-hexify known nodes on wire (BC)

narrow: drop server support for widening using the getbundle command (BC)

templatefuncs: account for user's diffopts in diff() (BC)

9.8. Internal API Changes

bookmarks: remove changectx() method from bmstore (API)

exchange: avoid unnecessary conversion of bookmark nodes to hex (API)

flagprocessors: have the read transform function return side data (API)

flagprocessors: writetransform function take side data as parameter (API)

flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)

flagutil: move addflagprocessor to the new module (API)

flagutil: move insertflagprocessor to the new module (API)

hg: have 'updatetotally' more thoroughly check updatecheck argument (API)

merge: replace magic strings with NAMED_CONSTANTS (API)

10. Mercurial 5.1.2 (2019-10-02)

Regularly scheduled bug fix release.

10.1. extensions

phabricator: don't abort if property writing fails during amending

10.2. tests

test: allow different result for zstd compression (issue6188)

11. Mercurial 5.1.1 (2019-09-05)

Regularly scheduled bug fix release.

11.1. commands

bookmarks: actual fix for race condition deleting bookmark

11.2. core

exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)

python-zstandard: apply big-endian fix (issue6188)

fncache: make debugrebuildfncache not fail on broken fncache

11.3. tests

various test runner fixes

fixed use of tr --delete for tr(1) portability

12. Mercurial 5.1 (2019-08-01)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.

12.1. commands

bookmark: also make bookmark cache depends of the changelog

bookmarks: actual fix for race condition deleting bookmark

bookmarks: actually trigger the race deleting bookmark in the test

bookmarks: backout the attempt to fix the delete race

bookmarks: keep bookmarks in .hg/store if new config set

bookmarks: use context manager when writing files

bookmarks: use correct store for "ambiguity check"

branch: abort if closing branch from a non-branchhead cset

branchcache: store the maximum tip in a variable inside for loop

commands: drop support for legacy ^cmd registration (API)

commit: add --force-close-branch flag to close a non-head changeset

commit: add a check if it is trying to close an already closed branch head

commit: add ability to print file status after each successful invocation

commit: allow --interactive to work again when naming a directory (issue6131)

commit: improve the files field of changelog for merges

commit: make the error message more specific while aborting branch closing

commit: respect --no-edit in combination with --amend

graft: moved abortgraft and readgraft to cmdutil

help: check if a subtopic exists and raise an error if it doesn't (issue6145)

log: add config for making 'hg log -G' always topo-sorted

log: flag topo-sorted set as such

log: pass getcopies() function instead of getrenamed() to displayer (API)

merge: disallow merge abort in case of an unfinished operation (issue6160)

patch: use a short, fixed-size message for last line of prompt (issue6158)

push: added clear warning message when pushing closed branches(issue6080)

tags: avoid double-reversing a list

verify: also check full manifest validity during verify runs

verify: introduce a notion of "level"

verify: introduce an experimental --full flag

12.2. core

docs: man page and HTML help now order commands categorically, instead of alphabetically

minirst: support subsubsubsubsections (header level 5) with marker ''''

revlog: add the option to track the expected compression upper bound

revlog: speed up isancestor

templatekw: make {file_*} compare to both merge parents (issue4292)

templater: drop support for old style keywords (API)

util: make util.dirs() and util.finddirs() include root directory (API)

12.3. extensions

largefiles: make last line of prompts <40 english chars (issue6158)

mq: fix for merge detection methods

rebase: fix in-memory rebasing of copy of empty file

rebase: tweak description of inmemory working even w/ dirty working dir

shelve: modify help text on --interactive

unshelve: add interactive mode

unshelve: add space to help

unshelve: changed Corruptedstate error msg from ui.warn to error.Abort

unshelve: mark unshelve interactive as experimental

12.4. unsorted

abort: added support for graft

abort: added support for histedit

abort: added support for merge

abort: added support for rebase

abort: added support for unshelve

automation: initial support for running Linux tests

bisect: do not crash with rewritten commits

blackbox: disable extremely verbose logging (issue6110)

catapipe: add support for COUNTER events

changelog: define changelogrevision.p[12]copies for null revision

changelog: fix handling of empty copy entries in changeset

changelog: optionally store added and removed files in changeset extras

continue: added support for rebase

continue: added support for unshelve

copies: filter invalid copies only at end of pathcopies() (issue6163)

copies: follow copies across merge base without source file (issue6163)

debugrevlog: fix average size computation for empty data (issue6167)

drawdag: don't crash when writing copy info to changesets

extdata: avoid crashing inside subprocess when we get a revset parse error

extensions: drop support for extsetup() without 'ui' argument (API)

filemerge: make last line of prompts <40 english chars (issue6158)

graphmod: remove support for graph lines mixing parent/grandparent styles (BC)

manifest: avoid corruption by dropping removed files with pure (issue5801)

match: remove unused match.__iter__ implementation (API)

match: use '' instead of '.' for root directory (API)

procutil: allow callers of runbgcommand to assume the process starts

remotefilelog: check if RFL is enabled in getrenamedfn() override

remotefilelog: handle copies in changesets in getrenamedfn() override

remotefilelog: log when we're about to fetch files

remotefilelog: tell runbgcommand to not block on child process startup

root: add support for -Tformatter option

sslutil: add support for SSLKEYLOGFILE to wrapsocket

sslutil: fsencode path returned by certifi (issue6132)

statecheck: added support for STATES

subrepos: make last line of prompts <40 english chars (issue6158)

tests: make the grep pattern in remotefilelog-gcrepack portable (issue6122)

tests: work around libressl being different about error strings (issue6122)

tracing: add support for emitting counters

worker: support parallelization of functions with return values

zsh: enable completion support for chg as well

12.5. Behavior Changes

graphmod: remove support for graph lines mixing parent/grandparent styles (BC)

12.6. Internal API Changes

commands: drop support for legacy ^cmd registration (API)

extensions: drop support for extsetup() without 'ui' argument (API)

log: pass getcopies() function instead of getrenamed() to displayer (API)

match: remove unused match.__iter__ implementation (API)

match: use '' instead of '.' for root directory (API)

templater: drop support for old style keywords (API)

util: make util.dirs() and util.finddirs() include root directory (API)

13. Mercurial 5.0.2

A regularly scheduled bugfix release.

13.1. commands

Help fixes on hg mv and hg cp

13.2. unsorted

debugrevlog: fix average size computation for empty data (issue6167)

Fix an obscure data corruption bug with musl libc (and presumably others). See https://www.mercurial-scm.org/repo/hg-committed/rev/97ada9b8d51b the fix for more details.

14. Mercurial 5.0.1

A regularly scheduled bugfix release.

14.1. commands

bookmark: also make bookmark cache depends of the changelog

commit: allow --interactive to work again when naming a directory (issue6131)

14.2. unsorted

manifest: avoid corruption by dropping removed files with pure (issue5801)

sslutil: fsencode path returned by certifi (issue6132)

15. Mercurial 5.0 (2019-05-01)

An overview of new features available. This is a regularly-scheduled quarterly feature release.

16. Mercurial 4.9.1 (2019-03-19)

A regularly scheduled bugfix release, late due to vacations and similar disruptions at the regular time.

16.1. commands

record: prevent commits that don't pick up dirty subrepo changes (issue6102)

16.2. extensions

rebase: add missing dashes in help text

16.3. unsorted

subrepo: avoid false unsafe path detection on Windows

test-https: add some more known failure messages of client certs (issue6030)

17. Mercurial 4.9 (2019-02-01)

An overview of new features available. This is a regularly-scheduled quarterly feature release that also contains security fixes.

17.1. security

It was possible to use symlinks and subrepositories to defeat Mercurial's path-checking logic and write files outside a repository. This has been fixed. Users on older versions can either disable subrepositories with [subrepos] allowed=false in their configuration or by ensuring any cloned repositories don't contain malicious symlinks.

17.2. commands

archive: use manifest.matches() to simplify and speed up matching

branch: allow changing branch of merge commits with --rev

branches: add -r option to show branch name(s) of a given rev (issue5948)

graft: abort if --date/user specified with --currentdate/currentuser (BC)

graft: introduce --base option for using custom base revision while merging

help: add internals.extensions topic

help: show advanced, experimental and deprecated extensions with --verbose

log: fix line wrap on diffstat with -G/--graph (issue5800)

merge: make local file storage in the .hg/merge directory extensible

pull: fix inconsistent view of bookmarks during pull (issue4700)

push: add --publish flag to change phase of pushed changesets

push: config option to control behavior when pushing to a publishing server

resolve: fix mark-check when a file was deleted on one side (issue6020)

tags: cache 'repo.changelog' access when checking tags nodes

update: fix edge-case with update.atomic-file and read-only files

17.3. core

revlog: always enable generaldelta on version 2 revlogs

revlog: make sure we never use sparserevlog without general delta (issue6056)

revset: enforce "%d" to be interpreted as literal revision number (API) (BC)

revset: introduce an API that avoids 'formatspec' input serialization

revsets: make bookmark/named('re:nonexistent') not abort (issue6018) (BC)

templatekw: deprecate p1rev/p2rev/p1node/p2node in favor of p1/p2

templatekw: fix crash on multiple latesttags resolution at wdir (issue6055)

templater: check invalid use of list expression properly (issue5920)

transaction: display data about why the transaction failed to rollback

ui: add config knob to redirect status messages to stderr (API)

ui: remove unreachable branches and function calls from write() (issue6059)

vfs: also audit rename

wireproto: in batch queries, support queries with immediate responses

17.4. extensions

absorb: don't prompt to apply changes when there are none to apply

amend: add -D/--currentdate option

amend: add config option to update time to current in hg amend (issue5828)

blackbox: add configitem for format of log timestamps

bookflow: new extension for bookmark-based branching

convert: don't drop commits that are empty in the source when using --filemap

extensions: deprecate extsetup without a 'ui' argument (API)

extensions: import the exthelper class from evolve 980565468003 (API)

fix: add a config to abort when a fixer tool fails

fix: add extra field to fixed revisions to avoid creating obsolescence cycles

fix: add suboption for configuring execution order of tools

histedit: add rewrite.update-timestamp support to fold and mess

histedit: add warning message on editing tagged commits (issue4017)

histedit: drop unused constructor arguments (API)

histedit: fix --continue and --abort when curses is enabled

histedit: import chistedit curses UI from hg-experimental

lfs: improve the hints for common errors in the Batch API

logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)

logtoprocess: leverage procutil.shellenviron() to stringify variables (BC)

narrow: don't resurrect old commits when narrowing (don't strip obsmarkers)

narrow: drop the bundle2 capability since we have server capabilities (BC)

phabricator: teach {phabreview} to work without --amend

phabricator: warn if unable to amend, instead of aborting after posting

remotefilelog: fix {file_copies} template keyword

remotefilelog: import pruned-down remotefilelog extension from hg-experimental

sparse: don't enable on clone if it was a narrow clone

strip: compute bookmark target only if we have bookmark to move

17.5. unsorted

changegroup: add a option to create bundle with full snapshot only

changegroup: allow to force delta to be against p1

commandserver: add IPC channel to teach repository path on command finished

commandserver: add config knob for various logging options

commandserver: add experimental option to use separate message channel

commandserver: send raw progress information to message channel

filecache: unimplement __set__ () and __delete__ () (API)

http: allow 'auth.prefix' to have a username consistent with the URI

match: support rooted globs in hgignore

merge-tools: when calling external merge tool, describe the resolve inputs

mergetools: adjust Beyond Compare config on Mac/Linux

obsutil: fix the issue5686

progress: deprecate ui.progress()

rust-cpython: binding for AncestorsIterator

rust-cpython: binding for LazyAncestors

rust-cpython: bindings for MissingAncestors

sparse-revlog: disable sparse-revlog if config disable general-delta

sparse-revlog: enabled by default

storage: update sqlitestore to use the new 'deltamode' parameter

store: raise ProgrammingError if unable to decode a storage path

subrepo: extend path auditing test to include more weird patterns (SEC)

subrepo: prohibit variable expansion on creation of hg subrepo (SEC)

subrepo: reject potentially unsafe subrepo paths (BC) (SEC)

17.6. Behavior Changes

graft: abort if --date/user specified with --currentdate/currentuser (BC)

logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)

logtoprocess: leverage procutil.shellenviron() to stringify variables (BC)

narrow: drop the bundle2 capability since we have server capabilities (BC)

revset: enforce "%d" to be interpreted as literal revision number (API) (BC)

revsets: make bookmark/named('re:nonexistent') not abort (issue6018) (BC)

subrepo: reject potentially unsafe subrepo paths (BC) (SEC)

17.7. Internal API Changes

extensions: deprecate extsetup without a 'ui' argument (API)

extensions: import the exthelper class from evolve 980565468003 (API)

filecache: unimplement __set__ () and __delete__ () (API)

histedit: drop unused constructor arguments (API)

revset: enforce "%d" to be interpreted as literal revision number (API) (BC)

ui: add config knob to redirect status messages to stderr (API)

18. Mercurial 4.8.2 (2019-01-07)

This is a regularly-scheduled bugfix release containing following fixes:

18.1. commands

update: do not pass in user revspec as default destination (issue6044)

18.2. core

match: fix assertion for fileset with no context (issue6046)

revlog: catch delta base value under -1

revlog: catch revlog corruption in index_baserev

server: always close http socket if responding with an error (issue6033)

vfs: ensure closewrapbase fh doesn't escape by entering context manager

18.3. extensions

phabricator: properly encode boolean types in the request body

18.4. unsorted

windows: ensure mixedfilemodewrapper fd doesn't escape by entering context mgr

worker: do not swallow exception occurred in main process

19. Mercurial 4.8.1 (2018-12-04)

A regularly scheduled bugfix release. Some security fixes are included, but all are expected to be low-risk.

19.1. commands

commandserver: get around ETIMEDOUT raised by selectors2

graft: do not try to skip rev derived from ancestor more than once (issue6024)

verify: provide unit to ui.makeprogress()

19.2. core

revlog: fix out-of-bounds access by negative parents read from revlog (SEC)

19.3. extensions

rebase: abort in-mem rebase if there's a dirty merge state

rebase: fix dir/file conflict detection when using in-mem merge

rebase: fix path auditing to audit path relative to repo root (issue5818)

rebase: preserve working copy when redoing in-mem rebase on disk

19.4. unsorted

tests: stabilize test-inherit-mode.t on FreeBSD and macOS (issue6026)

20. Mercurial 4.8 (2018-11-02)

An overview of new features available. This is a regularly-scheduled quarterly feature release.

20.1. commands

add: add a label for messages about added files

addremove: add labels for messages about added and removed files

annotate: pass in wdir rev and node to formatter (BC)

annotate: rename {line_number} to {lineno} (BC)

bookmarks: add explicit option to list bookmarks of the given names

bookmarks: pass in formatter to printbookmarks() instead of opts (API)

clone: allow local cloning to create more than one level of directories

debugcommands: introduce debugrevlogindex (BC)

debugcommands: use openstorage() in debugdata (BC)

grep: add MULTIREV support to --allfiles flag

grep: rename {line_number} to {lineno} as well (BC)

grep: search all commits in allfiles mode

help: adding a proper declaration for shortlist/basic commands (API)

help: adding support for command categories

identify: change {parents} to a list of nodes (BC)

identify: show remote bookmarks in 'hg id url -Tjson -B'

log: have changesetformatter fill in wdir() rev and node (BC)

log: respect graphshorten on terminal nodes (collapsing o-~ to just o~)

merge: improve interactive one-changed one-deleted message (issue5550)

phase: explicitly exclude secret phase and above

phase: expose a '_phase(idx)' revset

phase: handle phase with no command flag

phase: report number of non-public changeset alongside the new range

push: add "remote" to 'repository changed while pushing' messages (issue5971)

remove: add a label for messages about removed files

rename: return error status if any rename/copy failed

resolve: add a flag for the default behavior of re-merging

resolve: add config to make hg resolve not re-merge by default

resolve: add confirm config option

resolve: add option to warn/abort on -m with unresolved conflict markers

resolve: graduate resolve.mark-check from experimental, add docs

resolve: rename {status} to {mergestatus} to not shadow change status (BC)

status: advertise --abort instead of 'update -C .' to abort a merge

status: advertise --abort instead of 'update -C .' to abort graft

status: remove "morestatus" message from formatter data (BC)

status: rename {copy} to {source} for compatibility with {file_copies} (BC)

verify: make output less confusing (issue5924)

20.2. core

context: drop compatibility for 'context.descendant' (API)

context: move logic from changectx.__init__ to localrepo.__getitem__ (API)

context: remove unused overlayfilectx (API)

dispatch: don't show list of commands on bogus command

dispatch: making all hg abortions be output with a specific label

dispatch: show a short error message when invalid global option given

exchange: support declaring pull depth

exchange: support defining narrow file patterns for pull

filelog: add a hasnode() method (API)

filelog: drop _generaldelta attribute (API)

filelog: drop index attribute (API)

filelog: remove checkhash() (API)

filelog: remove revdiff() (API)

filelog: remove version attribute (API)

filelog: stop proxying "opener" (API)

filelog: stop proxying _addrevision() (API)

filelog: stop proxying checksize() (API)

filelog: stop proxying compress() (API)

filelog: stop proxying datafile (API)

filelog: stop proxying deltaparent() (API)

filelog: stop proxying flags() (API)

filelog: stop proxying headrevs() (API)

filelog: stop proxying rawsize() (API)

filelog: stop proxying start(), end(), and length() (API)

localrepo: add repository feature when repo can be stream cloned

localrepo: add requirement when narrow files creation option present

localrepo: automatically load lfs extension when required (BC)

localrepo: define "features" on repository instances (API)

localrepo: define storage backend in creation options (API)

localrepo: move repo creation logic out of localrepository.__init__ (API)

localrepo: pass ui to newreporequirements() (API)

localrepo: support marking repos as having shallow file storage

localrepo: support writing shared file (API)

pager: do not enable when TERM=dumb

repository: establish API for emitting revision deltas

revlog: add method for obtaining storage info (API)

revlog: drop LookupError alias (API)

revlog: drop RevlogError alias (API)

revlog: drop compatibility for 'revlog.descendant' (API)

revlog: drop emitrevisiondeltas() and associated functionality (API)

revlog: drop some more error aliases (API)

revlog: new API to emit revision data

revlog: reuse cached delta for identical base revision (issue5975)

revset: expand bookmark(.) to the active bookmark

revsetlang: fix position of '-' in spaceless 'a-b' expressions

streamclone: don't support stream clone unless repo feature present

streamclone: include obsstore file into stream bundle if client can read it

templatefuncs: add truncate parameter to pad

templatekw: add experimental {status} keyword

templatekw: deprecate old-style template keyword function (API)

templates: rename "user" to "luser" defined in default map file (API)

tracing: new module to make tracing events in hg easier

tracing: trace command function execution

transaction: make entries a private attribute (API)

transaction: remember original len(repo) instead of tracking added revs (API)

util: make timedcm require the label (API)

wireprotov2: add bookmarks to "changesetdata" command

wireprotov2: add phases to "changesetdata" command

wireprotov2: client support for advertising redirect targets

wireprotov2: client support for following content redirects

wireprotov2: define and implement "changesetdata" command

wireprotov2: define and implement "filedata" command

wireprotov2: define and implement "filesdata" command

wireprotov2: define and implement "manifestdata" command

wireprotov2: server support for sending content redirects

wireprotov2: support response caching

20.3. extensions

absorb: import extension from Facebook's hg-experimental

absorb: print '{rev}:' as a prefix to the hash

absorb: print summary of changesets affected

absorb: prompt user to accept absorb changes by default

amend: support "history-editing-backup" config option

closehead: fix close-head -r listification

commitextras: work nicely with other extensions

convert: fix a file descriptor leak

extension: add a summary of total loading time per extension

extensions: add detailed loading information

extensions: new closehead module for closing arbitrary heads

fastannotate: initial import from Facebook's hg-experimental

fastannotate: make the default value for 'fastannotate.useflock' dynamic

fix: add a monkey-patchable point after all new revisions have been committed

fix: compute changed lines lazily to make whole-file fixer tools faster

fix: determine fixer tool failure by exit code instead of stderr

fix: pull out flag definitions to make them re-usable from extensions

fsmonitor: use vfs instead of opener (issue5938)

journal: do not pass in repolookuperror string to template (BC)

journal: unify template name for "nodes" (BC)

largefiles: automatically load largefiles extension when required (BC)

lfs: add repository feature denoting the use of LFS

lfs: autoload the extension when cloning from repo with lfs enabled

lfs: consult the narrow matcher when extracting pointers from ctx (issue5794)

lfs: don't add extension to hgrc after clone or share (BC)

lfs: don't add extension to hgrc after conversion (BC)

logtoprocess: connect all fds to /dev/null to avoid bad interaction with pager

logtoprocess: define $HG for children processes

narrow: add '--import-rules' flag to tracked command

narrow: add a --narrowspec flag to clone command

narrow: add narrow and ellipses as server capabilities

narrow: add server logic to send cg while widening without ellipsis

narrow: check for servers' narrow support before doing anything (BC)

narrow: drop support for remote expansion (BC)

narrow: introduce a config option to check if narrow is enabled or not

narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)

narrow: move support for 'hg verify' into core

narrow: the first version of narrow_widen wireprotocol command

narrow: validate spec files are well-formed during clone (BC)

patchbomb: allow using HGHOSTNAME to force a hostname

phabricator: drop support for the legacy phabricator.auth.token config (BC)

phabricator: mark extension as experimental for now

rebase: add --stop option to stop rebase at any point (issue5206)

rebase: don't try to prune obsolete changeset already in the destination

rebase: explicitly track collapses as fold

rebase: skip extinct revisions even if it has no successor in rebase set

rebase: support "history-editing-backup" config option

remotenames: add names argument to remotenames revset

share: allow more than one level of directories to be created

shelve: add an "internal" extra

shelve: fix crash on unshelve without .shelve metadata file

shelve: use the internal phase when possible

sqlitestore: file storage backend using SQLite

strip: ignore orphaned internal changesets while computing safe strip roots

20.4. hgweb

hgweb: add error template to json so it won't crash

hgweb: map Abort to 403 error to report inaccessible path for example

hgweb: show shortlog by default in json output (issue5978)

hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)

20.5. chg

chgserver: add "setumask2" command which uses correct message frame

chgserver: restore pager fds attached within runcommand session

rust-chg: add Client extensions to run cHg-specific requests

rust-chg: add callback to handle pager and shell command requests

20.6. unsorted

ancestors: actually iterate over ancestors in topological order (issue5979)

bundle2: graduate bundle2.stream option from experimental to server section

changegroup: pass sorted revisions into group() (API)

changegroup: port to emitrevisions() (issue5976)

changegroup: remove reordering control (BC)

changegroup: restore default node ordering (issue6001)

cleanupnodes: drop special casing around prune markers (API)

commands: restore compatibility for "^cmd" registration (issue6005)

copies: improve logic of deciding copytracing on based of config options

crecord: make nextsametype() check that parent item exists (issue6009)

crecord: make enter move cursor down to the next item of the same type

delta: skip "empty delta" optimisation for non-general case (issue6006)

error: introduce StorageError

filemerge: add config knob to check capabilities of internal merge tools

filemerge: show warning if chosen tool has no binary files capability

fileset: extract language processing part to new module (API)

fileset: optimize 'x and not y' to 'x - y'

fileset: roughly adjust weights of functions

formatter: remove experimental marker from -T option

formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)

global: replace most uses of RevlogError with StorageError (API)

hg: allow extra arguments to be passed to repo creation (API)

httppeer: expose capabilities for each command

index: drop support for negative indexes into the index

index: handle index[-1] as nullid more explicitly

linelog: fix infinite loop vulnerability

lookup: add option to disambiguate prefix within revset

mail: always fall back to iso-8859-1 if us-ascii won't work (BC)

mail: modernize check for Python-with-TLS

manifest: add rawsize() proxy (API)

meld: enable auto-merge

mergetool: warn if ui.merge points to nonexistent tool

narrowspec: limit patterns to path: and rootfilesin: (BC)

narrowspec: use sparse.parseconfig() to parse narrowspec file (BC)

obsolete: fix ValueError when stored note contains ':' char (issue5783)

overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)

phase: add an archived phase

phases: add an internal phases

pullreport: issue a message about "extinct" pulled changesets

py3: rename pycompat.getcwd() to encoding.getcwd() (API)

revisions: allow "x123" to refer to nodeid prefix "123"

scmutil: accept multiple predecessors in 'replacements' (API)

shortest: never emit 0-length prefix even if unique

shortest: use 'x' prefix to disambiguate from revnum if configured

sparse-revlog: only refine delta candidates in the sparse case (issue6006)

statprof: fix indent level of fp.write() (issue6004)

statprof: update the name as the i increases (issue6003)

storageutil: consistently raise LookupError (API)

storageutil: implement file identifier resolution method (BC)

storageutil: move metadata parsing and packing from revlog (API)

storageutil: new module for storage primitives (API)

url: allow to configure timeout on http connection

20.7. Behavior Changes

annotate: pass in wdir rev and node to formatter (BC)

annotate: rename {line_number} to {lineno} (BC)

changegroup: remove reordering control (BC)

debugcommands: introduce debugrevlogindex (BC)

debugcommands: use openstorage() in debugdata (BC)

formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)

grep: rename {line_number} to {lineno} as well (BC)

identify: change {parents} to a list of nodes (BC)

journal: do not pass in repolookuperror string to template (BC)

journal: unify template name for "nodes" (BC)

largefiles: automatically load largefiles extension when required (BC)

lfs: don't add extension to hgrc after clone or share (BC)

lfs: don't add extension to hgrc after conversion (BC)

localrepo: automatically load lfs extension when required (BC)

log: have changesetformatter fill in wdir() rev and node (BC)

mail: always fall back to iso-8859-1 if us-ascii won't work (BC)

narrow: check for servers' narrow support before doing anything (BC)

narrow: drop support for remote expansion (BC)

narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)

narrow: validate spec files are well-formed during clone (BC)

narrowspec: limit patterns to path: and rootfilesin: (BC)

narrowspec: use sparse.parseconfig() to parse narrowspec file (BC)

phabricator: drop support for the legacy phabricator.auth.token config (BC)

resolve: rename {status} to {mergestatus} to not shadow change status (BC)

status: remove "morestatus" message from formatter data (BC)

status: rename {copy} to {source} for compatibility with {file_copies} (BC)

storageutil: implement file identifier resolution method (BC)

20.8. Internal API Changes

bookmarks: pass in formatter to printbookmarks() instead of opts (API)

changegroup: pass sorted revisions into group() (API)

cleanupnodes: drop special casing around prune markers (API)

context: drop compatibility for 'context.descendant' (API)

context: move logic from changectx.__init__ to localrepo.__getitem__ (API)

context: remove unused overlayfilectx (API)

filelog: add a hasnode() method (API)

filelog: drop _generaldelta attribute (API)

filelog: drop index attribute (API)

filelog: remove checkhash() (API)

filelog: remove revdiff() (API)

filelog: remove version attribute (API)

filelog: stop proxying "opener" (API)

filelog: stop proxying _addrevision() (API)

filelog: stop proxying checksize() (API)

filelog: stop proxying compress() (API)

filelog: stop proxying datafile (API)

filelog: stop proxying deltaparent() (API)

filelog: stop proxying flags() (API)

filelog: stop proxying headrevs() (API)

filelog: stop proxying rawsize() (API)

filelog: stop proxying start(), end(), and length() (API)

fileset: extract language processing part to new module (API)

global: replace most uses of RevlogError with StorageError (API)

help: adding a proper declaration for shortlist/basic commands (API)

hg: allow extra arguments to be passed to repo creation (API)

localrepo: define "features" on repository instances (API)

localrepo: define storage backend in creation options (API)

localrepo: move repo creation logic out of localrepository.__init__ (API)

localrepo: pass ui to newreporequirements() (API)

localrepo: support writing shared file (API)

manifest: add rawsize() proxy (API)

py3: rename pycompat.getcwd() to encoding.getcwd() (API)

revlog: add method for obtaining storage info (API)

revlog: drop LookupError alias (API)

revlog: drop RevlogError alias (API)

revlog: drop compatibility for 'revlog.descendant' (API)

revlog: drop emitrevisiondeltas() and associated functionality (API)

revlog: drop some more error aliases (API)

scmutil: accept multiple predecessors in 'replacements' (API)

storageutil: consistently raise LookupError (API)

storageutil: move metadata parsing and packing from revlog (API)

storageutil: new module for storage primitives (API)

templatekw: deprecate old-style template keyword function (API)

templates: rename "user" to "luser" defined in default map file (API)

transaction: make entries a private attribute (API)

transaction: remember original len(repo) instead of tracking added revs (API)

util: make timedcm require the label (API)

21. Mercurial 4.7.2 (2018-10-01)

This is a regularly-scheduled bugfix release containing following fixes:

21.1. security

Fix a potential out-of-bounds read in manifest parsing C code.

21.2. core

various minor correctness fixes in revsets for commonancestors() and similar

21.3. unsorted

chgserver: do not send system() back to client if stdio redirected (issue5992)

procutil: compare fd number to see if stdio protection is needed (issue5992)

22. Mercurial 4.7.1 (2018-09-04)

This is a regularly-scheduled bugfix release containing following fixes:

22.1. commands

merge: do not delete untracked files silently (issue5962)

22.2. core

revlog: fix descendant deprecated method

22.3. hgweb

hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)

22.4. performance

remotephase: avoid full changelog iteration (issue5964)

remotephase: fast path newheads computation in simple case (issue5964)

scmutil: avoid quadratic membership testing (issue5969)

sparse-revlog: fix delta validity computation

23. Mercurial 4.7 (2018-08-01)

This is a regularly-scheduled quarterly feature release and has its own release notes page which can be found here Full release notes.