Differences between revisions 328 and 448 (spanning 120 versions)
Revision 328 as of 2017-10-01 09:39:30
Size: 92939
Editor: AugieFackler
Comment:
Revision 448 as of 2023-12-07 13:24:37
Size: 50981
Editor: RaphaelGomes
Comment:
Deletions are marked like this. Additions are marked like this.
Line 14: Line 14:
== Mercurial 4.3.3 (2017-10-01) ==
 * Prevent crashes when clearing progress bar. (Bts:issue5684)
 * rebase: move bookmarks with --keep (Bts:issue5682)

== Mercurial 4.3.2 (2017-09-18) ==

 * restore compatibility with older versions of Python 2.7 by not using a bytearray with struct.unpack_from()
 * restore mingw compatibility for setup.py
 * hgwebdir: read 'web.template' untrusted (plugs potential security issue)
 * repair: preserve phase when not using generaldelta (Bts:issue5678)
 * ssh: fix flakey ssh errors on BSD systems
 * restore error handling behavior around certain I/O errors; the regressed behavior could result in transactions not being properly rolled back if stdio handles encountered errors (Bts:issue5658)
 * templatekw: choose {latesttag} by len(changes), not date (Bts:issue5659)
 * record: fix revert -i for lines without newline (Bts:issue5651)
 * mq: create non-lossy patches, also with custom global diff configuration

== Mercurial 4.3 / 4.3.1 (2017-08-10) ==

(4.3.1 was released immediately after 4.3 to fix a release oversight.)

An [[Release4.3|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

=== Notable changes ===

 * experimental amend extension providing the amend command
 * experimental sparse extension
 * Support for Python 2.6 has been dropped.
 * Bundles created by the strip extension now store phase information. It will be restored when unbundling.
 * The strip extension now removes relevant obsmarkers. If a backup requested (the default), the obsmarkers are stored in the backup bundle and will be restored when unbundling.
 * `hg show work` (from the experimental `show` extension) now displays more info
 * `hg show stack` is a new view for the current, in-progress changeset and others around it
 * Mitigation for two security vulnerabilities

=== CVE-2017-1000115 ===

Mercurial's symlink auditing was incomplete prior to 4.3, and could be abused to write to files outside the repository.

=== CVE-2017-1000116 ===

Mercurial was not sanitizing hostnames passed to ssh, allowing shell injection attacks on clients by specifying a hostname starting with -oProxyCommand. This is also present in Git (CVE-2017-1000117) and Subversion (CVE-2017-9800), so please patch those tools as well if you have them installed.


== Mercurial 4.2.3 (2017-08-10) ==
This was an out-of-cycle backport of security fixes from 4.3 for users stuck on Python 2.6.

== Mercurial 4.2.2 (2017-07-05) ==
This is a regularly-scheduled bugfix release.

 * largefiles: avoid a crash when archiving a subrepo with largefiles disabled
 * rebase: also test abort from pretxnclose error
 * rebase: backed out changes 2519994d25ca and cf8ad0e6c0e4 (Bts:issue5610)
 * rebase: reinforce testing around precommit hook interrupting a rebase

== Mercurial 4.2.1 (2017-6-4) ==
This is a regularly-scheduled bugfix release.

 * `hg graft` now works when grafting across merges that were problematic before ([[https://www.mercurial-scm.org/repo/hg-stable/rev/b4e1e30528c7|b4e1e30528c7]]).
 * A race condition in `hg status` was partially fixed (Bts:issue5584).
 * The message about deprecated SHA-1 hashes in the [hostfingerprints] config section now references the correct syntax for replacing them with SHA-256 hashes (Bts:issue5559).

== Mercurial 4.2 (2017-5-2) ==

An [[Release4.2|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

=== Notable changes ===
 * Pager support has been moved into core and is now enabled by default. This is now controlled with the ui.paginate setting.
  * Note that in 4.2-rc, the ui.paginate option was named pager.enable. The old name has been dropped in the final release. If you had turned pagination off using pager.enable=False, please update your config.
 * Color support has also been moved into core and is now enabled by default (the ui.color setting now defaults to 'auto').
 * The new experimental 'show' extension provides a way to view various information about your repository in an ergonomic way. It is deliberately designed for human consumption and not for scripting, so it doesn't carry the same [[CompatibilityRules|backward compatibility guarantees]] as other commands. See 'hg help -e show' for more information.
 * Mercurial now requires `setuptools` on Windows.

=== commands ===
 * Pager support has been added to the 'log', 'diff', 'branches', 'files', 'status', 'summary', and 'tags' commands, as well as the '--patch', '--list', and '--stat' options of hg shelve.
 * bisect: set a blockedtag when running the check command
 * bookmarks: check HG_PENDING strictly
 * branches: populate all template keywords in formatter
 * commandserver: handle backlog before exiting
 * commandserver: prevent unlinking socket twice
 * commit: optionally strip quotes from commit template (BC)
 * diff: add --binary option for git mode diffs
 * help: add pointer how to narrow list of resolved/unresolved files (Bts:issue5469)
 * pager: advertise the config option in the default hgrc
 * pager: avoid shell=True on subprocess.Popen for better errors (Bts:issue5491)
 * pager: don't terminate with extreme prejudice on SIGPIPE (BC)
 * pager: exit cleanly on SIGPIPE (BC)
 * pager: improve support for various flavors of 'more' on Windows
 * pager: use less as a fallback on Unix
 * pull: abort pull --update if config requires destination (Bts:issue5528)
 * serve: add support for Mercurial subrepositories
 * status: handle more node indicators in buildstatus
 * status: support commands.status.relative config
 * update: accept --merge to allow merging across topo branches (Bts:issue5125)
 * verify: fix length check
== Mercurial 6.6 (2023-11-21) to 6.6.1 (2023-12-07) ==
Regularly scheduled major release. An [[Release6.6|overview of new features]] is available.

== Mercurial 6.5 (2023-07-06) to 6.5.3 (2023-10-06) ==
Regularly scheduled major release. An [[Release6.5|overview of new features]] is available.

== Mercurial 6.4 (2023-03-24) to 6.4.5 (2023-06-22) ==
Regularly scheduled (but very late) major release. An [[Release6.4|overview of new features]] is available.

== Mercurial 6.3 (2022-11-14) to 6.3.3 (2023-03-02) ==
Regularly scheduled major release (delayed for a number of factors). An [[Release6.3|overview of new features]] available.

6.3.1 is an extra release following some upstream Python 3.11 breakage of how regex flags work.

== Mercurial 6.2 (2022-07-11) to 6.2.3 (2022-10-04) ==
Regularly scheduled major release. An [[Release6.2|overview of new features]] available. This is the first Python 3 only version.

== Mercurial 6.1 (2022-03-01) to 6.1.4 (2022-06-16) ==
Regularly scheduled major release. An [[Release6.1|overview of new features]] available. This is the last version to support Python 2.

== Mercurial 6.0 (2021-11-23) to 6.0.3 (2022-02-18) ==
Regularly scheduled feature release. An [[Release6.0|overview of new features]] available. This is a regularly-scheduled quarterly feature release. It was delayed from the usual calendar due to the ongoing effort to make Windows support more robust, especially on Python 3.

== Mercurial 5.9 to 5.9.3 (2021-08-20) ==
Regularly scheduled feature release. An [[Release5.9|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 5.8 (2021-05-03) ==
Regularly scheduled feature release. An [[Release5.8|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 5.7.1 (2021-03-08) ==
Regularly scheduled bug fix release.
=== commands ===
 * log: fix handling of root (or empty) path provided by matcher (Bts:issue6478)
 * patch: fix a formatting issue
 * patch: make diff --git to differentiate b/w file is empty or doesn't exists
Line 109: Line 51:
 * bundle2: ignore errors seeking a bundle after an exception (Bts:issue4784)
 * checkheads: upgrade the obsolescence postprocessing logic (Bts:issue4354)
 * color: insert color code after every "\e[0m" (Bts:issue5413)
 * color: sync text attributes and buffered text output on Windows (Bts:issue5508)
 * config: use "churn" as an example extension
 * config: drop pager from the recommended extension
 * context: optimize linkrev adjustment in blockancestors() (Bts:issue5538)
 * crecord: avoid setting non-existing SIGTSTP signal on windows (Bts:issue5512)
 * debian: configure editor and pager to sensible-editor and sensible-pager by default
 * dispatch: ignore further SIGPIPE while handling KeyboardInterrupt
 * dispatch: protect against malicious 'hg serve --stdio' invocations (SEC)
 * dispatch: start profiling earlier
 * filemerge: optionally strip quotes from merge marker template (BC)
 * formatter: add support for changeset templating
 * formatter: support json formatting of long type
 * graphlog: draw multiple edges towards null node (Bts:issue5440)
 * graphlog: optionally strip quotes from graphnode template (BC)
 * localrepo: deprecate 'repo.join' in favor of 'repo.vfs.join'
 * localrepo: deprecate 'repo.opener' (API)
 * localrepo: deprecate 'wfile'
 * localrepo: deprecated 'repo.wopener' (API)
 * match: adding support for matching files inside a directory
 * packaging: add make target for linux wheels
 * patch: make diff in git mode respect --text option (Bts:issue5510)
 * plain: ignore [commands] config
 * profiling: add statprof support for Chrome trace viewer rendering
 * progress: retry ferr.flush() and .write() on EINTR (Bts:issue5532)
 * py3: stop exporting urlparse from pycompat and util (API)
 * rcutil: let environ override system configs (BC)
 * rcutil: let rccomponents return different types of configs (API)
 * rcutil: move scmutil.*rcpath to rcutil (API)
 * rcutil: rename rcpath to rccomponents (API)
 * rcutil: split osrcpath to return default.d paths (API)
 * record: update help message to use operation instead of "record" (Bts:issue5432)
 * revlog: avoid applying delta chain on cache hit
 * revset: split language services to revsetlang module (API)
 * revset: stop supporting plain list as input set (API)
 * revset: stop supporting predicate that returns plain list (API)
 * setup: use setuptools on Windows (Bts:issue5400)
 * smartset: move set classes and related functions from revset module (API)
 * sshpeer: try harder to snag stderr when stdout closes unexpectedly
 * templatefilter: add support for 'long' to json()
 * templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
 * templatekw: make join() escape values of extras (BC) (Bts:issue5504)
 * templater: make pad() strip color codes before computing width (Bts:issue5416)
 * test-profile: allow negative time in JSON output (issue5542)
 * track-tags: write all tag changes to a file
 * util: always force line buffered stdout when stdout is a tty (BC)
 * vfs: extract 'vfs' class and related code to a new 'vfs' module (API)

=== extensions ===
 * histedit: log the time taken to read in the commands list
 * histedit: make check for unresolved conflicts explicit (Bts:issue5545)
 * histedit: modify rollup to discard date from the rollup commit (Bts:issue4820)
 * histedit: use safecleanupnode in _aborthistedit (Bts:issue5500)
 * largefiles: add copytostore() fstandin argument to replace readstandin() (API)
 * largefiles: add lfile argument to updatestandin() for efficiency (API)
 * largefiles: make copytostore() accept only changectx as the 2nd argument (API)
 * largefiles: omit updating newly added standin at linear merging
 * largefiles: remove unused keyword argument of copytostore() (API)
 * largefiles: replace hashrepofile by hashfile (API)
 * largefiles: set the extension as enabled locally after a share requiring it
 * patchbomb: add config knob to generate flags by template (Bts:issue5354)
 * patchbomb: drop internal option for pbranch extension (API)
 * patchbomb: use modern pager to display -n/--test result (BC)
 * rebase: abort hg pull --rebase if rebase.requiredest is set (Bts:issue5514)
 * rebase: abort if *any* commit in rebase set is public
 * rebase: add flag to require destination
 * rebase: allow aborting if last-message.txt is missing
 * rebase: allow destination-free continue and abort (Bts:issue5513)
 * rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
 * rebase: unhide original working directory node as well (Bts:issue5219)
 * shelve: add -n/--name option to unshelve (Bts:issue5475)
 * shelve: add logic to preserve active bookmarks
 * show: new extension for displaying various repository data
 * hooks: introduce a ':run-with-plain' option for hooks

=== extensions ===
 * largefiles: properly pass kwargs into url.open

=== unsorted ===
 * procutil: extend gui test to detect wayland session (Bts:issue6479)
 * rust-status: honor matcher when using the dirstate-only fast-path (Bts:issue6483)
 * tests: add a test to demonstrate a bug in 'hg diff --git' (Bts:issue6486)

== Mercurial 5.7 (2021-01-29) ==
Regularly scheduled feature release. An [[Release5.7|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 5.6.1 (2020-12-03) ==

Regularly scheduled bug fix release.

=== extensions ===
 * rebase: clear merge state when aborting in-memory merge on dirty working copy

=== unsorted ===
 * crecord: render chunkpad on Windows (Bts:issue6427)
 * diff: do not concatenate immutable bytes while building a/b bodies (Bts:issue6445)

== Mercurial 5.6 (2020-11-02) ==

Regularly scheduled feature release. An [[Release5.6|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 5.5.2 (2020-10-02) ==

Regularly scheduled bug fix release.

=== commands ===
 * log: fix crash and bad filematcher lookup by -fr'wdir()' PATH

=== unsorted ===
 * hgdemandimport: bypass demandimport for _ast module (Bts:issue6407)
 * hgdemandimport: exclude more sqlalchemy modules
 * strip: with --keep, consider all revs "removed" from the wcp (Bts:issue6270)


== Mercurial 5.5.1 (2020-09-01) ==

Regularly scheduled bug fix release.

=== bug fixes ===
 * keepalive: Do not append _rbuf if _raw_readinto exists (Bts:issue6356)

== Mercurial 5.5 (2020-08-03) ==

Regularly scheduled feature release. An [[Release5.5|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 5.4.2 (2020-07-01) ==

Regularly scheduled bug fix release.

=== extensions ===
 * rebase: avoid clobbering wdir() with --dry-run or --confirm (Bts:issue6291)

=== unsorted ===
 * curses: do not initialize LC_ALL to user settings (Bts:issue6358)


== Mercurial 5.4.1 (2020-06-15) ==

Regularly scheduled bug fix release.

=== commands ===
 * graft-state: save --base in graft's state, fixing bug with graft --continue
 * graft: fix --base value to be saved in state file

=== core ===
 * dirstate: make sure the dirstate is loaded before the changelog (Bts:issue6303)

=== unsorted ===
 * bash_completion: do not use aliased hg if it sources a script (Bts:issue6308)
 * demandimport: fix compatibility with meta path finders w/o find_spec() method
 * flags: read flag from dirstate/disk for workingcopyctx (Bts:issue5743)
 * fsmonitor: coerce 'clock' variable to byte-string (Bts:issue6321)
 * url: fix a bytes vs str crash in processing proxy headers (Bts:issue6249)


== Mercurial 5.4 (2020-05-01) ==

Regularly scheduled feature release. An [[Release5.4|overview of new features]] available. This is a regularly-scheduled quarterly feature release.



== Mercurial 5.3.2 (2020-04-02) ==

Regularly scheduled bug fix release.

=== unsorted ===
 * discovery: avoid wrong detection of multiple branch heads (Bts:issue6256)
 * gzip: use the stdlib version with python 3 (Bts:issue6284)

== Mercurial 5.3.1 (2020-03-04) ==

Regularly scheduled bug fix release.

=== commands ===
 * branch: make --force work even when specifying revs
 * import: don't ignore '--secret' when '--bypass' is specified

=== extensions ===
 * shelve: fix ordering of merge labels

=== unsorted ===
 * phabricator: fix a phabsend crash when processing a renamed binary
 * remotefilelog-test: glob some flaky output line (Bts:issue6083)
 * remotefilelog: add 'changelog' arg to shallowcg1packer.generate (Bts:issue6269)

== Mercurial 5.3 (2020-02-03) ==

Regularly scheduled feature release. An [[Release5.3|overview of new features]] available. This is a regularly-scheduled quarterly feature release.


== Mercurial 5.2 (2019-11-05) ==

Regularly scheduled feature release. An [[Release5.2|overview of new features]] available. This is a regularly-scheduled quarterly feature release.


=== 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.

=== 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)'.


=== 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

=== core ===
 * exchange: abort on pushing bookmarks pointing to secret changesets (Bts: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

=== 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

=== 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 (Bts:issue6196)
 * python-zstandard: apply big-endian fix (Bts: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 (Bts:issue5723)
 * sshserver: flush stream after command dispatch
 * test: allow different result for zstd compression (Bts: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

=== 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)

=== 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)


== Mercurial 5.1.2 (2019-10-02) ==

Regularly scheduled bug fix release.

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

=== tests ===
 * test: allow different result for zstd compression (Bts:issue6188)


== Mercurial 5.1.1 (2019-09-05) ==

Regularly scheduled bug fix release.

=== commands ===
 * bookmarks: actual fix for race condition deleting bookmark

=== core ===
 * exchange: abort on pushing bookmarks pointing to secret changesets (Bts:issue6159)
 * python-zstandard: apply big-endian fix (Bts:issue6188)
 * fncache: make debugrebuildfncache not fail on broken fncache

=== tests ===
 * various test runner fixes
 * fixed use of `tr --delete` for tr(1) portability


== Mercurial 5.1 (2019-08-01) ==

Regularly scheduled feature release. An [[Release5.1|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

=== 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 (Bts: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 (Bts: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 (Bts:issue6160)
 * patch: use a short, fixed-size message for last line of prompt (Bts:issue6158)
 * push: added clear warning message when pushing closed branches(Bts: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

=== 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 (Bts:issue4292)
 * templater: drop support for old style keywords (API)
 * util: make util.dirs() and util.finddirs() include root directory (API)

=== extensions ===
 * largefiles: make last line of prompts <40 english chars (Bts: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

=== 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 (Bts: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() (Bts:issue6163)
 * copies: follow copies across merge base without source file (Bts:issue6163)
 * debugrevlog: fix average size computation for empty data (Bts: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 (Bts:issue6158)
 * graphmod: remove support for graph lines mixing parent/grandparent styles (BC)
 * manifest: avoid corruption by dropping removed files with pure (Bts: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 (Bts:issue6132)
 * statecheck: added support for STATES
 * subrepos: make last line of prompts <40 english chars (Bts:issue6158)
 * tests: make the grep pattern in remotefilelog-gcrepack portable (Bts:issue6122)
 * tests: work around libressl being different about error strings (Bts:issue6122)
 * tracing: add support for emitting counters
 * worker: support parallelization of functions with return values
 * zsh: enable completion support for chg as well

=== Behavior Changes ===

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

=== 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)


== Mercurial 5.0.2 ==

A regularly scheduled bugfix release.

=== commands ===
 * Help fixes on hg mv and hg cp

=== unsorted ===
 * debugrevlog: fix average size computation for empty data (Bts: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.


== Mercurial 5.0.1 ==

A regularly scheduled bugfix release.

=== commands ===
 * bookmark: also make bookmark cache depends of the changelog
 * commit: allow --interactive to work again when naming a directory (Bts:issue6131)

=== unsorted ===
 * manifest: avoid corruption by dropping removed files with pure (Bts:issue5801)
 * sslutil: fsencode path returned by certifi (Bts:issue6132)

== Mercurial 5.0 (2019-05-01) ==

An [[Release5.0|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

== Mercurial 4.9.1 (2019-03-19) ==

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

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

=== extensions ===
 * rebase: add missing dashes in help text

=== unsorted ===
 * subrepo: avoid false unsafe path detection on Windows
 * test-https: add some more known failure messages of client certs (Bts:issue6030)


== Mercurial 4.9 (2019-02-01) ==

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

=== 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.

=== 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 (Bts: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 (Bts:issue5800)
 * merge: make local file storage in the .hg/merge directory extensible
 * pull: fix inconsistent view of bookmarks during pull (Bts: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 (Bts:issue6020)
 * tags: cache 'repo.changelog' access when checking tags nodes
 * update: fix edge-case with update.atomic-file and read-only files

=== core ===
 * revlog: always enable generaldelta on version 2 revlogs
 * revlog: make sure we never use sparserevlog without general delta (Bts: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 (Bts:issue6018) (BC)
 * templatekw: deprecate p1rev/p2rev/p1node/p2node in favor of p1/p2
 * templatekw: fix crash on multiple latesttags resolution at wdir (Bts:issue6055)
 * templater: check invalid use of list expression properly (Bts: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() (Bts:issue6059)
 * vfs: also audit rename
 * wireproto: in batch queries, support queries with immediate responses

=== 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 (Bts: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 (Bts: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

=== 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 Bts: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)

=== 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 (Bts:issue6018) (BC)
 * subrepo: reject potentially unsafe subrepo paths (BC) (SEC)

=== 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)


== Mercurial 4.8.2 (2019-01-07) ==

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

=== commands ===
 * update: do not pass in user revspec as default destination (Bts:issue6044)

=== core ===
 * match: fix assertion for fileset with no context (Bts: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 (Bts:issue6033)
 * vfs: ensure closewrapbase fh doesn't escape by entering context manager

=== extensions ===
 * phabricator: properly encode boolean types in the request body

=== unsorted ===
 * windows: ensure mixedfilemodewrapper fd doesn't escape by entering context mgr
 * worker: do not swallow exception occurred in main process


== 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.

=== commands ===
 * commandserver: get around ETIMEDOUT raised by selectors2
 * graft: do not try to skip rev derived from ancestor more than once (Bts:issue6024)
 * verify: provide unit to ui.makeprogress()

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

=== 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 (Bts:issue5818)
 * rebase: preserve working copy when redoing in-mem rebase on disk

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


== Mercurial 4.8 (2018-11-02) ==

An [[Release4.8|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

=== 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 (Bts: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 (Bts: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 (Bts:issue5924)

=== 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 (Bts: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

=== 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 (Bts: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 (Bts: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 (Bts: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
Line 186: Line 822:
 * hgweb: add a "patch" query parameter to filelog command
 * hgweb: do not show "descending" link in followlines UI for filelog heads
 * hgweb: handle a "descend" query parameter in filelog command
 * hgweb: handle a "linerange" request parameter in filelog command
 * hgwebdir: add support for explicit index files

=== Behavior changes ===

 * commit: optionally strip quotes from commit template (BC)
 * filemerge: optionally strip quotes from merge marker template (BC)
 * graphlog: optionally strip quotes from graphnode template (BC)
 * pager: don't terminate with extreme prejudice on SIGPIPE (BC)
 * pager: exit cleanly on SIGPIPE (BC)
 * patchbomb: use modern pager to display -n/--test result (BC)
 * rcutil: let environ override system configs (BC)
 * rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
 * templatekw: make join() escape values of extras (BC) (Bts:issue5504)
 * util: always force line buffered stdout when stdout is a tty (BC)

=== Internal API changes ===

 * largefiles: add copytostore() fstandin argument to replace readstandin() (API)
 * largefiles: add lfile argument to updatestandin() for efficiency (API)
 * largefiles: make copytostore() accept only changectx as the 2nd argument (API)
 * largefiles: remove unused keyword argument of copytostore() (API)
 * largefiles: replace hashrepofile by hashfile (API)
 * localrepo: deprecate 'repo.opener' (API)
 * localrepo: deprecated 'repo.wopener' (API)
 * patchbomb: drop internal option for pbranch extension (API)
 * py3: stop exporting urlparse from pycompat and util (API)
 * rcutil: let rccomponents return different types of configs (API)
 * rcutil: move scmutil.*rcpath to rcutil (API)
 * rcutil: rename rcpath to rccomponents (API)
 * rcutil: split osrcpath to return default.d paths (API)
 * revset: split language services to revsetlang module (API)
 * revset: stop supporting plain list as input set (API)
 * revset: stop supporting predicate that returns plain list (API)
 * smartset: move set classes and related functions from revset module (API)
 * templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
 * vfs: extract 'vfs' class and related code to a new 'vfs' module (API)


== Mercurial 4.1.3 (2017-4-18) ==
This is an out of cycle release to address a security issue:

 * `hg serve --stdio` could be tricked into granting authorized users access to the Python debugger. Thanks to Jonathan Claudius of Mozilla for reporting this issue. This issue is only a security issue for repositories served using --stdio, which includes ssh but *not* http. This is CVE-2017-9462.


== Mercurial 4.1.2 (2017-4-3) ==
This is a regularly-scheduled bugfix release.

 * Mercurial should work inside IIS on Windows again. (Bts:issue5493)
 * zstd support now refuses to work on old bundle formats. (Bts:issue5506)
 * Merges involving subrepositories no longer crash in some cases. (Bts:issue5505)
 * Checking for new heads during push is [[https://www.mercurial-scm.org/repo/hg/rev/ed5b25874d998ababb181a939dd37a16ea644435|no longer]] accidentally quadratic

== Mercurial 4.1.1 (2017-3-2) ==
This is a regularly-scheduled bugfix release.

 * Several incorrect mailing list addresses have been corrected.
 * Various error cases have been corrected during push and pull.
 * Minor issues that happened when Mercurial spawned worker processes have been fixed.

== Mercurial 4.1 (2017-2-1) ==
An [[Release4.1|overview of new features]] available. This is a regularly-scheduled quarterly feature release.

=== commands ===
 * commands: config option to control bundle compression level
 * crecord: add an experimental option for space key to move cursor down
 * crecord: rewrite status line text (BC)
 * diff: add experimental support for more git-diff extended diff features
 * graft: support grafting changes to new file in renamed directory (Bts:issue5436)
 * help: show help for disabled extensions (Bts:issue5228)
 * help: update help for 'hg update' which was misleading (Bts:issue5427)
 * merge: fix crash on criss cross merge with dir move and delete (Bts:issue5020)
 * summary: add evolution "troubles" information to summary output
 * summary: use the same labels as log command in "parent: " line
 * templates: display evolution "troubles" in command line style
 * 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 (Bts:issue5978)
 * hgweb: use scmutil.binnode() to translate None to wdir hash (Bts:issue5988)

=== 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

=== unsorted ===
 * ancestors: actually iterate over ancestors in topological order (Bts:issue5979)
 * bundle2: graduate bundle2.stream option from experimental to server section
 * changegroup: pass sorted revisions into group() (API)
 * changegroup: port to emitrevisions() (Bts:issue5976)
 * changegroup: remove reordering control (BC)
 * changegroup: restore default node ordering (Bts:issue6001)
 * cleanupnodes: drop special casing around prune markers (API)
 * commands: restore compatibility for "^cmd" registration (Bts:issue6005)
 * copies: improve logic of deciding copytracing on based of config options
 * crecord: make nextsametype() check that parent item exists (Bts:issue6009)
 * crecord: make enter move cursor down to the next item of the same type
 * delta: skip "empty delta" optimisation for non-general case (Bts: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 (Bts:issue5783)
 * overlayworkingctx: fix exception in metadata-only inmemory merges (Bts: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 (Bts:issue6006)
 * statprof: fix indent level of fp.write() (Bts:issue6004)
 * statprof: update the name as the i increases (Bts: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

=== 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)

=== 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)

== Mercurial 4.7.2 (2018-10-01) ==
This is a regularly-scheduled bugfix release containing following fixes:

=== security ===

Fix a potential out-of-bounds read in manifest parsing C code.
Line 266: Line 976:
 * changelog: keep track of file end in appender (Bts:issue5444)
 * dispatch: stop supporting non-use of @command (API)
 * hook: do not redirect stdout/err/in to ui while running in-process hooks (BC)
 * httppeer: advertise and support application/mercurial-0.2
 * localrepo: experimental support for non-zlib revlog compression
 * manifest: add bundlemanifestlog support
 * manifest: add unionmanifestlog support
 * manifest: make revlog verification optional
 * patch: add experimental config knob for displaying the index header
 * patch: add similarity config knob in experimental section
 * patch: add label for coloring the index extended header
 * patch: add label for coloring the similarity extended header
 * profiling: make statprof the default profiler (BC)
 * profiling: use vendored statprof and upstream enhancements (BC)
 * revlog: REVIDX_EXTSTORED flag
 * revlog: add clone method
 * revlog: ensure that flags do not overflow 2 bytes
 * revlog: flag processor
 * revlog: inline start() and end() for perf reasons
 * revlog: make compressed size comparisons consistent
 * revlog: merge hash checking subfunctions
 * revlog: move decompress() from module to revlog class (API)
 * revlog: optimize _chunkraw when startrev==endrev
 * revlog: pass revlog flags to addrevision
 * revlog: reorder index accessors to match data structure order
 * revlog: use compression engine API for compression
 * revlog: use compression engine APIs for decompression
 * revset: add regular expression support to 'desc'
 * revset: make children() not look at p2 if null (Bts:issue5439)
 * run-tests: forward Python USER_BASE from site (Bts:issue5425)
 * server: move cmdutil.service() to new module (API)
 * templatekw: force noprefix=False to insure diffstat consistency (Bts:issue4755)
 * ui: check EOF of getpass() response read from command-server channel
 * ui: do not translate empty configsource() to 'none' (API)
 * ui: factor out ui.load() to create a ui without loading configs (API)
 * util: compression APIs to support revlog compression and decompression
 * util: declare wire protocol support of compression engines
 * wireproto: advertise supported media types and compression formats
 * wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)
 * wireproto: perform chunking and compression at protocol layer (API)

=== extensions ===
 * convert: add config option to control storing original revision
 * convert: add config option to copy extra keys from Git commits
 * convert: config option for git rename limit
 * convert: config option to control Git committer actions
 * rebase: calculate ancestors for --base separately (Bts:issue5420)
 * rebase: check for conflicts before continuing
 * rebase: fail-fast the pull if working dir is not clean (BC)
 * shelve: allow multiple shelves with --patch and --stat
 * shelve: choose a legal shelve name when no name is passed (Bts:issue5112)
 * shelve: make --keep option survive user intervention (Bts:issue5431)
 * shelve: make unshelve not crash when there are missing files (Bts:issue4176)
 * various minor correctness fixes in revsets for commonancestors() and similar

=== unsorted ===
 * chgserver: do not send system() back to client if stdio redirected (Bts:issue5992)
 * procutil: compare fd number to see if stdio protection is needed (Bts:issue5992)

== Mercurial 4.7.1 (2018-09-04) ==

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

=== commands ===
 * merge: do not delete untracked files silently (Bts:issue5962)

=== core ===
 * revlog: fix descendant deprecated method
Line 321: Line 993:
 * hgweb: link to raw-file on annotation page (BC)
 * hgweb: make log streams compatible with command server
 * hgweb: restore ascending iteration on revs in filelog web command
 * hgweb: support Content Security Policy

=== chg ===
 * chg: send type information via S channel (BC)
 * chg: support long socket path
 * chgserver: make S channel support pager request
 * chgserver: override runcommand

=== Behavior Changes ===

 * chg: send type information via S channel (BC)
 * crecord: rewrite status line text (BC)
 * hgweb: link to raw-file on annotation page (BC)
 * hook: do not redirect stdout/err/in to ui while running in-process hooks (BC)
 * profiling: make statprof the default profiler (BC)
 * profiling: use vendored statprof and upstream enhancements (BC)
 * rebase: fail-fast the pull if working dir is not clean (BC)
 * wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)

=== Internal API Changes ===

 * bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
 * bookmarks: rename 'compare()' to 'comparebookmarks()' (API)
 * revlog: move decompress() from module to revlog class (API)
 * server: move cmdutil.service() to new module (API)
 * ui: do not translate empty configsource() to 'none' (API)
 * ui: factor out ui.load() to create a ui without loading configs (API)
 * util: remove compressors dict (API)
 * util: remove decompressors dict (API)
 * wireproto: perform chunking and compression at protocol layer (API)
 * dispatch: stop supporting non-use of @command (API)


== Mercurial 4.0.2 (2017-01-04) ==
This is a regularly-scheduled bugfix release.

 * demandimport: do not raise ImportError for unknown item in fromlist
 * posix: make poll() restart on interruption by signal (Bts:issue5452)
 * hgweb: add missing slash to file log url in rss style

== Mercurial 4.0.1 (2016-12-1) ==
This is a regularly-scheduled bugfix release.

 * hgweb: cache fctx.parents() in annotate command (Bts:issue5414)
 * vfs, scmutil: ignore EPERM at os.utime, which avoids ambiguity (Bts:issue5418)

== Mercurial 4.0 (2016-11-1) ==
An [[Release4.0|overview of new features]] available. This is a regularly-scheduled quarterly feature release. Unlike other 4.0 software releases, this is simply 3.9 + .1, so it should be the usual pain-free upgrade.

=== commands ===
 * annotate: calculate line count correctly
 * branchmap: acquires lock before writting the rev branch cache
 * clone: set default path correctly when doing a clone+share (Bts:issue5378)
 * copy: distinguish "file exists" cases and add a hint (BC)
 * commit: return 1 for interactive commit with no changes (Bts:issue5397)
 * config: add template support
 * debugobsolete: add formatter support (Bts:issue5134)
 * files: change documentation to match its behaviour (Bts:issue5276)
 * grep: add formatter support
 * help: show content for explicitly disabled extension (Bts:issue5228)
 * import: abort instead of crashing when copy source does not exist (Bts:issue5375)
 * import: report directory-relative paths in error messages (Bts:issue5224)
 * log: copy the way of ancestor traversal to --follow matcher (Bts:issue5376)
 * log: preserve topo sort in graph even if additional filter options specified
 * merge: add conflict labels to merge command
 * merge: avoid superfluous filemerges when grafting through renames (Bts:issue5407)
 * strip: report both bundle files in case of exception (Bts:issue5368)
 * tag: clarify warning about making a tag on a branch head
 * version: add formatter support
 * flags: allow specifying --no-boolean-flag on the command line (BC)
 
=== core ===
 * changelog: disable delta chains
 * copies: make _checkcopies handle copy sequences spanning the TCA (Bts:issue4028)
 * formatter: add function to convert list to appropriate format (Bts:issue5217)
 * lock: show more detail for new-style locks in lock waiting message (Bts:issue4752)
 * revset: do not rewrite ':y' to '0:y' (Bts:issue5385)
 * revset: fix order of nested '_(|int|hex)list' expression (BC)
 * revset: fix order of nested 'or' expression (BC)
 * revset: fix order of nested 'range' expression (BC)
 * revset: make reverse() and sort() no-ops when ordering requirement allows (BC)
 * revset: support "follow(renamed.py, e22f4f3f06c3)" (Bts:issue5334)
 * templater: provide a termwidth keyword (Bts:issue5395)
 * templater: add inheritance support to style maps
 * templater: add relpath() to convert repo path to relative path (Bts:issue5394)
 * templater: make pad() evaluate boolean argument (BC)
 * wireproto: unescape argument names in batch command (BC)
 
=== extensions ===
 * journal: properly check for held lock (Bts:issue5349)
 * journal: use fm.formatdate() to pass date tuple in appropriate type (BC)
 * journal: use fm.formatlist() to pass hashes in appropriate type (BC)
 * journal: use fm.hexfunc() to get full hash in JSON/template output (BC)
 * largefiles: fix 'deleted' files sometimes persistently appearing with R status
 * largefiles: handle that a found standin file doesn't exist when removing it
 * largefiles: more safe handling of interruptions while updating modifications
 * largefiles: when setting/clearing x bit on largefiles, don't change other bits
 * mq: release lock after transaction in qrefresh
 * mq: take wlock when 'qqueue' is doing write operations
 * rebase: properly calculate total commits to rebase (Bts:issue5347)
 * rebase: rebase changesets in topo order (Bts:issue5370) (BC)

=== hgweb ===
 * hgweb: avoid line wrap between revision and annotate-info (Bts:issue5398)
 * hgweb: config option to control zlib compression level

== Mercurial 3.9.2 (2016-10-1) ==
This is a regularly-scheduled bugfix release.

 * annotate: correct output in some merge cases (Bts:issue5360)
 * crecord: properly handle files with No newline at eof (Bts:issue5268)
 * grep: rewrite help to better document current (confusing) behavior

== Mercurial 3.9.1 (2016-9-1) ==
This is a regularly-scheduled bugfix release.

 * bundle2: fail faster when interrupted
 * bundle2: localize handleoutput remote prompts
 * convert: move svn config initializer out of the module level
 * debian: update source URL in copyright file
 * exchange: correctly specify url to unbundle (Bts:issue5145)
 * help: add example of '[templates]' usage
 * help: update link to wiki/CommandServer
 * osx: update bugzilla link in readme
 * revset: fix keyword arguments to go through optimization process
 * win32: update link to mailing list in readme
 * win32: update wiki link in mercurial.ini

== Mercurial 3.9 (2016-8-1) ==
An [[Release3.9|overview of new features]] available.

=== commands ===
 * annotate: handle empty files earlier
 * annotate: optimize line counting
 * bookmarks: abort 'push -B .' when no active bookmark
 * bookmarks: add 'hg pull -B .' for pulling the active bookmark (Bts:issue5258)
 * bookmarks: jettison bmstore's write() method per deprecation policy
 * bookmarks: make writing files out avoid ambiguity of file stat
 * commandserver: add new forking server implemented without using SocketServer
 * commandserver: backport handling of forking server from chgserver
 * commandserver: manually create file objects from socket
 * commandserver: send pgid in hello message
 * commandserver: use SOMAXCONN as queue size of pending connections
 * patch: allow copy information to be passed in
 * patch: define full messages for interactive record/revert
 * pull: add help information about pulling active bookmark
 * revert: don't backup if no files reverted in interactive mode (Bts:issue4793)
 * revert: use "discard"/"revert" verb when reverting interactively (Bts:issue5143)
 * update: fix bug when update tries to modify folder symlink

=== core ===
 * date: accept broader range of ISO 8601 time specs
 * revlog: add a fast path for "ambiguous identifier"
 * templatekw: fix join format of parents keyword (Bts:issue5292)
 * templatekw: fix join format of revset() function
 * revset: build dict of extra sort options before evaluating set
 * transaction: turn lack of locking into a hard failure (API)
 * ui: don't fixup [paths] sub-options
 * ui: path option to declare which revisions to push by default
 * ui: provide official way to reset internal state per command
 * sslutil: allow TLS 1.0 when --insecure is used
 * sslutil: improve messaging around unsupported protocols (Bts:issue5303)
 * sslutil: work around SSLContext.get_ca_certs bug on Windows (Bts:issue5313)
 * sslutil: abort when unable to verify peer connection (BC)
 * sslutil: config option to specify TLS protocol version
 * sslutil: convert socket validation from a class to a function (API)
 * sslutil: don't access message attribute in exception (Bts:issue5285)
 * sslutil: more robustly detect protocol support
 * sslutil: move sslkwargs logic into internal function (API)
 * sslutil: per-host config option to define certificates
 * sslutil: remove sslkwargs() (API)
 * sslutil: remove ui from sslkwargs (API)
 * sslutil: require TLS 1.1+ when supported
 * sslutil: require serverhostname argument (API)
 * sslutil: stop checking for web.cacerts=! (BC)
 * sslutil: support defining cipher list
 * hg: copy [hostsecurity] options to remote ui instances (Bts:issue5305)
 * demandimport: avoid infinite recursion at actual module importing (Bts:issue5304)
 * rbc: fix superfluous rebuilding from scratch - don't abuse self._rbcnamescount
 * url: avoid re-issuing incorrect password (Bts:issue3210)
 * util: better handle '-' in version string (Bts:issue5302)
 * packagelib: do not remove packages directory in hggetversion (Bts:issue5262)

=== extensions ===
 * histedit: add optional parameter for determining intial editor line
 * largefiles: check file in the repo store before checking remotely (Bts:issue5257)
 * largefiles: make cloning not ask two times about password (Bts:issue4883)
 * largefiles: makes verify batching stat calls to remote
 * largefiles: send statlfile remote calls only for nonexisting locally files
 * rebase: do not abort if all changesets have equivalents in the destination
 * rebase: handle successor targets (Bts:issue5198)
 * rebase: introduce a rebaseruntime (RR) class
 * rebase: make collapsing use explicit logic to decide on the rev to reuse
 * rebase: pass repo, ui and opts objects to the RR class constructor
 * rebase: remove sortedstate-related confusion
 * shelve: make unshelve be able to abort in any case
 * keyword: avoid traceback when kwdemo is run outside a repo
 * rebase: turn rebase revs into set before filtering obsolete
 * extdiff: escape path for docstring (Bts:issue5301)

=== unsorted ===
 * atomictempfile: add context manager support
 * atomictempfile: add read to the supported file operations
 * bashcompletion: show available command-line switches for aliases
 * chg: send SIGPIPE to server immediately when pager exits (Bts:issue5278)
 * dispatch: add fail-* family of hooks
 * dispatch: always load extensions before running shell aliases (Bts:issue5230)
 * dispatch: defer environment variable resolution in alias commands (BC)
 * dispatch: set ui.insecureconnections when --insecure is used
 * dispatch: stop setting web.cacerts=! to indicate --insecure
 * error: make HintException a mix-in class not derived from BaseException (API)
 * error: make hintable exceptions reject unknown keyword arguments (API)
 * hgcia: remove hgcia (BC)
 * journal: add share extension support
 * journal: add support for seaching by pattern
 * localrepo: jettison parents() method per deprecation policy (API)
 * mail: unsupport smtp.verifycert (BC)
 * py3: shift from __future__ import absolute import to beginning (Bts:issue5269)
 * rollback: add a config knob for entirely disabling the command
 * subrepo: use unset instead of env -u to fix test on BSDs (Bts:issue5229)
 * templates: add support for filelog webcommand in json style
 * templates: add support for filerevision webcommand in json style
 * templates: add support for search webcommand in json style
 * templates: add support for summary webcommand in json style
 * update: fix bare --clean to work on new branch (Bts:issue5003) (BC)
 * url: add distribution and version to user-agent request header (BC)
 * chg: forward SIGINT, SIGHUP to process group

== Mercurial 3.8.4 (2016-7-01) ==
This is a regularly-scheduled bugfix release.

 * bdiff: extend matches across popular lines
 * bdiff: remove effectively dead code
 * bundle2: don't assume ordering of heads checked after push
 * help: document that [subpaths] may rewrite relative paths
 * largefiles: fix support for local largefiles while using share extension
 * sslutil: synchronize hostname matching logic with CPython

== Mercurial 3.8.3 (2016-6-01) ==
This is a regularly-scheduled bugfix release.

 * bookmarks: allow pushing active bookmark on new remote head (Bts:issue5236)
 * localrepo: prevent executable-bit only changes from being lost on amend
 * strip: invalidate phase cache after stripping changeset (Bts:issue5235)

== Mercurial 3.8.2 (2016-5-16) ==
This is an unscheduled bugfix release. 3.8.1 contained a noisy deprecation warning that was only intended for Mercurial developers, sorry.

 * bookmarks: properly invalidate volatile sets when writing bookmarks
 * builddeb: add distroseries to tagged versions
 * bundle2: properly request phases during getbundle
 * debian: add wish to suggests
 * debian: forgot to make debian/rules executable in 6b95a623ec90
 * deprecation: gate deprecation warning behind devel configuration
 * help: fix the display for `hg help internals.revlogs` (Bts:issue5227)
 * help: search section of help topic by translated section name correctly
 * hg-ssh: copy doc string to man page
 * patch: show lower-ed translated message correctly
 * progress: stop excessive clearing (Bts:issue4801)

== Mercurial 3.8 / 3.8.1 (2016-5-1) ==
(3.8.1 was released immediately after 3.8 to fix a release oversight.)

Regularly scheduled feature release. This release contains a low-priority security fix for:

CVE-2016-3105 Mercurial: arbitrary code execution when converting Git repos

 . Mercurial prior to 3.8 allowed arbitrary code execution when using the convert extension on Git repos with hostile names. This could affect automated code conversion services that allow arbitrary repository names. This is a further side-effect of Git CVE-2015-7545. Reported and fixed by Blake Burkhart.

There's also an [[Release3.8|overview of new features]] available.

=== commands ===
 * bookmarks: add 'hg push -B .' for pushing the active bookmark (Bts:issue4917)
 * bookmarks: avoid creating a nested repository during testing
 * branchmap: check node against changelog instead of repo
 * commands: add postincoming explicit brev argument (API)
 * commands: centralize code to update with extra care for non-file components
 * commit: block amend while histedit is in progress (Bts:issue4800)
 * fileset: replace predicate by filesetpredicate of registrar (API)
 * graft: suggest the correct tool to continue (not graft)
 * graft: use single quotes around command hint
 * log: disable graph styling when HGPLAIN is set (Bts:issue5212)
 * log: fix seen state handling for > 2 parents (Bts:issue5174)
 * log: fix status template to list copy source per dest (Bts:issue5155)
 * merge: minimize conflicts when common base is not shown (Bts:issue4447)
 * pull: activate a bookmark matching with the destination of the update (BC)
 * pull: deactivate a bookmark not matching with the destination of the update
 * revert: makes interactive mode ask to forget added files (Bts:issue4936)
 * verify: check directory manifests
 * verify: check for orphaned dirlogs
 * verify: include "manifest" prefix in a few more places
 * verify: move cross-checking of changeset/manifest out of _crosscheckfiles()
 * verify: show progress while verifying dirlogs
 * verify: don't init subrepo when missing one is referenced (Bts:issue5128) (API)

=== core ===
 * bdiff: balance recursion to avoid quadratic behavior (Bts:issue4704)
 * bdiff: further restrain potential quadratic performance
 * hook: report untrusted hooks as failure (Bts:issue5110) (BC)
 * revset: remove useless extpredicate class (API)
 * revset: make sort() do dumb multi-pass sorting for multiple keys (Bts:issue5218)
 * templater: load and expand aliases by template engine (API) (Bts:issue4842)
 * templater: separate function to create templater from map file (API)
 * ui: add prompt argument to write (Bts:issue5154) (API)

=== extensions ===
 * convert: keep converted hg parents that are outside convert.hg.revs (BC)
 * histedit: adds hint how to reorder changesets at editor (Bts:issue3766)
 * histedit: improve error when run on nodes with children (Bts:issue5056)
 * histedit: make histedit aware of obsolescense not stored in state (Bts:issue4800)
 * largefiles: add abstract methods in remotestore class
 * largefiles: don't access repo.changelog directly in getlfilestoupload
 * largefiles: don't explicitly list optional parameters that are not used
 * largefiles: drop partial support for not having a user cache
 * largefiles: introduce push --lfrev to control which revisions are pushed
 * largefiles: replace invocation of os.path module by vfs in lfcommands.py
 * largefiles: specify unit for ui.progress when operating on files
 * largefiles: use revisions as a ui.progress unit
 * rebase: 'hg pull --rebase' now update only if there was nothing to rebase
 * rebase: add potential divergent commit hashes to error message (Bts:issue5086)
 * rebase: adds storing collapse message (Bts:issue4792)
 * rebase: choose default destination the same way as 'hg merge' (BC)
 * rebase: explicitly test abort from ambiguous destination
 * rebase: fix crash when rebase aborts while rebasing obsolete revisions
 * rebase: mention help merge-tools in help
 * rebase: perform update through the 'update' command
 * rebase: remove experimental option from 'rebase' config section
 * rebase: respect checkunknown and checkignored in more cases
 * rebase: suggest the correct tool to continue (not rebase)
 * rebase: restrict rebase destination to the pulled set (Bts:issue5214)
 * shelve: adds restoring newly created branch (Bts:issue5048) (BC)
 * shelve: changes getting opts values by get method
 * shelve: make non bare shelve not saving branch information in bundle
 * shelve: preserve newly created branch on non-bare shelve in wctx (BC)
 * shelve: suggest the correct tool to continue (not unshelve)

=== hgweb ===
 * hgweb: add option to convert encoding of graphdata()
 * hgweb: add parents to json-log (Bts:issue5074)
 * hgweb: generate last change date for an empty atom-bookmarks feed (Bts:issue5022)

=== unsorted ===
 * blackbox: optionally log event source
 * bugzilla: do not load style file if template is specified (BC)
 * bundle: move writebundle() from changegroup.py to bundle2.py (API)
 * bundle: warn when update to revision existing only in a bundle (Bts:issue5004)
 * bundlerepo: properly handle hidden linkrev in filelog (Bts:issue4945)
 * changelog: add class to represent parsed changelog revisions
 * changelog: avoid slicing raw data until needed
 * changelog: backed out changeset 1778770e1982
 * changelog: backed out changeset 86de91c56355
 * changelog: lazily parse date/extra field
 * changelog: lazily parse description
 * changelog: lazily parse files
 * changelog: lazily parse manifest node
 * changelog: lazily parse user
 * changelog: lazy decode description (API)
 * changelog: lazy decode user (API)
 * changelog: parse description last
 * chg: fallback to original hg for some unsupported commands or flags
 * chg: forward job control signals to worker process (Bts:issue5051)
 * chg: pass sensitive command line flags to server
 * chgserver: create new process group after fork (Bts:issue5051)
 * date: reallow negative timestamp, fix for Windows buggy gmtime() (Bts:issue2513)
 * debugrevlog: fix dumping manifest fails on empty first revision (Bts:issue5062)
 * demandimport: blacklist sqlalchemy.events as it has side effects (Bts:issue5085)
 * demandimport: enforce ignore list while processing modules in fromlist
 * destutil: choose non-closed branch head at first (BC)
 * dispatch: add wd parameter to _getlocal
 * dispatch: catch KeyboardInterrupt more broadly
 * dispatch: factor out command failure handling into a function
 * dispatch: flush ui before returning from dispatch
 * dispatch: make cmdalias forward command attributes to function
 * dispatch: make loading extra information from extension extensible
 * dispatch: show deprecation warning if command has no attributes (Bts:issue5137)
 * dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
 * dispatch: strip command line options like config file options
 * encoding: add option to escape non-ascii characters in JSON
 * graphlog: bring back color to node symbol template
 * graphmod: set default edge styles for ascii graphs (BC)
 * hg: perform update after pulling during clone with share (Bts:issue5103)
 * http: support sending hgargs via POST body instead of in GET or headers
 * localrepo: move new repo requirements into standalone function (API)
 * localrepo: support background closing for wwrite()
 * mail: retain hostname for sslutil.wrapsocket (Bts:issue5203)
 * match: rename "narrowmatcher" to "subdirmatcher" (API)
 * mpatch: un-nest the move() method
 * mpatch: unify mpatchError (Bts:issue5182)
 * notify: do not load style file if template is specified (BC)
 * record: deprecate the extension
 * registrar: add templatefilter to mark a function as template filter (API)
 * registrar: add templatefunc to mark a function as template function (API)
 * registrar: add templatekeyword to mark a function as template keyword (API)
 * registrar: remove useless base classes (API)
 * remove: add progress support
 * remove: fix --force option help description (Bts:issue5177)
 * remove: queue warnings until after status messages (Bts:issue5140) (API)
 * scmutil: support background closing for write()
 * serve: add chdir command for --daemon-postexec
 * serve: rename --daemon-pipefds to --daemon-postexec (BC)
 * sslutil: require a server hostname when wrapping sockets (API)
 * streamclone: specify unit for ui.progress when handling data
 * subrepo: disable localizations when calling Git (Bts:issue5176)
 * templatefilters: drop broken "jsonescape" from filters table (BC)
 * templatefilters: make json filter be byte-transparent (BC) (Bts:issue4926)
 * templatekw: switch ctx of list expression to rev of {parents} (BC)
 * test-debugextensions: passes with byte-compilation disabled (Bts:issue5147)
 * testing: expand Hypothesis tests with branch commands
 * tests: add test for "log -r wdir() -p" (Bts:issue4871)
 * tests: ensure that 'hg update' is disabled during histedit (Bts:issue3655)
 * tests: update test output for test written on stable branch (Bts:issue5104)
 * treemanifest: don't use cp -T, not supported on OS X
 * update: change default destination to tipmost descendant (Bts:issue4673) (BC)
 * update: check command line before modifying repo
 * version: verbose list internal and external extension source (Bts:issue4731)

== Mercurial 3.7.3 (2016-3-29) ==
This is an out of cycle release to address three security issues:

CVE-2016-3630 Mercurial: remote code execution in binary delta decoding

 . Mercurial prior to 3.7.3 contained two bounds-checking errors in its binary delta decoder that may be exploitable via clone, push, or pull.

CVE-2016-3068 Mercurial: arbitrary code execution with Git subrepos

 . Mercurial prior to 3.7.3 allowed URLs for Git subrepos that could result in arbitrary code execution on clone. This is a further side-effect of Git CVE-2015-7545. Reported by Blake Burkhart.

CVE-2016-3069 Mercurial: arbitrary code execution when converting Git repos

 . Mercurial prior to 3.7.3 allowed arbitrary code execution when converting Git repos with hostile names. This could affect automated conversion services. Reported by Blake Burkhart.

 * bdiff: (pure) support array.array arrays (Bts:issue5130)
 * convert: add new, non-clowny interface for shelling out to git (SEC)
 * convert: dead code removal - old git calling functions (SEC)
 * convert: rewrite calls to Git to use the new shelling mechanism (SEC)
 * convert: rewrite gitpipe to use common.commandline (SEC)
 * convert: test for shell injection in git calls (SEC)
 * files: don't recurse into subrepos without a path or -S (Bts:issue5127)
 * hg: perform update after pulling during clone with share (Bts:issue5103)
 * mq: restrict generated patch name to 75 characters (Bts:issue5117)
 * obsolete: fix n^2 marker computation behavior
 * parsers: detect short records (SEC)
 * parsers: fix list sizing rounding error (SEC)
 * streamclone: fix error when store files grow while stream cloning
 * subrepo: adapt to git's recent renames-by-default
 * subrepo: set GIT_ALLOW_PROTOCOL to limit git clone protocols (SEC)

== Mercurial 3.7.2 (2016-3-1) ==
This is a regularly-scheduled bugfix release.

 * bundlerepo: properly handle hidden linkrev in filelog (Bts:issue4945)
 * bundlerepo: properly handle hidden linkrev in manifestlog (Bts:issue4945)
 * demandimport: add _imp to ignore list
 * doc: correct example concerning "hg purge" alias in man page "hgrc.5"
 * doc: remove deprecated option from synopsis of command help
 * fileset: fix copy/paste in eol() error message
 * help: fix typo in backgroundclose documentation
 * help: hg.intevation.de is new primary name of hg.intevation.de (and new cert)
 * help: update template examples to use reST literal syntax
 * hg: obtain lock when creating share from pooled repo (Bts:issue5104)
 * log: fix order of revisions filtered by multiple OR options (Bts:issue5100)
 * rebase: update working directory when aborting (Bts:issue5084)
 * revert: properly revert to ancestor of p2 during merge (Bts:issue5052)
 * revset: flatten chained 'list' operations (aka function args) (Bts:issue5072)
 * setup: avoid procedure related to hg.exe at setup.py --pure
 * ui: fix crash by non-interactive prompt echo for user name
 * unionrepo: properly handle hidden linkrev in revlog (Bts:issue5070)
 * zeroconf: forward all arguments passed to ui.configitems() wrapper

== Mercurial 3.7.1 (2016-2-3) ==
This addresses an urgent regression in compilation on Solaris and metadata handling for conversions.

 * amend: don't preserve most extra fields
 * graft: don't preserve most extra fields
 * histedit: fix typo in documentation
 * osutil: disable compilation of recvfds() on unsupported platforms
 * osutil: do not abort loading pure module just because libc has no recvmsg()
 * rebase: backout changeset 986d04b9fedd
 * rebase: backout changeset d755a9531fce
 * rebase: don't preserve most extra fields

== Mercurial 3.7 (2016-2-1) ==
Regularly scheduled feature release. There's also an [[Release3.7|overview of new features]] available.

=== commands ===
 * merge: don't try to merge subrepos twice (Bts:issue4988)
 * pull: advance current active bookmark at pull --update correctly
 * templater: abort if infinite recursion detected while evaluation (Bts:issue4758)

 * annotate: add missing period to help
 * annotate: mention that -n is suppressed in help
 * backout: disable --merge with --no-commit (Bts:issue4874)
 * bookmark: deprecate 'bmstore.write' method
 * bookmarks: hoist getbkfile out of bmstore class
 * bookmarks: make _readactive safe when readlines raises ENOENT
 * branch: reword help text
 * clone: move bookmarks and checkouts before pull help
 * clonebundles: improve BUNDLESPEC documentation
 * clonebundles: remove advertisement of feature
 * commands.summary: switch to mergestate.read()
 * commands: inline definition of localrepo.parents() and drop the method (API)
 * commands: make backout acquire locks before processing
 * commands: make commit acquire locks before processing (Bts:issue4368)
 * commands: use context manager for opened bundle file
 * commandserver: drop tell() and seek() from channels (Bts:issue5049)
 * commandserver: reset state of progress bar per command
 * commit: add a way to return more information from the chunkselector
 * commit: add amend mode for crecord commit -i
 * commit: add some help examples (Bts:issue4963)
 * commit: adjust the quoting in the examples to be Windows friendly
 * commit: fix rest syntax of examples
 * commit: make commit acquire store lock before processing for consistency
 * commit: preserve extra when amending with commit --amend
 * fileset: add missing() predicate (Bts:issue4925)
 * fileset: use set instead of list to mark predicates for efficiency (API)
 * graft: clarify in help that '-r' is not just optional
 * graft: copy extra (except branch) when copying changesets
 * graft: hook afterresolvedstates
 * graft: improve --continue abort message
 * help: fix quoting for bundle1 options
 * import: add word to help text
 * import: limit scope of msg in tryimportone
 * import: reorder help text
 * log: speed up single file log with hidden revs (Bts:issue4747)
 * log: add 'hg log' example for full hashes
 * log: help provide sort by date example
 * log: mention ordering
 * log: speed up hg log <file|folder>
 * merge.graft: add option to keep second parent
 * merge: add options to warn or ignore on colliding unknown files
 * merge: move almost all change/delete conflicts to resolve phase (BC) (API)
 * merge: refuse update/merge if there are unresolved conflicts (BC)
 * mergestate: raise structured exception for unsupported merge records
 * patch: disable nobinary when HGPLAIN=1
 * pull: make a single call to obsstore.add (Bts:issue5006)
 * pull: return 255 value on update failure (Bts:issue4948) (BC)
 * push: specify default-push and default as fallback paths
 * status: back out changeset 89f49813526c
 * status: change + back out == clean (API)
 * status: revert + flag-change == modified
 * summary: add troubles list to the output of hg summary
 * summary: mention graft
 * summary: print unstable, bumped and divergent as unconditionally plural
 * tags: mention --quiet switch in help (Bts:issue4920)
 * verify: add a hook that can let extensions manipulate file lists
 * verify: clean up weird error/warning lists
 * verify: get rid of some unnecessary local variables
 * verify: move checklog() onto class
 * verify: move exc() function onto class
 * verify: remove unreachable code to reraise KeyboardInterrupt

=== core ===
 * context: don't use util.cachefunc due to cycle creation (Bts:issue5043)
 * context: use a the nofsauditor when matching file in history (Bts:issue4749)
 * parsers: check results of PyInt_FromLong (Bts:issue4771)
 * repoview: fix corrupted hiddencache crash Mercurial (Bts:issue5042)
 * revlog: avoid string slice when decompressing u* chunks
 * revlog: clarify which revision is added to 'tested' when using cached delta
 * revlog: don't consider nullrev when choosing delta base
 * revlog: improve documentation
 * revlog: make calls to _isgooddelta() consistent
 * revlog: make clearcaches() more effective
 * revlog: return offset from _chunkraw()
 * revsetbenchmarks: support benchmarking changectx loading
 * ui: optionally ignore sub-options from configitems()
 * ui: support declaring path push urls as sub-options
 * util: disable floating point stat times (Bts:issue4836)
 * wireproto: config options to disable bundle1
 * wireproto: support disabling bundle1 only if repo is generaldelta

=== extensions ===
 * crecord: fix help bar display issue (Bts:issue5063)
 * histedit: add progress support
 * histedit: explain basics of histedit commands
 * histedit: pick an appropriate base changeset by default (BC)
 * largefiles: actions will now always have a file - drop check
 * largefiles: fall back to the original for change/delete conflicts
 * largefiles: fix commit of missing largefiles
 * largefiles: make prompt order deterministic
 * largefiles: specify where .orig files are kept
 * largefiles: use a context manager in _getfile
 * largefiles: use util.readfile in lfconvert
 * largefiles: use util.readfile in overrides
 * largefiles: fix an explicit largefile commit after a remove (Bts:issue4969)
 * largefiles: prevent committing a missing largefile
 * mq: check for reserved patch name with qimport -r (Bts:issue5033)
 * mq: let the user choose where .orig files are kept
 * rebase: add date parameter to concludenode function
 * rebase: better error message when rebased changes are all in destination
 * rebase: create a new variable to make the next patch more legible
 * rebase: hook afterresolvedstates
 * rebase: only clear rebase status after the rebase transaction has completed
 * rebase: pass date parameter to concludenode
 * rebase: prevent creating divergence
 * rebase: propagate extra dict from rebase source changeset
 * rebase: remove extra "if" from check of collapsing named branches
 * rebase: better way to detect non-detaching revisions (Bts:issue5044)
 * rebase: restore help for rebase w/o args (Bts:issue5059)
 * shelve: choose where .orig file locations are kept
 * shelve: execute checkunfinished inside wlock scope
 * shelve: hook afterresolvedstates
 * shelve: lowercase flag description
 * shelve: permit shelves to contain unknown files
 * shelve: remove redundant acquisition of wlock for sub commands of unshelve
 * shelve: switch to mergestate.read()
 * shelve: use a context manager for file I/O in listcmd
 * shelve: widen wlock scope of shelve for consistency while processing
 * shelve: widen wlock scope of unshelve for consistency while processing
 * unshelve: add -k as short form of --keep
 * unshelve: add support for custom merge tools
 * unshelve: shed spurious space

=== hgweb ===
 * hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option
 * hgweb: load server settings from --web-conf (Bts:issue4699)
 * hgweb: make sure command options are set to all ui objects
 * hgweb: support rendering a sub-topic
 * hgweb: support rendering sub-topic indexes
 * hgweb: update canvas.width before dynamically redrawing graph (Bts:issue2683)

=== unsorted ===
 * addrevision: only use the incoming base if it is a good delta (Bts:issue4975)
 * backout: commit changeset by default (BC)
 * backout: fix --no-commit option (Bts:issue5054)
 * batchget: add support for backing up files
 * builddeb: add --distid option to specify Distributor ID
 * changegroup: introduce cg3, which has support for exchanging treemanifests
 * changelog: add a new method to get files modified by a changeset
 * checkunknownfiles: make control flow clearer
 * crecord: edit during hg crecord should preserve cursor position (Bts:issue5041)
 * debugignore: find out why a file is being ignored (Bts:issue4856)
 * demandimport: add support for PyPy
 * demandimport: don't enable when running under PyPy
 * destutil: use scmutil.revrange for desthistedit (Bts:issue5001)
 * diff: don't crash when merged-in addition was removed (Bts:issue4786)
 * discovery: properly filter changeset in 'peer.known' (Bts:issue4982)
 * dispatch: copy inferrepo attribute to alias commands
 * dispatch: report similar names consistently
 * dispatch: use print function
 * dispatch: use versiontuple()
 * dockerrpm: fix CentOS 5 RPMs (Bts:issue4977)
 * encoding: handle UTF-16 internal limit with fromutf8b (Bts:issue5031)
 * encoding: re-escape U+DCxx characters in toutf8b input (Bts:issue4927)
 * error: add a structured exception for unsupported merge records
 * extdiff: correctly handle deleted subrepositories (Bts:issue3153)
 * extdiff: use @command decorator to set up diff commands
 * filemerge: add a 'leave unresolved' option to change/delete prompts
 * filemerge: add a 'leave unresolved' option to regular prompts
 * filemerge: add support for change/delete conflicts to the ':local' merge tool
 * filemerge: add support for change/delete conflicts to the ':other' merge tool
 * filemerge: add support for change/delete conflicts to the ':prompt' tool
 * filemerge: default change/delete conflicts to 'leave unresolved' (BC)
 * filemerge: default regular prompts to 'leave unresolved' (BC)
 * graphlog: make node symbol templatable by ui.graphnodetemplate option
 * graphlog: rename glog function
 * hghave: support HGMODULEPOLICY for pure
 * localrepo: don't reference transaction from hook closure (Bts:issue5043)
 * lsprof: support PyPy (Bts:issue4573)
 * mac: fix percent-encoding of non-utf-8 characters (Bts:issue4999)
 * match: add option to return line and lineno from readpattern
 * mercurial: pass ui to extensions.load (Bts:issue5007)
 * mercurial: support loading modules from zipimporter
 * paths: do not process default-push as pushurl of default path (Bts:issue5000)
 * posix: work around "posix" systems without os.link available (Bts:issue4974)
 * run-tests: skip threading for a single test (Bts:issue5040)
 * scmutil: support background file closing
 * sslutil: fix reversed logic (Bts:issue5034)
 * streamclone: use backgroundfilecloser (Bts:issue4889)
 * streamclone: use context manager for writing files
 * streamclone: use read()
 * templates: make earlycommands and othercommands optional
 * templates: use canvaswidth instead of fixed width for canvas (Bts:issue2683)
 * test-extension: do not depend on demandimport (Bts:issue5012)
 * unionrepo: fix wrong rev being checked in iscensored (Bts:issue5024)
 * webcommands: get correct parents when comparing a removed file (Bts:issue4962)
 * webcommands: stop using ersatz if-else ternary operator for rename variable
 * webcommands: test that fctx is not None in filediff()
 * zeroconf: access repo on hgweb_mod properly (Bts:issue5036)

== Mercurial 3.6.3 (2016-1-1) ==
This is a regularly-scheduled bugfix release.

 * cmdutil: use crecordmod.checkcurses
 * copyfile: add an optional parameter to copy other stat data
 * crecord: stop raising error.Abort if curses is not found (Bts:issue5008)
 * dirstate: don't write repo.currenttransaction to repo.dirstate if repo
 * dockerlib: short form for non-unique uid/gid for CentOS 5 compat (Bts:issue4977)
 * merge: while checking for unknown files don't follow symlinks (Bts:issue5027)
 * mq: use fallback patch name if no alpha-numeric in summary line (Bts:issue5025)
 * parsers: fix parse_dirstate to check len before unpacking header (Bts:issue4979)
 * paths: include #fragment again
 * push: restore old behavior of default-push (Bts:issue5000)
 * record: don't dereference symlinks while copying over stat data
 * revlog: seek to end of file before writing (Bts:issue4943)
 * ui: try to handle $$ more robustly in prompts (Bts:issue4970)

== Mercurial 3.6.2 (2015-12-1) ==
This is a regularly-scheduled bugfix release.

 * docker: match more version of 'hg docker version' (Bts:issue4967)
 * localrepo.commit: check all files for resolve state (Bts:issue4972)
 * rebase: add returning value from pullrebase function
 * resolve: restore .orig only after merge is fully complete (Bts:issue4952)
 * share: wrap bmstore._writerepo for transaction sensitivity (Bts:issue4940)
 * tags: create new sortdict for performance reasons

== Mercurial 3.6.1 (2015-11-9) ==
This is an out-of-cycle bugfix release for issues related to hooks.

 * changegroup: call 'prechangegroup' hook before setting up write delay
 * changegroup: fix the scope of a try finally
 * clonebundles: fix typo s/comand/command/
 * demandimport: fix level passed to loader of sub-modules
 * dirstate: fix filefoldmap incosistency on file delete
 * dockerlib: allow non-unique uid and gid of $DBUILDUSER (Bts:issue4657)
 * exchange: do not attempt clone bundle if local repo is non-empty (Bts:issue4932)
 * hooks: always include HG_PENDING
 * hooks: fix hooks not firing if prechangegroup was set (Bts:issue4934)
 * parsers: fix width of datalen variable in fm1readmarkers
 * posix: fix test-permissions regression
 * posix: retry on symlink race in checklink
 * templatefilters: try round-trip utf-8 conversion by json filter (Bts:issue4933)
 * wireproto: move clonebundles command from extension (Bts:issue4931)
 * wix: style-coal.css has been renamed

== Mercurial 3.6 (2015-11-1) ==
Regularly scheduled feature release.

=== commands ===
 * bookmark: do not crash when active bookmark is forward and --date is used
 * bookmarks: don't deactivate on no-op update (Bts:issue4901)
 * clone: fix updaterev to update to latest branch changeset (Bts:issue4528)
 * clonebundles: support for seeding clones from pre-generated bundles
 * commit: abort when a committemplate is not changed (BC)
 * help: distinguish sections when multiple match (Bts:issue4802)
 * help: pass around ui to doc loader (API)
 * help: pass around ui to rewriter hooks (API)
 * merge: perform all premerges before any merges (BC)
 * merge: abort on file/directory case folding collisions (Bts:issue4892)
 * phases: return zero for no-op operations (Bts:issue4751) (BC)
 * resolve: perform all premerges before performing any file merges (BC)

=== core ===
 * cmdutil: make in-memory changes visible to external editor (Bts:issue4378)
 * cmdutil: stop tryimportone from using dirstateguard (BC)
 * context: don't hex encode all unknown 20 char revision specs (Bts:issue4890)
 * dirstate: batch calls to statfiles (Bts:issue4878)
 * parsers: fix infinite loop or out-of-bound read in fm1readmarkers (Bts:issue4888)
 * revlog: add an aggressivemergedelta option
 * revlog: change generaldelta delta parent heuristic
 * revset: do not fall through to revspec for literal: branch (Bts:issue4838)
 * revsets: makes follow() supports file patterns (Bts:issue4757) (BC)
 * templater: add new docheader/footer components for XML (Bts:issue4135)
 * templater: create string unescape helper (Bts:issue4798)
 * templater: do not pre-evaluate generator keyword at runsymbol (Bts:issue4868)
 * templater: introduce {latesttag()} function to match a pattern (Bts:issue4184)
 * templater: switch ctx of list expression to rev of revset() (BC)
 * ui: change default path fallback mechanism (Bts:issue4796)
 * util: use tuple accessor to get accurate st_mtime value (Bts:issue4836)
 * wireproto: properly parse false boolean args (BC)

=== extensions ===
 * histedit: use one editor when multiple folds happen in a row (Bts:issue3524) (BC)
 * largefiles: better handling of merge of largefiles that are not available
 * mq: generate patch names from first line of description
 * rebase: avoid losing branch commits with --keepbranch (Bts:issue4835)
 * rebase: fix warning about ignoring tool option on rebase continue (Bts:issue4698)
 * rebase: fix wrong 'no changes to commit' when using --collapse
 * rebase: on abort delete rebase state file no matter what
 * rebase: properly abort when destination is public (Bts:issue4896)
 * rebase: properly handle chains of markers with missing nodes
 * shelve: bundle using bundle2 if repository is general delta (Bts:issue4862)
 * shelve: delete shelve statefile on any exception during abort
 * shelve: restore shelved dirstate explicitly after aborting transaction
 * shelve: restore unshelved dirstate explicitly after aborting transaction

=== hgweb ===
 * hgweb: consume generator inside context manager (Bts:issue4756)
 * hgweb: ensure both foreground and background colors are specified (Bts:issue4872)
 * hgweb: overwrite cwd to resolve file patterns relative to repo (Bts:issue4568)

=== unsorted ===
 * builddeb: actually run make when building the deb (Bts:issue4778)
 * buildrpm: mkdir -p two needed directories (Bts:issue4779)
 * bundle2: don't try to recover from a GeneratorExit (Bts:issue4785)
 * bundle: extend the format of --type to support version and compression
 * debian: install bash completion as hg and not mercurial (Bts:issue4900)
 * debian: install hgk as part of mercurial-common (Bts:issue4829)
 * dispatch: error out on invalid -R path even if optionalrepo (Bts:issue4805) (BC)
 * dispatch: stop warning about EPIPE in --debug mode
 * graphmod: compute slow revset query once prior to reachableroots (Bts:issue4782)
 * highlight: add highlightfiles config option which takes a fileset (Bts:issue3005)
 * highlight: add option to prevent content-only based fallback
 * highlight: exit early on textual and unknown files (Bts:issue3005)
 * incoming: request a bundle2 when possible (BC)
 * localrepo: recreate phasecache if changelog was modified (Bts:issue4855)
 * lock: loop a finite number of times in trylock (Bts:issue4787)
 * mercurial: add debugextensions command (Bts:issue4676)
 * minirst: don't treat top level item as children of last item (Bts:issue4803)
 * notify: fix fromauthor setting for 'incoming' hook type (Bts:issue4194)
 * posix: shellquote do not require quoting for "+" (Bts:issue4818)
 * reachableroots: verify integer range of heads argument (Bts:issue4775)
 * revpair: restrict odd-range handling to top-level x:y expression (Bts:issue4774)
 * revrange: drop old-style parser in favor of revset (API)
 * test-merge-tools: include /usr/sbin in path for sysctl (Bts:issue4813)
 * traceback: allow providing a local support contact point
 * treemanifest: rework lazy-copying code (Bts:issue4840)
 * windows: read all global config files, not just the first (Bts:issue4491) (BC)
 * worker: restore old countcpus code (Bts:issue4869)

== Mercurial 3.5.2 (2015-10-01) ==
Regularly-scheduled bugfix release.

 * hgweb: use latest mtime for caching tag (Bts:issue4814)
 * largefiles: restore archiving largefiles with hgweb (Bts:issue4859)
 * localrepo: recreate phasecache if changelog was modified (Bts:issue4855)
 * monoblue: fix page subtitle on help pages
 * unbundle: cleanly abort on unknown bundle2 feature

== Mercurial 3.5.1 (2015-09-01) ==
Regularly-scheduled bugfix release.

 * convert: fix git copy file content conversions
 * filesets: ignore unit case in size() predicate for single value
 * help: fix typo familar -> familiar
 * help: fix typo in scripting documentation
 * hg: avoid auto sharing when the clone destination is remote
 * hgweb: fix trust of templates path (BC)
 * histedit: backout ebb5bb9bc32e
 * largefiles: ensure lfutil.getstandinmatcher() only matches standins
 * match: fix a case-only rename + explicit path commit on icasefs (Bts:issue4768)
 * parsers: fix memory leak in compute_phases_map_sets
 * rebase: lock the repo during the full rebase operation
 * revset: prevent crash caused by empty group expression while optimizing "and"
 * revset: prevent crash caused by empty group expression while optimizing "or"
 * strip: use the 'finally: tr.release' pattern during stripping
 * update: wlock the repo for the whole 'hg update' command
 * wix: avoid an abort with 'hg help -k foo'

== Mercurial 3.5 (2015-07-31) ==
Regularly-scheduled feature release.

=== commands ===
 * bookmark: informs of failure to upgrade a bookmark
 * bookmark: remove the "touch changelog" hack
 * bookmarks: abort the whole push if bookmarks fails to update (BC)
 * bookmarks: change bookmark within a transaction
 * bookmarks: clear active bookmark on non-linear update
 * bookmarks: mark internal-only config option
 * bookmarks: mark internal-only option
 * bookmarks: name label for active bookmark correctly
 * bookmarks: remove unused updatecurrentbookmark function (API)
 * bookmarks: rename bookmarkcurrent to activebookmark (API)
 * bookmarks: rename current to active in variables and comments
 * bookmarks: rename readcurrent to readactive (API)
 * bookmarks: rename setcurrent to activate (API)
 * bookmarks: rename unsetcurrent to deactivate (API)
 * bookmarks: simplify iscurrent to isactivewdirparent (API)
 * bookmarks: use try/except/finally
 * branch: don't warn about branches if repository has multiple branches already
 * commands: use the optional badfn argument when building a matcher
 * commands: use try/except/finally
 * commit: add ui.allowemptycommit config option
 * commit: avoid match.files() in conditions
 * commit: improve --close-branch documentation
 * commit: mark internal-only option
 * commit: no longer allow empty commit with the 'force' argument (API)
 * config: give it an includepaths option for looking for config files
 * files: recurse into subrepos automatically with an explicit path
 * import-checker: add xargs like mode
 * import-checker: don't treat modules as relative one if not found
 * import-checker: exclude mercurial packages installed into the system path
 * import-checker: loop to get list of locally defined modules at first
 * import: cross-reference patch.fuzz option from 'hg help import'
 * import: cross-reference ui.patch option from 'hg help import'
 * import: use ui.allowemptycommit to allow empty commits
 * log: add a status template
 * patch: add 'extra' argument to makememctx
 * patch: add fuzz config flag (Bts:issue4697)
 * phases: abort the whole push if phases fail to update (BC)
 * phases: fix bug where native phase computation wasn't called
 * phases: really fix native phase computation
 * pull: allow a generic way to pass parameters to the pull operation
 * pull: document the race condition with bookmark name
 * pull: only list remote bookmarks if -B is used to populate pulled heads
 * pull: only prefetch bookmarks when using bundle1
 * pull: prevent race condition in bookmark update when using -B (Bts:issue4689)
 * pull: skip pulling remote bookmarks with bundle1 if a value already exist
 * pull: skip pulling remote bookmarks with bundle2 if a value already exists
 * push: catch and process PushkeyFailed error
 * push: make pushkey part advisory
 * push: only say we are trying to push obsmarkers when we actually try
 * revert: fix edition of newly added file during --interactive
 * summary: add a phase line (draft, secret) to the output
 * summary: move the parents phase marker to commit line (Bts:issue4688)
 * tags: support reading tags cache without populating
 * tags: support setting hgtags fnodes cache entries
 * tags: use try/except/finally
 * verify: check the subrepository references in .hgsubstate
 * verify: clarify misleading fncache message

=== core ===
 * dirstate: ensure mv source is marked deleted when walking icasefs (Bts:issue4760)
 * ignore: fix include: rules depending on current directory (Bts:issue4759)
 * parsers: fix buffer overflow by invalid parent revision read from revlog
 * revlog: add support for a callback whenever revisions are added
 * revlog: raise an exception earlier if an entry is too large (Bts:issue4675)
 * revset: fix a crash in parents() when 'wdir()' is in the set
 * revset: fix iteration over ordered addset composed of non-ordered operands
 * revset: gratuitous formating fix in keyword
 * revset: improves time complexity of 'roots(xxx)'
 * revset: port extra() to support keyword arguments
 * revset: reduce nesting of chained 'or' operations (Bts:issue4624)
 * revsetbenchmarks: fix argument parsing
 * revsetbenchmarks: improve error output in case of failure
 * revsetbenchmarks: improve revision printing
 * revsetbenchmarks: support combining variants with "+"
 * templater: do not reevaluate rawstring as template (BC)
 * templater: remove noop calls of parsestring(s, quoted=False) (API)
 * templater: rename parsestring() to unquotestring() (API)
 * templater: take any string literals as template, but not for rawstring (BC)
 * templater: tokenize decimal integer literal (Bts:issue4638) (BC)
 * wireproto: correctly escape batched args and responses (Bts:issue4739)

=== extensions ===
 * convert: add config option for disabling ancestor parent checks
 * convert: add support for specifying multiple revs
 * convert: allow customizing git remote prefix
 * convert: apply the appropriate phases to the destination (Bts:issue4165)
 * convert: fix bug with converting the same commit twice
 * convert: handle copies when converting from Perforce (Bts:issue4744)
 * convert: handle deleted files when converting from Perforce (Bts:issue4743)
 * convert: handle deleted files when converting from Perforce (Bts:issue4743)
 * convert: improve support for unusual .gitmodules
 * convert: support incremental conversion with hg subrepos
 * convert: support multiple specifed revs in git source
 * convert: use 'default' for specifying branch name in branchmap (Bts:issue4753)
 * convert: when converting from Perforce use original local encoding by default (BC)
 * extdiff: allow modifications in subrepos to be copied back
 * highlight: produce correct markup when there's a blank line just before EOF
 * histedit: abort rather than edit a public changeset (Bts:issue4704)
 * histedit: mark defaultrev option experimental
 * largefiles: allow the archiving of largefiles to be disabled
 * largefiles: avoid match.files() in conditions
 * largefiles: ignore hidden changesets with 'verify --large --lfa'
 * largefiles: pass in whole matcher to getstandinmatcher()
 * largefiles: restore the original converter class after lfconvert --to-normal
 * largefiles: use the convert extension for 'lfconvert --to-normal'
 * largefiles: use the optional badfn argument when building a matcher
 * largefiles: use try/except/finally
 * mq: ban \r and \n in patch names (Bts:issue4711)
 * mq: tweak config reading to make check-config happy
 * mq: use the optional badfn argument when building a matcher
 * mq: use ui.allowemptycommit to allow empty commits
 * rebase: add short -k option for --keep
 * rebase: remove extraneous blank at the end of file
 * shelve: allow --patch and --stat without --list for a single shelf
 * shelve: always backup shelves instead of deleting them
 * shelve: keep old backups if timestamp can't decide exact order of them
 * shelve: make maxbackup doc check-config friendly
 * shelve: omit incorrect 'commit' suggestion at 'hg shelve -i'
 * shelve: only keep the latest N shelve backups
 * shelve: refactor allowables to specify sets of valid operations
 * shelve: use try/except/finally
 * transplant: restore dirstate correctly at unexpected failure

=== hgweb ===
 * hgweb: don't dereference symbolic revision in paper & coal style (Bts:issue2296)
 * paper: show branch/tags/bookmarks when blaming (Bts:issue3559)
 * paper: show branch/tags/bookmarks when browsing (Bts:issue3559)
 * paper: show branch/tags/bookmarks when comparing (Bts:issue3559)
 * paper: show branch/tags/bookmarks when diffing (Bts:issue3559)
 * paper: show branch/tags/bookmarks when viewing (Bts:issue3559)

=== unsorted ===
 * archive: drop the leading '.' path component from the prefix (Bts:issue4634)
 * archive: fix changesincelatesttag with wdir()
 * archive: support 'wdir()'
 * bufferedinputpipe: remove N^2 computation of buffer length (Bts:issue4735)
 * bundle2: fix type of experimental option
 * bundle2: pull bookmark the old way if no bundle2 listkeys support (Bts:issue4701)
 * canonpath: fix infinite recursion
 * censor: make various path forms available like other Mercurial commands
 * censor: mark experimental option
 * changegroup: compute seen files as changesets are added (Bts:issue4750)
 * changelog: change input type of index_get_parents
 * changelog: fix bug in heads computation
 * changelog: move index_get_parents function up
 * changelog: update read pending documentation
 * check-commit: catch both patterns of double empty lines
 * check-commit: print limit when user has a too-long summary
 * check-config: add config option checker
 * crecord: fix issue when backgrounding editor would leave artefact
 * demandimport: alias builtin as builtins
 * demandimport: define a 'deactivated' context manager
 * demandimport: support importing builtins for Python 3
 * devel: rename 'all' to 'all-warnings' (BC)
 * dispatch: add support for python-flamegraph[0] profiling
 * dispatch: disable demandimport for the --debugger option
 * email: fix config default value inconsistency
 * exchange: support transferring .hgtags fnodes mapping
 * extdiff: add support for subrepos
 * filemerge: mark internal-only config option
 * formatter: add template support
 * formatter: mark developer options
 * generaldelta: mark experimental reordering option
 * hg: support for auto sharing stores when cloning
 * hgewb: disable progress when serving (Bts:issue4582)
 * hghave: allow adding customized features at runtime
 * http2: mark experimental and developer options
 * localrepo: eliminate requirements class variable (API)
 * localrepo: kill off sopener (API)
 * localrepo: mark format options
 * mail: pass ui to sslutil.wrapsocket() even if verifycert is off (Bts:issue4713)
 * match: add an optional constructor parameter for a bad() override
 * match: add optional warn argument
 * match: introduce boolean prefix() method
 * match: resolve filesets in subrepos for commands given the '-S' argument
 * parser: factor out function that parses right-hand side of prefix/infix ops
 * parser: fill invalid infix and suffix actions by None
 * parser: reorder infix/suffix handling to be similar to prefix/primary flow
 * parser: resolve ambiguity where both prefix and primary actions are defined
 * parser: separate actions for primary expression and prefix operator
 * parser: take suffix action if no infix action is defined
 * pathutil: hint if a path is root relative instead of cwd relative (Bts:issue4663)
 * phase: default to current revision if no rev is provided (Bts:issue4666)
 * profiler: mark developer-only config option
 * progress: deprecate the progress extension
 * progress: mark experimental option
 * progress: respect ui.quiet (Bts:issue4726)
 * revrange: build balanced tree of addsets from revisions (Bts:issue4565)
 * run-tests: introduce PYTHON3 boolean constant (Bts:issue4668)
 * run-tests: move all open-coded sys.version_info checks to PYTHON3 (Bts:issue4668)
 * run-tests: move unicode-to-bytes operations on paths to a helper (Bts:issue4667)
 * run-tests: prefer PYTHON3 constant to many version_info checks (Bts:issue4668)
 * run-tests: replace open-coded .decode()s on paths with a helper (Bts:issue4667)
 * scmutil: add an optional parameter to matcher factories for a bad() override
 * scmutil: use the optional badfn argument when building a matcher
 * setup.py: drop compatibility with Python 2.4 and 2.5 (BC)
 * setup: hide octal literals inside strings so they're portable (Bts:issue4554)
 * sshpeer: break "OutOfBandError" feature for ssh (BC)
 * sshpeer: run the ssh command unbuffered
 * ssl: prompt passphrase of client key file via ui.getpass() (Bts:issue4648)
 * subrepo: mark internal-only option

 * templatekw: display active bookmark more consistently (Bts:issue4552) (BC)
 * test-discovery: disable bundle2 for legacy test (Bts:issue4610)
 * bookmarks: abort the whole push if bookmarks fails to update (BC)
 * phases: abort the whole push if phases fail to update (BC)
 * templater: do not reevaluate rawstring as template (BC)
 * templater: take any string literals as template, but not for rawstring (BC)
 * templater: tokenize decimal integer literal (Bts:issue4638) (BC)

 * bookmarks: remove unused updatecurrentbookmark function (API)
 * bookmarks: rename bookmarkcurrent to activebookmark (API)
 * bookmarks: rename readcurrent to readactive (API)
 * bookmarks: rename setcurrent to activate (API)
 * bookmarks: rename unsetcurrent to deactivate (API)
 * bookmarks: simplify iscurrent to isactivewdirparent (API)
 * commit: no longer allow empty commit with the 'force' argument (API)
 * templater: remove noop calls of parsestring(s, quoted=False) (API)
 * templater: rename parsestring() to unquotestring() (API)

== Mercurial 3.4.2 (2015-07-01) ==
 * changegroup: properly compute common base in changeggroupsubset (Bts:issue4736)
 * crecord: fix a typo introduced when moving crecord to core
 * crecord: fix three typos introduced while moving crecord into core
 * hgwebdir: avoid redundant repo and directory entries when 'web.name' is set
 * hgwebdir: don't allow the hidden parent of a subrepo to show as a directory
 * parsers: do not cache !RevlogError type (Bts:issue4451)
 * pull: avoid race condition with 'hg pull --rev name --update' (Bts:issue4706)
 * templater: do not preprocess template string in "if" expression (Bts:issue4714)
 * templater: evaluate arguments passed to diff() appropriately
 * templater: parse \"...\" as string for 2.9.2-3.4 compatibility (Bts:issue4733)
 * transplant: only pull the transplanted revision (Bts:issue4692)
 * transplant: update test to use hash for remote transplant

== Mercurial 3.4.1 (2015-06-01) ==
This is a regularly-scheduled bugfix release.

 * archive: always use portable path component separators with subrepos
 * commands: hide formatter option as EXPERIMENTAL, not as DEPRECATED
 * context: don't complain about a matcher's subrepo paths in changectx.walk()
 * convert: properly pass null ids through .hgtags (Bts:issue4678)
 * extensions: clear aftercallbacks after execution (Bts:issue4646)
 * hgweb: bring back infinite scroll in shortlog of paper style
 * histedit: fix --continue when rules are finished
 * histedit: fix --edit-plan
 * histedit: fix keep during --continue
 * histedit: fix serializing of None backupfile
 * histedit: fix test-histedit-edit on vfat
 * localrepo: pass hook argument txnid to pretxnopen hooks
 * localrepo: rename hook argument from TXNID to txnid (BC)
 * localrepo: use correct argument name for pretxnclose hooks (BC)
 * match: explicitly naming a subrepo implies always() for the submatcher
 * mergecopies: avoid slowdown from linkrev adjustment (Bts:issue4680)
 * rebase: check that the bookmark is still valid when restoring (Bts:issue4669)
 * rebase: clear merge when aborting before any rebasing (Bts:issue4661)
 * revbranchcache: return uncached branchinfo for nullrev (Bts:issue4683)
 * revset: drop magic of fullreposet membership test (Bts:issue4682)
 * revset: id() called with 40-byte strings should give the same results as for short strings
 * revset: map postfix '%' to only() to optimize operand recursively (Bts:issue4670)
 * ssh: capture output with bundle2 again (Bts:issue4642)
 * templatekw: compare target context and its parent exactly (Bts:issue4690)
 * templater: do not process \-escapes at parsestring() (Bts:issue4290)
 * templater: fix crash by passing invalid object to date() function
 * templater: strictly parse leading backslashes of '{' (Bts:issue4569) (BC)
 * transaction: really fix _addbackupentry key usage (Bts:issue4684)
 * transaction: separate calculating TXNID from creating transaction object
 * transaction: use the proper variable in '_addbackupentry' (Bts:issue4684)
 * util.checkcase: don't abort on broken symlinks

== Mercurial 3.4 (2015-05-01) ==
This is a regularly-scheduled feature release.

=== commands ===
 * annotate: add option to annotate working-directory files
 * annotate: always prepare ancestry context of base fctx (Bts:issue4600)
 * annotate: always adjust linkrev before walking down to parents (Bts:issue4623)
 * annotate: prepare ancestry context of workingfilectx
 * bookmarks: add incoming() to replace diff() for incoming bookmarks
 * bookmarks: add outgoing() to replace diff() for outgoing bookmarks
 * bookmarks: check @pathalias suffix before available @number for efficiency
 * bookmarks: enhance test of showing detail about incoming/outgoing bookmarks
 * bookmarks: prevent divergent bookmark from being updated unexpectedly
 * bookmarks: reuse @number bookmark, if it refers changeset referred remotely
 * bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
 * bookmarks: show detailed status about incoming/outgoing bookmarks
 * clone: add progress support to hardlink clones (Bts:issue3059)
 * commands.import: accept a prefix option
 * commands.push: abort when revisions evaluate to empty set (BC)
 * commands: add ui.statuscopies config knob
 * debuginstall: expand the editor path before searching for it (Bts:issue4380)
 * files: split reusable implementation into cmdutil for subrepo support
 * files: use ctx object to access dirstate
 * graft: allow creating sibling grafts
 * graft: record intermediate grafts in extras
 * log: display closing-branch nodes as "_" (BC)
 * log: fix --follow null parent not to include revision 0
 * log: make -fr show complete history from the given revs (BC)
 * log: prefer 'wctx' over 'pctx' for working context
 * patch.internalpatch: accept a prefix parameter
 * patch.internalpatch: add a default value for prefix
 * patch: rename pathstrip to pathtransform
 * pull: print "pulling from foo" before accessing the other repo
 * push: acquire local 'wlock' if "pushback" is expected (BC) (Bts:issue4596)
 * resolve: silence warning of unknown pats for -l/--list (BC)
 * revert: evaluate filesets against working directory (Bts:issue4497)
 * revert: fix --interactive on local modification (Bts:issue4576)
 * revert: stop marking files clean after interactive revert (Bts:issue4592)
 * revert: accept just -I/-X without paths or -a/-i (Bts:issue4592)
 * revert: apply normallookup on reverted file if size isn't changed (Bts:issue4583)
 * revert: restore the ability to revert across case only renames (Bts:issue4481)
 * status: add relative directory help text (Bts:issue3835)

=== core ===
 * bundle2: capture transaction rollback message output (Bts:issue4614)
 * bundle2: disable ouput capture unless we use http (Bts:issue4613 Bts:issue4615)
 * changelog: fix readpending if no pending data exist (Bts:issue4609)
 * dirstate: fix order of initializing nf vs f
 * filelog: allow censored files to contain padding data
 * merge: run update hook after the last wlock release
 * pushkey: flush pending data before running a pre-pushkey hook (Bts:issue4607)
 * repoview: improve compute staticblockers perf
 * revlog: _addrevision creates full-replace deltas based on censored revisions
 * revlog: add "iscensored()" to revlog public API
 * revlog: addgroup checks if incoming deltas add censored revs, sets flag bit
 * revlog: in addgroup, reject ill-formed deltas based on censored nodes
 * revlog: make converting from inline to non-line work after a strip
 * revlog: special case expanding full-replacement deltas received by exchange
 * subrepo: don't write .hgsubstate lines with empty subrepo state (Bts:issue4622)
 * subrepo: update the help text to account for diff -I/-X gitsubrepo support
 * tags: establish a separate and shared cache of .hgtags filenodes
 * tags: change format of tags cache files
 * tags: have a different cache file per filter level
 * ui: disable revsetaliases in plain mode (BC)
 * util: add progress callback support to copyfiles
 * windows: make shellquote() quote any path containing '\' (Bts:issue4629)

=== extensions ===
 * color: be more conservative about setting ANSI mode on Windows (BC)
 * color: fix crash in cmd.exe
 * color: omit terminfo/win32 warning if non-interactive (Bts:issue4543)
 * color: support a different color mode when the pager is active
 * convert: adjust progress bar for octopus merges (Bts:issue4169)
 * histedit: add --edit-plan option to histedit
 * histedit: allow histedit --continue when not on a descendant (BC)
 * histedit: fix preventing strips during histedit
 * histedit: fix style of new error message
 * histedit: improve roll action integration with fold
 * histedit: fix rollup prompting for a commit message (Bts:issue4606)
 * largefiles: don't crash when cloning to a remote repo
 * largefiles: don't mangle filesets when fixing up the log matcher
 * largefiles: always consider updatelfiles 'checked' parameter set
 * largefiles: avoid infinite recursive call of openlfdirstate in overriderevert
 * largefiles: don't create chain of __contains__ calls
 * largefiles: don't prefix standin patterns with '.hglf' when logging
 * largefiles: don't warn when reverting a forgotten largefile
 * largefiles: extract and reuse 'standin' variable in overriderevert()
 * largefiles: for update -C, only update largefiles when necessary
 * largefiles: handle logging from outside the repo
 * largefiles: introduce lfutil.findstorepath()
 * largefiles: override cmdutil.revert() instead of comands.revert()
 * largefiles: report the source of copied/moved largefiles in status -C
 * largefiles: set the extension as enabled locally after a clone requiring it
 * largefiles: teach log to handle patterns
 * largefiles: update _subdirlfs() comment
 * largefiles: use common function to build content of .hg_archival.txt
 * largefiles: use lfutil.findstorepath() when verifying a local repo
 * largefiles: use the core file copy logic to validate the destination path
 * largefiles: use the share source as the primary local store (Bts:issue4471)
 * mq: avoid silent failure when single patch doesn't apply (Bts:issue4604)
 * rebase: don't forward "source" argument to rebase (Bts:issue4633)
 * rebase: restore bookmark state on abort
 * record: edit patch of newly added files (Bts:issue4304)
 * record: fix adding new file with record from within a subdir (Bts:issue4626)
 * record: fix record with change on moved file crashes (Bts:issue4619)
 * shelve: acquire lock in the right order
 * shelve: add interactive mode
 * shelve: add interactive mode command line option

=== hgweb ===
 * hgweb: resurrect <span> tag on diffline to fix rendering in monoblue style
 * hgweb: use introrev() for finding parents (Bts:issue4506)
 * json: implement {bookmarks} template
 * json: implement {branches} template
 * json: implement {changeset} template
 * json: implement {comparison} template
 * json: implement {fileannotate} template
 * json: implement {filediff} template
 * json: implement {helptopics} template
 * json: implement {help} template
 * json: implement {manifest} template
 * json: implement {shortlog} and {changelog} templates
 * json: implement {tags} template

=== unsorted ===
 * archive: change the default prefix to `''` from None
 * archive: look for first visible revision to build repo identity (Bts:issue4591)
 * bundle2-localpeer: properly propagate the server output on error (Bts:issue4594)
 * bundle2-wireproto: properly propagate the server output on error (Bts:issue4594)
 * changeset_printer: display p1rev:p1node with "+" suffix for workingctx
 * check-commit: be more picky about detection of wrong bug tag
 * check-commit: check capitalization in summary lines
 * churn: deprecate -t option in favour of -T
 * crecord: fix another underbar
 * crecord: fix underbar style for orig_stdout
 * devel-warn: add a prefix to all messages ("devel-warn: ")
 * dirs._addpath: don't mutate Python strings after exposing them (Bts:issue4589)
 * dispatch: consolidate formatting of !ParseErrors
 * dispatch: offer near-edit-distance suggestions for {file,rev}set functions
 * dispatch: offer suggestions of similar-named commands
 * extensions: support callbacks after another extension loads
 * get-with-headers: support parsing and pretty printing JSON
 * graphlog: do not bypass commands.log so that -fr works
 * graphlog: move comment and flag denoting revs might be unsorted
 * graphlog: remove too early return from getgraphlogrevs() for empty repo
 * lazymanifest: fix memory leak in lmiter_iterentriesnext() after 3d485727e45e
 * lazymanifest: fix pure hg iterkeys()
 * linkrev: fix issue with annotate of working copy
 * manifestv2: add support for reading new manifest format
 * manifestv2: add support for writing new manifest format
 * obsolete: avoid infinite loop from obs-cycle in divergence (Bts:issue4126)
 * record: add interactive option to the commit command
 * record: allow editing new files (Bts:issue4304)
 * record_curses: fix ui bug for newly added file
 * revbranchcache: add test for when the cache is not writable
 * revbranchcache: move out of branchmap onto localrepo
 * revbranchcache: populate cache incrementally
 * revbranchcache: store repo on the object
 * revbranchcache: write cache even during read operations
 * revrange: don't parse revset aliases as hash prefixes (Bts:issue4553)
 * rollback: clear resolve state (Bts:issue4593)
 * ssl: resolve symlink before checking for Apple python executable (Bts:issue4588)
 * ssl: set explicit symbol "!" to web.cacerts to disable SSL verification (BC)
 * strip: properly clear resolve state with --keep (Bts:issue4593)
 * subrepo: add 'cat' support for git subrepos
 * subrepo: add basic support to hgsubrepo for the files command
 * subrepo: add include/exclude support for diffing git subrepos
 * subrepo: add status support for ignored and clean files in git subrepos
 * subrepo: change arguments of abstractsubrepo.__init__ (API)
 * subrepos: support adding files in git subrepos
 * test-convert-git: show insane progress bar with octopus merge (Bts:issue4169)
 * test-histedit-edit.t: demonstrate qnew fails during a histedit (Bts:issue4366)
 * test-https: enable dummycert test only if Apple python is used (Bts:issue4500)
 * test-shelve: be more lenient about whitespace (Bts:issue4124)
 * tests: add test showing tags cache drops filtered heads (Bts:issue4550)
 * tests: handle deleted .hg directory (git 2.2.0 and higher) (Bts:issue4585)
 * trydiff: join filename with prefix only once
 * unbundle: acquire 'wlock' when processing bundle2 (BC) (Bts:issue4596)
 * webcommands: define a dict of available commands
 * webcommands: define web commands using a decorator
 * hgweb: load revcount + 1 entries to fill nextentry in log page (Bts:issue5972)

=== performance ===
 * remotephase: avoid full changelog iteration (Bts:issue5964)
 * remotephase: fast path newheads computation in simple case (Bts:issue5964)
 * scmutil: avoid quadratic membership testing (Bts:issue5969)
 * sparse-revlog: fix delta validity computation

== 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 [[Release4.7|Full release notes]].

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).

{i} Be sure to read the upgrade notes when upgrading.

(See the archive for older versions)

1. Mercurial 6.6 (2023-11-21) to 6.6.1 (2023-12-07)

Regularly scheduled major release. An overview of new features is available.

2. Mercurial 6.5 (2023-07-06) to 6.5.3 (2023-10-06)

Regularly scheduled major release. An overview of new features is available.

3. Mercurial 6.4 (2023-03-24) to 6.4.5 (2023-06-22)

Regularly scheduled (but very late) major release. An overview of new features is available.

4. Mercurial 6.3 (2022-11-14) to 6.3.3 (2023-03-02)

Regularly scheduled major release (delayed for a number of factors). An overview of new features available.

6.3.1 is an extra release following some upstream Python 3.11 breakage of how regex flags work.

5. Mercurial 6.2 (2022-07-11) to 6.2.3 (2022-10-04)

Regularly scheduled major release. An overview of new features available. This is the first Python 3 only version.

6. Mercurial 6.1 (2022-03-01) to 6.1.4 (2022-06-16)

Regularly scheduled major release. An overview of new features available. This is the last version to support Python 2.

7. Mercurial 6.0 (2021-11-23) to 6.0.3 (2022-02-18)

Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release. It was delayed from the usual calendar due to the ongoing effort to make Windows support more robust, especially on Python 3.

8. Mercurial 5.9 to 5.9.3 (2021-08-20)

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

9. Mercurial 5.8 (2021-05-03)

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

10. Mercurial 5.7.1 (2021-03-08)

Regularly scheduled bug fix release.

10.1. commands

  • log: fix handling of root (or empty) path provided by matcher (issue6478)

  • patch: fix a formatting issue
  • patch: make diff --git to differentiate b/w file is empty or doesn't exists

10.2. core

  • hooks: introduce a ':run-with-plain' option for hooks

10.3. extensions

  • largefiles: properly pass kwargs into url.open

10.4. unsorted

  • procutil: extend gui test to detect wayland session (issue6479)

  • rust-status: honor matcher when using the dirstate-only fast-path (issue6483)

  • tests: add a test to demonstrate a bug in 'hg diff --git' (issue6486)

11. Mercurial 5.7 (2021-01-29)

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

12. Mercurial 5.6.1 (2020-12-03)

Regularly scheduled bug fix release.

12.1. extensions

  • rebase: clear merge state when aborting in-memory merge on dirty working copy

12.2. unsorted

  • crecord: render chunkpad on Windows (issue6427)

  • diff: do not concatenate immutable bytes while building a/b bodies (issue6445)

13. Mercurial 5.6 (2020-11-02)

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

14. Mercurial 5.5.2 (2020-10-02)

Regularly scheduled bug fix release.

14.1. commands

  • log: fix crash and bad filematcher lookup by -fr'wdir()' PATH

14.2. unsorted

  • hgdemandimport: bypass demandimport for _ast module (issue6407)

  • hgdemandimport: exclude more sqlalchemy modules
  • strip: with --keep, consider all revs "removed" from the wcp (issue6270)

15. Mercurial 5.5.1 (2020-09-01)

Regularly scheduled bug fix release.

15.1. bug fixes

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

16. Mercurial 5.5 (2020-08-03)

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

17. Mercurial 5.4.2 (2020-07-01)

Regularly scheduled bug fix release.

17.1. extensions

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

17.2. unsorted

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

18. Mercurial 5.4.1 (2020-06-15)

Regularly scheduled bug fix release.

18.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

18.2. core

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

18.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)

19. Mercurial 5.4 (2020-05-01)

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

20. Mercurial 5.3.2 (2020-04-02)

Regularly scheduled bug fix release.

20.1. unsorted

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

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

21. Mercurial 5.3.1 (2020-03-04)

Regularly scheduled bug fix release.

21.1. commands

  • branch: make --force work even when specifying revs
  • import: don't ignore '--secret' when '--bypass' is specified

21.2. extensions

  • shelve: fix ordering of merge labels

21.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)

22. Mercurial 5.3 (2020-02-03)

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

23. Mercurial 5.2 (2019-11-05)

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

23.1. Backwards Compatibility Changes

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

* '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.

23.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)'.

23.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

23.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

23.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

23.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

23.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)

23.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)

24. Mercurial 5.1.2 (2019-10-02)

Regularly scheduled bug fix release.

24.1. extensions

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

24.2. tests

  • test: allow different result for zstd compression (issue6188)

25. Mercurial 5.1.1 (2019-09-05)

Regularly scheduled bug fix release.

25.1. commands

  • bookmarks: actual fix for race condition deleting bookmark

25.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

25.3. tests

  • various test runner fixes
  • fixed use of tr --delete for tr(1) portability

26. Mercurial 5.1 (2019-08-01)

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

26.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

26.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)

26.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

26.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

26.5. Behavior Changes

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

26.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)

27. Mercurial 5.0.2

A regularly scheduled bugfix release.

27.1. commands

  • Help fixes on hg mv and hg cp

27.2. unsorted

28. Mercurial 5.0.1

A regularly scheduled bugfix release.

28.1. commands

  • bookmark: also make bookmark cache depends of the changelog
  • commit: allow --interactive to work again when naming a directory (issue6131)

28.2. unsorted

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

  • sslutil: fsencode path returned by certifi (issue6132)

29. Mercurial 5.0 (2019-05-01)

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

30. Mercurial 4.9.1 (2019-03-19)

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

30.1. commands

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

30.2. extensions

  • rebase: add missing dashes in help text

30.3. unsorted

  • subrepo: avoid false unsafe path detection on Windows
  • test-https: add some more known failure messages of client certs (issue6030)

31. 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.

31.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.

31.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

31.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

31.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

31.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)

31.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)

31.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)

32. Mercurial 4.8.2 (2019-01-07)

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

32.1. commands

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

32.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

32.3. extensions

  • phabricator: properly encode boolean types in the request body

32.4. unsorted

  • windows: ensure mixedfilemodewrapper fd doesn't escape by entering context mgr
  • worker: do not swallow exception occurred in main process

33. 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.

33.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()

33.2. core

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

33.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

33.4. unsorted

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

34. Mercurial 4.8 (2018-11-02)

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

34.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)

34.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

34.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

34.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)

34.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

34.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

34.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)

34.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)

35. Mercurial 4.7.2 (2018-10-01)

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

35.1. security

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

35.2. core

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

35.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)

36. Mercurial 4.7.1 (2018-09-04)

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

36.1. commands

  • merge: do not delete untracked files silently (issue5962)

36.2. core

  • revlog: fix descendant deprecated method

36.3. hgweb

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

36.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

37. 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.

WhatsNew (last edited 2024-10-28 15:33:56 by RaphaelGomes)