Differences between revisions 232 and 460 (spanning 228 versions)
Revision 232 as of 2014-06-01 22:54:57
Size: 56886
Editor: mpm
Comment:
Revision 460 as of 2024-10-28 10:52:07
Size: 51357
Editor: RaphaelGomes
Comment:
Deletions are marked like this. Additions are marked like this.
Line 12: Line 12:
(See [[WhatsNew/Archive|archive]] for older versions

== Mercurial 3.0.1 (2014-06-01) ==

This is a regularly-scheduled bugfix release.

 * alias: change return code of bad definition to 255
 * alias: fix loss of non-zero return code in command aliases
 * alias: handle shlex error in command aliases
 * bookmarks: properly align multi-byte characters
 * bugzilla: support Bugzilla 4.4.3+ API login token authentication (Bts:issue4257)
 * bundle2: fix bundle2 pulling all revs on empty pulls
 * bundle2: fix configuration name mismatch
 * changelog: ensure changelog._delaybuf is initialized
 * color: don't fail on error messages when no curses (Bts:issue4237)
 * exchange: propagate arguments to the _getbundleextrapart function
 * localrepo: prevent leak of transaction object (Bts:issue4258)
 * proxy: remove unneeded _set_hostport for compatibility with Python 2.7.7rc1
 * setup.py, make: avoid problems with outdated, existing hgext/__index__.py*
 * subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
 * subrepo: invoke "_sanitize()" also after "git merge --ff"
 * subrepo: make "_sanitize()" take absolute path to the root of subrepo
 * subrepo: make "_sanitize()" work
 * subrepo: normalize path in the specific way for problematic encodings
 * templates: fix ifcontains against sets with length > 1 (Bts:issue4259)
 * win32: backout 1a9ebc83a74c


== Mercurial 3.0 (2014-05-01) ==

This is a regularly-scheduled quarterly feature release. Unlike other 3.0 software releases, this is simply 2.9 + .1, so it should be the usual pain-free upgrade.

=== Core features ===

 * cat: support explicit paths in subrepos
 * cmdserver: allow starting server without repository
 * clone: abort if default destination has no meaningful name (BC)
 * clone: put streaming clones in a transaction
 * color: add debugcolor command (Bts:issue4094)
 * color: allow color keywords to be used directly in template
 * commands: add -T as alternative to --template
 * commands: hg debuginstall checks missing templates (Bts:issue4151)
 * commit: --edit/-e allows editing commit message supplied through other means
 * config: add initial implementation of --edit (with --global and --local flags)
 * debuginstall: add Python information to debuginstall output (Bts:issue4128)
 * demandimport: support HGDEMANDIMPORT=disable to disable demandimport
 * hgweb: add metadata to atom and rss feed entries
 * http: reuse authentication info after the first failed request (Bts:issue3567)
 * log: change implementation to use graphlog code
 * push: provide a hint when no paths are configured (Bts:issue3692)
 * require: provide a link to a wiki page as well as suggesting upgrade
 * revset: new implementation with incremental evaluation
 * revset: try to handle hyphenated symbols if lookup callback is available
 * revset: add 'only()' revset
 * sshpeer: only print out 'running ssh' messages in debug mode (BC)
 * template: add ifcontains template function
 * template: add pad function for padding output
 * template: add revset() template function
 * template: add shortest(node) template function
 * template: add flexible -T option
 * win32: improve the performance of win32.unlink() over CIFS

=== Extension features ===

 * blackbox: log events related to branch cache
 * convert: avoid updating tags when there is nothing new
 * convert: compare tags from all heads instead of just one
 * convert: replace old sha1s in the description
 * extensions: mark win32text deprecated
 * extensions: remove interhg
 * extensions: remove the inotify extension (BC)
 * histedit: select the lowest rev when looking for a root in a revset (BC)
 * journal: report parsing errors on recover/rollback (Bts:issue4172)
 * qimport: allow importing URLs

=== Fixes ===

 * backout: don't limit ancestry check to a single ancestor
 * backout: improve confusing 'cannot backout change on a different branch' abort
 * caches: invalidate store caches when lock is taken
 * cmdserver: forcibly use L channel to read password input (Bts:issue3161)
 * cmdserver: reload mq on each runcommand request to avoid corruption
 * diff: use second filename for --stat reporting on git patches (Bts:issue4221)
 * dirstate: report bad subdirectories as match.bad, not just a warning (BC)
 * extensions: use normpath to allow trailing '\' on Windows (Bts:issue4187)
 * fncache: clean up fncache during strips
 * largefiles: changed overridelog to work with graphlog
 * largefiles: don't prompt when one side of merge was changed but didn't change
 * largefiles: remove directories emptied after their files are moved (Bts:issue3515)
 * parsers: fail fast if Python has wrong minor version (Bts:issue4110)
 * phases: apply publishing enforcement for "serve" source
 * revlog: deal with chunk ranges over 2G on Windows (Bts:issue4215)
 * setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
 * subrepo: check return code for git push (Bts:issue4223)

=== Experimental features ===

 * bundle2: experimental support for bundle2
 * merge: experimental implementation of bid merge
 * merge: tell when .ancestor picks one of multiple common ancestors heads

== Mercurial 2.9.2 (2014-04-01) ==

This is a regularly-scheduled bugfix release.

 * amend: save commit message into ".hg/last-message.txt"
 * backout: correct commit status of no changes made (BC) (Bts:issue4190)
 * backout: document return code of merge conflict
 * commit: create new amend changeset as secret correctly for "--secret" option
 * commit: propagate --secret option to subrepos (Bts:issue4182)
 * convert: more clear documentation of the 'include' default of a 'include .'
 * dispatch: only do __import__(debugger) when a debugger is requested
 * log: solves bug regarding hg log -r 0:null (Bts:issue4039)
 * hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (Bts:issue4109)
 * hg: use "os.path.join()" to join path components which may be empty (Bts:issue4203)
 * histedit: save manually edited commit message into ".hg/last-message.txt"
 * localrepo: save manually edited commit message as soon as possible
 * merge: fix lack of "%s" in format string causing !TypeError at runtime
 * paper: overlapping of section title on help pages (Bts:issue4051)
 * phase: say "Returns 0" instead of "Return 0" like other command help
 * qfold: save manually edited commit message into ".hg/last-message.txt"
 * qnew: save manually edited commit message into ".hg/last-message.txt"
 * rebase: use "commitforceeditor" instead of "ui.edit()" for "--collapse"
 * revset: document the regular expression support for tag(name)
 * subrepo: add trailing newlines to warnings
 * subrepo: convert matched string to integer before comparing Git version
 * subrepo: only retrieve the first two components of the Git version
 * tag: save manually edited commit message into ".hg/last-message.txt"
 * templater: apply "stringify()" on sub expression to get string correctly
 * templater: avoid recursive evaluation of string literals completely
 * templater: make strings in template expressions be "string-escape"-ed correctly
 * templater: raise error for unknown function

== Mercurial 2.9.1 (2014-03-01) ==

This is a regularly-scheduled bugfix release.

 * coal: hgweb style adds extra blank line in file view (Bts:issue4136)
 * hg.openpath: use url.islocal to tell if the path is local (Bts:issue3624)
 * hgweb: hack around mimetypes encoding thinko (Bts:issue4160)
 * hooks: only disable/re-enable demandimport when it's already enabled
 * merge: add "other" file node in the merge state file
 * merge: audit the right destination file when merging with dir rename
 * merge: don't overwrite file untracked after remove, abort with 'untracked files'
 * merge: record the "other" node in merge state
 * pathencode: eliminate signed integer warnings
 * pull: close peer repo on completion (Bts:issue2491) (Bts:issue2797)
 * purge: avoid duplicate output for --print (Bts:issue4092)
 * rebase: do not try to reactivate deleted divergent bookmark
 * resolve: use "other" changeset from merge state (Bts:issue4163)
 * verify: do not prevent verify repository containing hidden changesets



== Mercurial 2.9 (2014-02-01) ==

This is a regularly-scheduled feature release.

=== Core features ===

 * backout: add a message after backout that need manual commit
 * bash_completion: add global support for -B|--bookmark
 * bash_completion: add global support for -b|--branch
 * bookmarks: allow push -B to create a new remote head (Bts:issue2372)
 * date: allow %z in format (Bts:issue4040)
 * hgweb: infinite scroll support for coal, gitweb, and monoblue styles
 * patch: add support for git delta hunks
 * url: added authuri when login information is requested (Bts:issue3209)

=== Performance improvement ===

 * backout: avoid update on simple case
 * branchmap: cache open/closed branch head information
 * cat: increase perf when catting single files
 * changectx: increase perf of walk function
 * strip: add faster revlog strip computation

=== Extension features ===

 * bash_completion: add completion for deleting a shelve
 * convert: use branchmap to change default branch in destination (Bts:issue3469)
 * record: --user/-u now works with record when ui.username not set (Bts:issue3857)
 * subrepo: check phase of state in each subrepositories before committing

=== Fixes ===

 * aliases: make "_checkshellalias()" invoke "findcmd()" with "strict=True"
 * bisect: --command without --noupdate should flag the parent rev it tested
 * clone: do not turn hidden changeset public on publishing clone (Bts:issue3935)
 * diff: search beyond ancestor when detecting renames
 * push: properly move phase boundary when no changeset are exchanged (Bts:issue3786)
 * rebase: abort cleanly when we encounter a damaged rebasestate (Bts:issue4155)
 * rebase: do not crash in panic when cwd disapear in the process (Bts:issue4121)
 * record: re-enable whitespace-ignoring options
 * relink: abort earlier when on different devices (Bts:issue3916)
 * subrepo: make it possible to update to hidden subrepo revisions
 * templater: selecting a style with no templates does not crash (Bts:issue4140)
 * update: consider successor changesets for a bare update
 * update: consider successor changesets when moving active bookmark


== Mercurial 2.8.2 (2014-01-01) ==

This is a regularly-scheduled bugfix release.

 * fileset, revset: do not use global parser object for thread safety
 * hgweb: avoid initialization race (Bts:issue3953)
 * mpatch: rewrite pointer overflow checks

== Mercurial 2.8.1 (2013-12-01) ==

This is a regularly-scheduled bugfix release.

 * bookmarks: consider successor changesets when moving bookmark (Bts:issue4015)
 * contrib: don't mention obsolete graphlog extension in mercurial.ini
 * contrib: promote strip extension over MQ in sample.hgrc
 * contrib: stop mentioning obsolete graphlog extension in sample.hgrc
 * convert: fix svn crash when svn.ra.get_log calls back with orig_paths=None
 * help: fix backwards bisect help example
 * help: use progress instead of mq as in 'hg help config' example
 * hgk: fix tag list parser (Bts:issue4101)
 * hgweb: ignore non numeric "revcount" parameter values (Bts:issue4091)
 * histedit: hold wlock and lock while in progress
 * largefiles: cache largefiles for update, also without printmessage
 * largefiles: don't crash on 'local renamed directory' actions
 * merge: move forgets to the beginning of the action list
 * minirst: do not interpret a directive as a literal block
 * minirst: find admonitions before pruning comments and adding margins
 * obsolete: stop doing membership test on list
 * parse_index2: fix crash on bad argument type (Bts:issue4110)
 * phase: better error message when --force is needed
 * rebase: fix rebase aborts when 'tip-1' is public (Bts:issue4082)
 * rebase: fix working copy location after a --collapse (Bts:issue4080)
 * share: fix unshare calling wrong repo.__init__() method
 * shelve: fix bad argument interaction with largefiles (Bts:issue4111)
 * shelve: unshelve using an unfiltered repository
 * strip: fix last unprotected mq reference (Bts:issue4097)
 * strip: hold wlock for entire duration
 * subrepo: sanitize non-hg subrepos
 * templater: fix escaping in nested string literals (Bts:issue4102)
 * templater: makes branches work correctly with stringify (Bts:issue4108)
 * templater: only recursively evaluate string literals as templates (Bts:issue4103)
 * unshelve: add tests for unknown files
 * unshelve: don't commit unknown files during unshelve (Bts:issue4113)
 * util: url keeps backslash in paths
 * util: warn when adding paths ending with \

== Mercurial 2.8 (2013-11-01) ==

This is a regularly scheduled feature release.

=== Core features ===

 * hgweb: add revset syntax support to search
 * hgweb: always run search when a query is entered (BC)
 * hgweb (paper theme): add infinite scrolling to graph
 * hgweb: show full date in rfc822 format in tooltips at shortlog page
 * proxy: allow wildcards in the no proxy list (Bts:issue1821)
 * pull: for pull --update with failed update, print hint if any
 * rebase: preserve working directory parent (BC)
 * sslutil: add a config knob to support TLS (default) or SSLv23 (BC) (Bts:issue4038)
 * templatefilters: add short format for age formatting
 * templater: support using templates with non-standard names from map file
 * update: add error message for dirty non-linear update with no rev
 * addremove: don't do full walks
 * log: make file log slow path usable on huge repos
 * subrepo: let the user choose to merge, keep local or keep remote subrepo revisions

=== Extension features ===

 * convert-internals: introduce hg.revs to replace hg.startrev and --rev with a revset
 * convert-internals: update source shamap when using filemap, just as when not using filemap
 * factotum: clean up keychain for multiple hg repository authentication
 * histedit: abort if there are multiple roots in "--outgoing" revisions
 * mq: extract strip function as its standalone extension (Bts:issue3824)
 * mq: look for modified subrepos when checking for local changes
 * rebase: remove bailifchanged check from pullrebase (BC)
 * shelve: add a shelve extension to save/restore working changes

=== Fixes ===

 * pager: honour internal aliases
 * patch: ensure valid git diffs if source/destination file is missing (Bts:issue4046)
 * patch: Fix nullid for binary git diffs (Bts:issue4054)
 * progress: stop getting stuck in a nested topic during a long inner step
 * rebase: handle bookmarks matching revset function names (Bts:issue3950)
 * rebase: preserve active bookmark when not at head (Bts:issue3813)
 * rebase: preserve metadata from grafts of changes (Bts:issue4001)
 * rebase: fix selection of base used when rebasing merge (Bts:issue4041)
 * ui: send password prompts to stderr again (Bts:issue4056)
(See the [[WhatsNew/Archive|archive]] for older versions)

== Mercurial 6.8 (2024-07-08) to 6.8.2 (2024-10-28) ==
Regularly scheduled major release. An [[Release6.8|overview of new features]] is available.

== Mercurial 6.7 (2024-03-15) to 6.7.4 (2024-06-12) ==
/!\ 6.7.1, 6.7.2 and 6.7.3 are affected with a data loss critcal bug.
Line 303: Line 20:
== Mercurial 2.7.2 (2013-10-01) ==

Regularly scheduled bugfix release. This fixes significant regressions from 2.7 in push/pull performance and SSL negotiation.

 * bundle: fix performance regression when bundling file changes (Bts:issue4031)
 * generaldelta: initialize basecache properly
 * help: use full name of extensions to look up them for keyword search
 * histedit: abort if there are multiple roots in "--outgoing" revisions
 * histedit: add more detailed help about "--outgoing"
 * histedit: suggest "histedit --abort" for inconsistent histedit state
 * httpclient: apply upstream revision da7579b034a4 to fix SSL problems (Bts:issue4038)
 * rebase: catch RepoLookupError at restoring rebase state for abort/continue
 * rebase: catch RepoLookupError at restoring rebase state for summary
 * repoview: have unfilteredpropertycache using the underlying cache
 * repoview: make propertycache.setcache compatible with repoview
 * revset: fix wrong keyword() behaviour for strings with spaces
 * sslutil: backed out changeset 074bd02352c0 (Bts:issue4038)
 * strip: set current bookmark to None if stripped


== Mercurial 2.7.1 (2013-09-03) ==

Regularly scheduled bugfix release.

 * rebase: handle bookmarks matching revset function names (Bts:issue3950)
 * tags: write tag overwriting history also into tag cache file (Bts:issue3911)


== Mercurial 2.7 (2013-08-01) ==

Regularly scheduled feature release. This release contains an important fix for a merge ancestor calculation regression in the 2.6 series.

=== Core features ===

 * bookmarks: allow bookmark command to take multiple arguments
 * commands: add checks for unfinished operations (Bts:issue3955)
 * commit: enable --secret option
 * hgweb: run search instead of showing wrong error for ambigious identifier
 * import: cut commit messages at --- unconditionally (Bts:issue2148)
 * log: add a log style that is default+phase (Bts:issue3436)
 * paper: add line wrapping switch to file source view
 * paper: code selection without line numbers in file source view
 * paper: highlight line which is linked to in source view
 * revert: make backup when unforgetting a file (Bts:issue3423)
 * rollback: mark as deprecated
 * sslutil: force SSLv3 on Python 2.6 and later (Bts:issue3905)
 * summary: augment output with info from extensions
 * templater: add strip function with chars as an extra argument
 * log: show style list when unknown style specified
 * tip: deprecate the tip command
 * update: add tracking of interrupted updates (Bts:issue3113)

=== Extension features ===

 * churn: split email aliases from the right
 * histedit: refuse to edit history that contains merges (Bts:issue3962)
 * convert: improve error handling when parsing splicemap (Bts:issue2084)
 * convert: support paths with spaces in splicemap (Bts:issue3844)

=== Fixes ===

 * ancestor: Fix a reference counting bug in the C version (Bts:issue3984)
 * bookmarks: update only proper bookmarks on push -r/-B (issue 3973)
 * bookmarks: pull --update updates to active bookmark if it moved (Bts:issue4007)
 * changegroup: fix fastpath during commit
 * checklink: work around sshfs brain-damage (Bts:issue3636)
 * convert: catch empty origpaths in svn gettags (Bts:issue3941)
 * convert: fix bad conversion of copies when hg.startrev is specified
 * convert: handle changeset sorting errors without traceback (Bts:issue3961)
 * hgweb: fix incorrect way to count revisions in log (Bts:issue3977)
 * histedit: don't clobber working copy on --abort if not on histedit cset
 * largefiles: overridematch() should replace the file path instead of extending (Bts:issue3934)
 * progress: respect HGPLAIN
 * rebase: allow aborting when descendants detected
 * rebase: continue abort without strip for immutable csets (Bts:issue3997)
 * rebase: don't clobber wd on --abort when we've updated away (Bts:issue4009)
 * revlog: handle hidden revs in _partialmatch (Bts:issue3979)

== Mercurial 2.6.3 (2013-07-01) ==

This is a regularly-scheduled bugfix release.

 * commit: amending with --close-branch (Bts:issue3445)
 * doc: make it easier to read how to enable extensions
 * doc: reword "config file" to "configuration file"
 * docs: change description to synopsis in hgrc.5
 * histedit: raise ImportError when demandloading is enabled
 * pathencode: fix hashmangle short dir limit (Bts:issue3958)
 * update: remove .hg/graftstate on clean (Bts:issue3970)

== Mercurial 2.6.2 (2013-06-01) ==

This is a regularly-scheduled bugfix release.

 * amend: complain more comprehensibly about subrepos
 * blackbox: fix blackbox causing exceptions in tests
 * blackbox: fix recording exit codes (Bts:issue3938)
 * dirstate: don't overnormalize for ui.slash
 * graft: refuse to commit an interrupted graft (Bts:issue3667)
 * help: fix role/option confusion in RST
 * help: stop documentation markup appearing in generated help

== Mercurial 2.6.1 (2013-05-14) ==

This is an unscheduled bugfix release to address some minor regressions in the 2.6 release.

 * convert: fix bug of wrong CVS path parsing without port number (Bts:issue3678)
 * help/config: note 64-bit Windows registry key used with 32-bit Python
 * hfs+: rewrite percent-escaper (Bts:issue3918)
 * hgignore: fix regression with hgignore directory matches (Bts:issue3921)
 * highlight: fix page layout with empty first and last lines
 * largefiles: check existence of the file with case awareness of the filesystem
 * largefiles: check unknown files with case awareness of the filesystem
 * pathencode: grow buffers to increase safety margin
 * revert: ensure that copies and renames are honored (Bts:issue3920)
 * subrepo: open files in 'rb' mode to read exact data in (Bts:issue3926)
 * windows: check target type before actual unlinking to follow POSIX semantics

== Mercurial 2.6 (2013-05-01) ==


/!\ This release has known issues with some ignore rules (Bts:issue3921) and subrepos on Windows (Bts:issue3926)

This is a regularly scheduled feature release.

=== Core features ===

 * amend: support amending merge changesets (Bts:issue3778)
 * archive: raise error.Abort if the file pattern matches no files
 * bash_completion: allow remove to complete normal files
 * bookmarks: allow (re-)activating a bookmark on the current changeset
 * bookmarks: don't allow integers as bookmark/branch/tag names
 * bookmarks: moving the active bookmark deactivates it
 * bookmarks: resolve divergent bookmarks when moving active bookmark forward
 * bookmarks: resolve divergent bookmark when moving across a branch
 * commit: show active bookmark in commit editor helper text
 * config: discard "%unset" values defined in the other files read in previously
 * dates: support 'today' and 'yesterday' in parsedate (Bts:issue3764)
 * date: understand "now" as a shortcut for the current time
 * dispatch: print 'abort:' when a pre-command hook fails (BC)
 * dispatch: return status is 1 and a nice error message is printed when a user intervention is required (BC)
 * export: clobber files with -o (BC) (Bts:issue3652)
 * export: export working directory parent by default
 * export: show 'Date' header in a format that also is readable for humans
 * filesets: add eol predicate
 * hgweb: generate documentation as HTML (previously as text)
 * hgweb: teach archive how to download a specific directory or file
 * merge: apply non-interactive working dir updates in parallel
 * mergetools: avoid losing the merged version with meld
 * mergetools: vimdiff issues a warning explaining how to abort
 * sslutil: abort if peer certificate is not verified for secure use
 * summary: make "incoming" information sensitive to branch in URL (Bts:issue3830)
 * summary: make "outgoing" information sensitive to branch in URL (Bts:issue3829)
 * summary: show active bookmark even if not at current changeset
 * templatekw: add default styles for hybrid types (Bts:issue3887)
 * templater: add get() function to access dict element (e.g. extra)

 * addremove: improve performance
 * ancestor: a new algorithm that is faster for nodes near tip
 * dirstate: performance improvements
 * grep: use re2 if possible
 * parsers: a C implementation of the new ancestors algorithm
 * scmutil: rewrite dirs in C, use if available
 * tags: update tag type only if tag node is updated (Bts:issue3911)

=== Extension features ===

 * blackbox: new extension
 * hgk: add support for phases
 * hgk: don't use fixed format for dates
 * hgk: update backgroud colour when Ttk is available
 * histedit: allow "-" as a command file
 * histedit: handle multiple spaces between action and hash (Bts:issue3893)
 * histedit: make "hg histedit" sensitive to branch in URL
 * histedit: properly handle --continue on empty fold
 * histedit: support editing of the first commit (Bts:issue3767)
 * interhg: feature integrated in core. Extension removed.
 * largefiles: don't cache largefiles for pulled heads by default
 * largefiles: improve reuse of HTTP connections
 * largefiles: introduce lfpull command for pulling missing largefiles
 * largefiles: introduce pulled() revset expression for use in --lfrev
 * largefiles: introduce pull --lfrev option
 * largefiles: quiet (and document) undefined name errors (Bts:issue3886)
 * largefiles: stat all largefiles in one batch before downloading
 * largefiles: use repo.wwrite for writing standins (Bts:issue3909)
 * mq: comply with filtering when injecting fake tags (Bts:issue3812)
 * mq: do not inherit settings form base repo in mqrepo (Fixes Bts:issue2358)
 * rebase: check no-op before checking phase (Bts:issue3891)
 * rebase: fix --collapse when a file was added then removed
 * smtp: use 465 as default port for SMTPS
 * smtp: verify the certificate of the SMTP server for STARTTLS/SMTPS
 * subrepo: clone of git sub-repository creates incorrect git branch (Bts:issue3870)
 * subrepo: do not push mercurial subrepos whose store is clean
 * subrepo: fix exception on revert when "all" option is omitted

=== Fixes ===

 * annotate: increase refcount of each revision correctly (Bts:issue3841)
 * applyupdates: assign variable before we try to use it (Bts:issue3855)
 * bookmarks: allow moving a bookmark forward to a descendant
 * bookmarks: fix bug that activated a bookmark even with -r passed
 * case collision: Avoid unexpectd case folding issue during merge that should succeed (Bts: issue3452)
 * commit: allow closing "non-head" changesets
 * convert/git: catch errors from modern git-ls-remote (Bts:issue3428)
 * destroyed: invalidate phraserevs cache in all case (Bts:issue3858)
 * diff: fix binary file removals in git mode
 * http: avoid large text dumps when remote url is not a repo
 * import: don't rollback and unrelated transaction on failed import --exact (Bts:issue3616)
 * log: fix behavior with empty repositories (Bts:issue3497)
 * outgoing: fix possible filtering crash in outgoing (Bts:issue3814)
 * pager: catch ctrl-c on exit (Bts:issue3834)
 * record: abort on malformed patches instead of crashing
 * revset: change ancestor to accept 0 or more arguments (Bts:issue3750)
 * revset: don't abort when regex to tag() matches nothing (Bts:issue3850)
 * scheme: don't crash on invalid URLs
 * setup: make error message for missing Python headers more helpful
 * sshpeer: store subprocess so it cleans up correctly
 * win32: use explicit path to "python.exe" only if it exists


== Mercurial 2.5.4 (2013-04-04) ==

This fixes an urgent regression in merging with subrepos introduced in 2.5.

 * applyupdates: assign variable before we try to use it (Bts:issue3855)
 * setup.py: properly discard trust warning

== Mercurial 2.5.3 (2013-04-01) ==

 * hgweb: show correct error message for i18n environment
 * localrepo: always write the filtered phasecache when nodes are destroyed (Bts:issue3827)
 * rebase: restore active bookmark after rebase --continue
 * setup.py: add metadata to register package to PyPI
 * setup.py: ignore warnings from obsolete
 * zsh_completion: fix trailing carriage return spoiling tag completion

== Mercurial 2.5.2 (2013-03-01) ==

 * bundle: treat branches created newly on the local correctly (Bts:issue3828)
 * largefiles: avoid rechecking hashes when avoidable
 * largefiles: don't let update leave wrong largefiles in wd if fetch fails
 * largefiles: fix off-by-one error on pull --all-largefiles
 * largefiles: fix download of largefiles from an empty list of changesets
 * largefiles: missing largefiles should not be committed as removed
 * mergetools: vimdiff issue a warning explaining how to abort
 * outgoing: fix possible filtering crash in outgoing (Bts:issue3814)
 * rebase: fix potential infinite loop in complex rename situation (Bts:issue3843)

== Mercurial 2.5.1 (2013-02-08) ==

This is a non-scheduled bugfix release.

 * hgk: support the old way of getting the current Ttk theme (Bts:issue3808)
 * hgweb.cgi: fix internal WSGI emulation (Bts:issue3804)
 * hgweb: make 'summary' work with hidden changesets (Bts:issue3810)
 * incoming: fix incoming when a local head is remotely filtered (Bts:issue3805)
 * largefiles: don't crash when trying to find default dest for url without path
 * rebase: derive node from target rev (Bts:issue3802)

== Mercurial 2.5 (2013-02-01) ==

This is a regularly-scheduled feature release.

=== Core features ===

 * branchmap: improved performances
 * bundle: add revset expression to show bundle contents (Bts:issue3487)
 * dirstate: implement unix statfiles in C
 * hgweb: add (Atom) subscribe links to the repository index
 * hgweb: add "URL breadcrumbs"
 * hgweb: add branches RSS and Atom feeds
 * hgweb: secret changeset are excluded from html view (Bts:3614 )
 * serve: use chunked encoding in hgweb responses
 * pathencode: implement both basic and hashed encoding in C
 * subrepo: append subrepo path to subrepo error messages
 * validate: check for spurious incoming filelog entries
 * hgweb: allow hgweb's archive to recurse into subrepos

=== Changeset Evolution ===

Major progress toward ChangesetEvolution were done.
 
 * hidden changesets are now properly ignored by all commands
 * a global --hidden flag is added to give access to hidden changesets
 * rewriting a changeset but not its descendants is now allowed; this leaves unstable changeset behind
 * we now detect *divergent* changesets. The third and last kind of obsolescence related troubles. `divergent()` revset is added
 * a `troubled()` revset have been added
 * branchmap for of *visible* and *served* changeset are now cached on disk. This is a major performance improvements
 * performance improvements of most evolution related algorithm

=== Extension features ===
 * color: add template label function
 * convert: add config option to use the local time zone
 * convert: add support for converting git submodule (Bts:issue3528)
 * hgk: use Ttk instead of plain Tk
 * inotify: don't fall over just because of a dangling symlink
 * largefiles: fix revert removing a largefile from a merge
 * largefiles: fix update from a merge with removed files
 * largefiles: make log match largefiles in the non-standin location too
 * largefiles: make update with backup files in .hglf slightly less broken
 * largefiles: rename 'admin' to more descriptive 'lfstoredir
 * rebase: performance improvements
 * rebase: rebase set with multiple roots are now handled by the --rev option
 * record: use patch.diffopts to account for user diffopts
 * share: always set default path to work with subrepos (Bts:issue3518)
 * zsh_completion: add completion of branch names

=== Fixes ===
 * commands: 'hg bookmark NAME' should work even with ui.strict=True
 * copies: do not track backward copies, only renames (Bts:issue3739)
 * destroyed: keep the filecache in sync with `__dict__` (Bts:issue3335, Bts:issue3693, Bts:issue3743)
 * grep: don't search past the end of the searched string
 * hgweb: properly returns 404 for unknown revision (instead of 500)
 * histedit: proper phase conservation (Bts:issue3724)
 * histedit: prevents obsolescence cycle (Bts:issue3681)
 * hook: disable demandimport before importing hooks
 * mq: don't fail when removing a patch without patch file from series file
 * mq: fix qpop of working directory parent patch when not at qtip
 * zeroconf: use port from server instead of picking port from config (Bts:issue3746)
 * update: update to current bookmark if it moved out from under us (issue3682)
 * bookmarks: show active bookmark even if not at working dir
 * largefiles: let wirestore._stat return stats as expected by remotestore verify
 * largefiles: adapt verify to batched remote statlfile (issue3780)
 * largefiles: don't allow corruption to propagate after detection
 * largefiles: don't verify largefile hashes on servers when processing statlfile
 * largefiles: allow use of urls with #revision
 * largefiles: fix commit when using relative paths from subdirectory
 * largefiles: fix cat when using relative paths from subdirectory
 * histedit: prevent parent guessed via --outgoing from being a revset (issue3770)
 * rebase: delete divergent bookmarks on destination (issue3685)
 * hgwebdir: use web.prefix when creating url breadcrumbs (issue3790)
 * subrepo: allow skipping courtesy phase sync (issue3781)
 * merge: .hgsubstate is special as merge destination, not as merge source
 * merge: improved handling of symlinks

== Mercurial 2.4.2 (2013-01-01) ==

This is a regularly-scheduled bugfix release.

 * amend: invalidate dirstate in case of failure (Bts:issue3670)
 * amend: prevent loss of bookmark on failed amend
 * bookmarks: fix head selection for merge with two bookmarked heads
 * bundlerepo: don't return the peer without bundlerepo from getremotechanges
 * dirstate: don't rename branch file if writing it failed
 * dirstate: remove obsolete comment from setbranch
 * hgweb: avoid generator exhaustion with branches
 * hgweb: fix iterator reuse in atom feed generation
 * hgwebdir: honor web.templates and web.static for static files (Bts:issue3734)
 * largefiles revert: update lfdirstate with result from first cleanliness check
 * largefiles status: update lfdirstate with result from cleanliness check
 * largefiles: commit directories that only contain largefiles (Bts:issue3548)
 * largefiles: don't walk through all ignored files
 * paper: sanity-check page feed links
 * scmutil: don't try to match modes on filesystems without modes (Bts:issue3740)
 * zeroconf: use port from server instead of picking port from config (Bts:issue3746)

== Mercurial 2.4.1 (2012-12-03) ==

This is a regularly-schedule bugfix release.

 * amend: force editor only if old message is reused (Bts:issue3698)
 * grep: don't search past the end of the searched string
 * hooks: be even more forgiven of non-fd descriptors (Bts:issue3711)
 * hooks: delay I/O redirection until we actually run a hook (Bts:issue3711)
 * phases: fix missing "error" module import (Bts:issue3707)
 * rebase: fix pull --rev options clashing with --rebase (Bts:issue3619)
 * subrepo: add argument to "diff()" to pass "ui" of caller side (Bts:issue3712) (API)
 * update: allow update to existing branches with invalid names (Bts:issue3710)
 * util: make chunkbuffer non-quadratic on Windows


== Mercurial 2.4 (2012-11-01) ==

This is a regularly-scheduled feature release.

=== Core features ===

 * amend: support for ChangesetEvolution if enabled
 * bookmarks: deactivate current bookmark if no name is given
 * bookmarks: teach the -r option to use revsets
 * bookmarks: disallow bookmarks named 'tip', '.', or 'null'
 * clone: substantial speedup to clone on repo with a lots of heads (Bts:issue3378)
 * clone: activate bookmark specified with --updaterev
 * clone: update to @ bookmark if it exists
 * log: substantial speedup for untracked files (Bts:issue1340)
 * revsets: add branchpoint() function
 * resolve: commit the changes after each item resolve (Bts:issue3638)
 * subrepo, hghave: use "svn --version --quiet" to determine version number
 * subrepo: setting LC_MESSAGES only works if LC_ALL is empty or unset
 * templatefilters: add parameterized date method
 * templatefilters: add parameterized fill function
 * templatefilters: avoid traceback caused by bogus date input (Bts:issue3344)
 * templatekw: add p1rev, p1node, p2rev, p2node keywords
 * templatekw: add parent1, parent1node, parent2, parent2node keywords
 * templater: abort when a template filter raises an exception (Bts:issue2987)
 * templater: add if/ifeq conditionals
 * templater: add sub() function
 * templating: make new-style templating features work with command line lists
 * bookmarks: take ChangesetEvolution into account when updating (Bts:issue3561)
 * speedup various operation related to ChangesetEvolution
 * add detection of changeset ''bumped'' by ChangesetEvolution

=== Extension features ===

 * color: add additional changeset.phase label to log.changeset and log.parent
 * color: enabled color support for export command (Bts:issue1507)
 * color: support for all grep fields
 * contrib: add a commit synthesizer for reproducing scaling problems
 * histedit: refuse to edit public changeset
 * histedit: replaces patching logic by merges
 * histedit: support for ChangesetEvolution if enabled
 * largefiles: always create the cache and standin directories when cloning
 * largefiles: distinguish "no remote repo" from "no files to upload" (Bts:issue3651)
 * largefiles: fix a traceback in lfconvert if a largefile is missing (Bts:issue3519)
 * mq: improve qqueue message with patches applied (Bts:issue3036)
 * mq: update bookmarks during qrefresh
 * notify: support revset selection for subscriptions
 * rebase: support for ChangesetEvolution if enabled
 * record: checks for valid username before starting recording process (Bts:issue3456)
 * record: fix display of non-ASCII names in chunk selection

=== Fixes ===

 * amend: fix incompatibity between logfile and message option (Bts:issue3675)
 * amend: wrap all commit operations in a single transaction
 * bookmarks: abort when incompatible options are used (Bts:issue3663)
 * bookmarks: avoid redundant creation/assignment of "validdests" in "validdest()"
 * bookmarks: check bookmark format during rename (Bts:issue3662)
 * bookmarks: when @ bookmark diverges, don't double the @ sign (BC)
 * bookmark: prevent crashing when a successor is unknown locally (Bts:issue3680)
 * clone: activate @ bookmark if updating to it
 * clone: don't %-escape the default destination (Bts:issue3145)
 * clone: make sure to use "@" as bookmark and "default" as branch (Bts:issue3677) (BC)
 * clone: print bookmark name when clone activates a bookmark
 * commands: don't infer repo for commands like update (Bts:issue2748)
 * convert: normalize paths in filemaps (Bts:issue3612)
 * dirstate: handle large dates and times with masking (Bts:issue2608)
 * dirstate: handle dangling junctions on windows (Bts:issue2579)
 * filemerge: use util.shellquote when calling merge (Bts:issue3581)
 * hgweb: make the escape filter remove null characters (Bts:issue2567)
 * http2: make it possible to connect w/o ssl on port 443
 * icasefs: make case-folding collision detection as deletion aware (Bts:issue3648)
 * largefiles: don't copy largefiles from working dir to the store while converting
 * largefiles: respect the rev when reading standins in copytostore() (Bts:issue3630)
 * largefiles: use 'default' instead of 'default-push' when pulling (Bts:issue3584)
 * mq: fix qrefresh case sensitivity (Bts:issue3271)
 * patchbomb: respect --in-reply-to for all mails if no intro message is sent
 * remove: don't return error on directories with tracked files
 * revset: accept @ in unquoted symbols (Bts:issue3686)
 * scmutil: add mustaudit delegation to filtervfs (Bts:issue3673)
 * subrepo: only do clean update when overwrite is set (Bts:issue3276)
 * subrepo: subrepo isolation, pass baseui when cloning a new subrepo (Bts:issue2904)
 * update: check for missing files with --check (Bts:issue3595) (BC)
 * url: use open and not url.open for local files (Bts:issue3624)
 * verify: fix all doubled-slash sites (Bts:issue3665)
 * wireproto: fix pushkey hook failure and output on remote http repo

== Mercurial 2.3.2 (2012-10-01) ==
 * amend: preserve phase of amended revision (Bts:issue3602)
 * archival: add "extended-timestamp" extra block for zip archives (Bts:issue3600)
 * hgweb: avoid bad $$ processing in graph (Bts:issue3601)
 * hgweb: fix incorrect graph padding calculation (Bts:issue3626)
 * largefiles: fix return codes for multiple commands
 * largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
 * largefiles: download missing subrepo revs when archiving
 * largefiles: enable islfilesrepo() prior to a commit (Bts:issue3541)
 * largefiles: handle commit -A properly, after a --large commit (Bts:issue3542)
 * largefiles: preserve exit code from outgoing command (Bts:issue3611)
 * largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
 * largefiles: restore normal 'clone -u' and 'clone -U' functionality
 * lock: fixed race condition in trylock/testlock (Bts:issue3506)
 * mergetools.hgrc: set vimdiff to check=changed
 * strip: fix revset usage (Bts:issue3604)
 * subrepo: encode unicode path names (Bts:issue3610)

== Mercurial 2.3.1 (2012-09-01) ==

 * clone: don't fail with --update for non-local clones (Bts:issue3578)
 * commit: normalize filenames when checking explicit files (Bts:issue3576)
 * fileset: actually implement 'minusset'
 * fileset: do not traceback on invalid grep pattern
 * fileset: exclude deleted files from matchctx.existing()
 * fileset: fix generator vs list bug in fast path
 * fileset: matchctx.existing() must consider ignored files
 * fileset: matchctx.existing() must consider unknown files
 * largefiles: adjust localstore to handle batch statlfile requests (Bts:issue3583)
 * merge: handle case when heads are all bookmarks
 * obsolete: import modules within mercurial/ without "from mercurial"
 * revlog: don't try to partialmatch strings with length > 40
 * rollback: write dirstate branch with correct encoding
 * store: only one kind of OSError means "nonexistent entry"
 * store: sort the results of fncachestore.datafiles()
 * strip: fix revset usage (Bts:issue3604)
 * templater: handle a missing value correctly
 * verify: do not choke on valid changelog without manifest
 * wix: bump MSI based installers to use Python 2.7


== Mercurial 2.3 (2012-08-01) ==

This is a regularly-scheduled feature release with numerous improvements and
bugfixes.

=== Core features ===

 * help: add --keyword (-k) for searching help
 * hgweb: side-by-side comparison functionality
 * log: support --graph without graphlog extension
 * push: accept revset argument for --rev
 * merge: bookmarks will no longer automatically merge with unnamed heads or other bookmarks. Instead it picks heads with diverging bookmarks.
 * introduce ChangesetsObsolescence concept ''(experimental)''

 * bookmarks: allow existing remote bookmarks to become heads when pushing
 * bookmarks: pull new bookmarks from remote by default '''(backward incompatible change)'''
 * bookmarks: delete divergent bookmarks on merge
 * bisect: set HG_NODE when runing a command
 * graft: allow -r to specify revisions
 * graft: implement --log (Bts:issue3438)
 * graft: remark on empty graft
 * hooks: print out more information when loading a python hook fails
 * identity: show trailing '+' for dirty subrepos (Bts:issue2839)
 * incoming/outgoing: handle --graph in core
 * merge: warn about file deleted in one branch and renamed in other (Bts:issue3074)
 * Mercurial can now identify third-party extensions as sources of tracebacks
 * outgoing: accept revset argument for --rev
 * performance improvement on branchy repo: incrementaly update branchcache
 * performance improvement on huge file tree: add a C function to pack the dirstate
 * performance improvement for huge .hgignore: process regex with re2 bindings if available
 * revset: add "diff" field to "matching" predicate
 * revset: add "converted" predicate to find converted changesets
 * revset: add "origin" and "destination" predicates, to get graft, transplant or rebase origins or destinations.
 * revset: add "extra" predicate to match changesets extra fields (Bts:issue2767)
 * revset: add pattern matching to "bookmarks/branch/extra/tag/user" predicated

=== Extension features ===

 * acl: use of "!" prefix in user or group names
 * children: mark extension as deprecated
 * convert/svn: handle non-local svn destination paths (Bts:issue3142)
 * convert: accept Subversion 'file:///c%3A/svnrepo' syntax on Windows
 * fetch: mark extension as deprecated
 * graphlog: feature is now into core
 * histedit: new extension for interactive history editing
 * hg-ssh: add read-only flag
 * largefiles: add --all-largefiles flag to pull and clone (Bts:issue3188)
 * largefiles: improve performance by batching statlfile requests when pushing a largefiles repo (Bts:issue3386)
 * largefiles: no longer attempt to clone all largefiles to non-local destinations
 * largefiles: optimize performance when updating (Bts:issue3440)
 * largefiles: support revsets for cat, outgoing --large and revert
 * mq: introduce qpush/qpop/qgoto --keep-changes
 * strip: introduce -B option to remove a bookmark
 * rebase: allow collapsing branches in place (Bts:issue3111)
 * rebase: make --dest understand revsets
 * rebase: drop the infamous --detach option: rebase now behave with --source and --rev as expectable. It may no longer add second parent to rebased changeset '''(backward incompatible change)'''
 * transplant: handle non-empty patches doing nothing (Bts:issue2806)
 * transplant: manually transplant pullable changesets with --log

=== Fixes ===

 * bisect: fix O(n**2) behaviour (Bts:issue3382)
 * bookmarks: fix push of moved bookmark when creating new branch heads
 * case insensitive file system can no longer be confused by `-R` on (Bts:issue2167)
 * copies: one fix related to directory rename detection (Bts:issue3511)
 * convert: check for failed svn import in debugsvnlog and abort cleanly
 * convert: ignore svn:executable for subversion targets without exec bit support
 * convert: keep branch switching merges with ancestors (Bts:issue3340)
 * convert: make filemap renames consistently override revision renames
 * debugrevlog: fix a bug with empty repository (Bts:issue3537)
 * graphlog: don't truncate template value at last \n
 * httprepo: ensure Content-Type header exists when pushing data
 * largefiles: fix a traceback when addremove follows a remove (Bts:issue3507)
 * largefiles: fix a traceback when archiving a subrepo in a subrepo
 * largefiles: fix addremove when largefile is missing (Bts:issue3227)
 * largefiles: fix addremove with -R option
 * largefiles: fix exception hack for i18n (Bts:issue3197)
 * largefiles: fix path handling for cp/mv (Bts:issue3516)
 * largefiles: archive -S now store largefiles instead of standins
 * largefiles: fix hg addremove when already removed largefile exists (Bts:issue3364)
 * merge: do not warn about copy and rename in the same transaction (Bts:issue2113)
 * mq: add ".hgsubstate" to patch target list only if it is not listed up yet
 * mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
 * pager: work around bug in python 2.4's subprocess module (Bts:issue3533):
 * revlog: zlib.error are no longer sent to the user (Bts:issue3424)
 * tag: don't allow tagging the null revision (Bts:issue1915)


== Mercurial 2.2.3 (2012-07-01) ==

This is a regularly-scheduled bugfix release.

 * amend: disable hooks when creating intermediate commit (Bts:issue3501)
 * archive: make progress only show files that are actually archived
 * bookmarks: correctly update current bookmarks on rebase (Bts:issue2277)
 * bugzilla: stop bugs always being marked as fixed in xmlrpc (Bts:issue3484)
 * graft: don't drop the second parent on unsuccessful merge (Bts:issue3498)
 * hgweb: fixes linebreak location in gitweb filediff.tmpl view
 * rebase: improve error message on improper phases
 * record: fix display of non-ASCII names
 * statichttprepo: don't send Range header when requesting entire file
 * strip: update help to state that you can strip public changeset
 * subrepo/svn: make rev number retrieval compatible with svn 1.5 (Bts:issue2968)
 * subrepo: support Git being named "git.cmd" on Windows (Bts:issue3173)
 * subrepo: warn user if Git is not version 1.6.0 or higher
 * update: fix help regarding update to ancestor

== Mercurial 2.2.2 (2012-06-01) ==

This is a regularly-scheduled bugfix release.

 * addremove: document default similarity behavior (Bts:issue3429)
 * alias: inherit command optionalrepo flag (Bts:issue3298)
 * amend: preserve extra dict (Bts:issue3430)
 * bisect: save current state before running a command
 * bugzilla: fix transport initialization on python 2.4
 * build: fix hgrc manpage building with docutils 0.9
 * bundle: make bundles more portable (Bts:issue3441)
 * changelog: ensure that nodecache is valid (Bts:issue3428)
 * hg-ssh: exit with 255 instead of -1 on error
 * hgweb: fix filediff base calculation
 * largefiles: fix "hg status dir" missing regular files (Bts:issue3421)
 * largefiles: fix deletion of multiple missing largefiles (Bts:issue3329)
 * largefiles: follow normal codepath for addremove if non-largefiles repo (Bts:issue3249)
 * largefiles: in putlfile, ensure tempfile's directory exists prior to creation
 * largefiles: use wlock for lfconvert (Bts:issue3444)
 * localrepo: clear _filecache earlier to really force reloading (Bts:issue3462)
 * match: make 'match.files()' return list object always
 * mq: add --no-backup for qpush/qpop/qgoto
 * mq: backup local changes in qpop --force (Bts:issue3433)
 * mq: backup local changes in qpush --force
 * mq: qimport need wlock for --push - do that after releasing lock
 * osutil: handle deletion race with readdir/stat (Bts:issue3463)
 * pager: check if signal.SIGPIPE exists
 * pager: preserve Hg's exit code (and fix Windows support) (Bts:issue3225)
 * pager: remove quiet flag
 * paper, monoblue: link correctly to lines in annotate view
 * parsers: fix refcount bug on corrupt index
 * patch: fix segfault against unified diffs which start line is zero
 * patch: keep patching after missing copy source (Bts:issue3480)
 * posix: workaround lack of TIOCGWINSZ on Irix (Bts:issue3449)
 * revpair: handle odd ranges (Bts:issue3474)
 * revset: explicitely tag alias arguments for expansion
 * revset: fix infinite alias expansion detection
 * revset: fix traceback for bogus revisions in id(rev)
 * revset: make matching() preserve input revision order
 * scmutil: seen.union should be seen.update (Bts:issue3476)
 * subrepo: do not traceback on .hgsubstate parsing errors
 * subrepo: ignore blank lines in .hgsubstate (Bts:issue3424)
 * tag: run commit hook when lock is released (Bts:issue3344)
 * templater: handle !SyntaxError when parsing ui.logtemplate
 * util: fix bad variable use in bytecount introduced by f0f7f3fab315
 * win32: fix encoding handling for registry strings (Bts:issue3467)

== Mercurial 2.2.1 (2012-05-03) ==

This is an unscheduled bugfix release to fix a signficant memory leak in hgweb.

 * bookmarks: catch the proper exception for missing revisions
 * help: add reference to template help (Bts:issue3413)
 * help: added description for the web.collapse setting
 * largefiles: fix commit of both largefiles and non-largefiles (Bts:issue3354)
 * parsers: fix refcount leak, simplify init of index (Bts:issue3417)

== Mercurial 2.2 (2012-05-01) ==

This is a regularly-scheduled feature release. The most notable feature is a new safe '--amend' option for commit using our new [[Phases|phases]] infrastructure. There are also a number of signficant performance improvements for large repositories and improvements for case-folding filesystems. See UpgradeNotes for minor compatibility notes.

=== Core features ===
 * commit: add --amend option
 * fileset: add "subrepo" fileset symbol
 * graft: add --dry-run support (Bts:issue3362)
 * hgweb: add support for branch width and color settings
 * hgweb: add block numbers to diff regions and related links
 * hgweb: support multi-level repository indexes by enabling descend and collapse
 * merge: improve performance with lots of unknown files
 * parsers: incrementally parse the revlog index in C
 * plan9: add support for [[https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs|plan9]]
 * push/pull: improve performance for partial transfers
 * push: decompress in larger chunks for better performance on the server
 * clone: add server config option to prefer uncompressed clone
 * revert: add support for reverting subrepos
 * revset: add "matching" keyword
 * store: speed up read and write of large fncache files
 * ui: optionally quiesce ssl verification warnings on python 2.5

=== Extension features ===

 * bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
 * bugzilla: allow change comment to mark bugs fixed
 * bugzilla: extract optional hours from commit message and update bug time
 * bugzilla: modify access interface to include new bug states
 * graphlog: add all log options to glog command
 * patchbomb: add --body flag to send patches as inline message body text
 * record: allow splitting of hunks by manually editing patches
 * transplant: permit merge changesets via --parent
 
=== Fixes ===
 * alias: fix shell alias documentation (Bts:issue3374)
 * archive: make it work with svn subrepos (Bts:issue3308)
 * branchmap: server should not advertise secret changeset in branchmap (Bts:issue3303)
 * clone: always close source repository (Bts:issue2491)
 * commit: abort on merge with missing files (BC)
 * config: discard UTF-8 BOM if found
 * convert/bzr: convert all branches (Bts:issue3229) (BC)
 * convert/bzr: expect unicode metadata, encode in UTF-8 (Bts:issue3232)
 * convert/bzr: handle empty bzr repositories (Bts:issue3233)
 * convert/bzr: ignore nested repos when listing branches (Bts:issue3254)
 * convert/svn: do not try converting empty head revisions (Bts:issue3347)
 * convert/svn: make svn sink work with svn 1.7
 * convert: support non-annotated tags in git backend
 * dirstate: preserve path components case on renames (Bts:issue3402)
 * export: catch exporting empty revsets (Bts:issue3353)
 * icasefs: make case-folding collision detection rename aware (Bts:issue3370)
 * inotify: catch !SignalInterrupt during shutdown (Bts:issue3351)
 * journal: use tryread helper to backup files (Bts:issue3375)
 * largefiles: fix cat for largefiles (Bts:issue3352)
 * largefiles: fix status -S reporting of subrepos (Bts:issue3231)
 * largefiles: hide .hglf/ prefix for largefiles in hgweb
 * largefiles: notice dirty large files in a subrepo
 * largefiles: only update changed largefiles when transplanting
 * largefiles: optimize update speed by only updating changed largefiles
 * localrepo: add setparents() to adjust dirstate copies (Bts:issue3407)
 * mdiff: fix diff header generation for files with spaces (Bts:issue3357)
 * merge: check for untracked files more precisely (Bts:issue3400)
 * merge: fix unknown file merge detection for case-folding systems
 * patch: be more tolerant with "Parent" header (Bts:issue3356)
 * patch: be more tolerant with EOLs in binary diffs (Bts:issue2870)
 * patch: fix patch hunk/metdata synchronization (Bts:issue3384)
 * phase: when phase cannot be reduced, hint at --force and return 1 (BC)
 * posix: disable cygwin's symlink emulation (BC)
 * posix: ignore execution bit in cygwin (Bts:issue3301)
 * pure/osutil: use Python's msvcrt module (Bts:issue3380)
 * rebase: preserve mq series order, guarded patches (Bts:issue2849)
 * rebase: skip resolved but emptied revisions
 * revset: fix O(n**2) behaviour of bisect() (Bts:issue3381)
 * revset: fix adds/modifies/removes and patterns (Bts:issue3403)
 * revset: fix alias substitution recursion (Bts:issue3240)
 * subrepo/svn: abort on commit with missing file (Bts:issue3029)
 * subrepo/svn: fix checked out rev number retrieval (Bts:issue2968)
 * subrepo: fix default implementation of forget() (Bts:issue3404)
 * subrepo: rewrite handling of subrepo state at commit (Bts:issue2403)
 * templates/filters: extracting the user portion of an email address (BC)
 * transplant: do not rollback on patching error (Bts:issue3379)
 * update: fix case-collision with a clean wd and no --clean
 * update: make --check abort with dirty subrepos
 * update: use normal update path with --check (Bts:issue2450)
 * wireprotocol: use visibleheads as reference while unbundling (Bts:issue 3303)
Regularly scheduled major release. An [[Release6.7|overview of new features]] is available.

== Mercurial 6.6 (2023-11-21) to 6.6.3 (2024-02-12) ==
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

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

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

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

=== hgweb ===
 * 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.8 (2024-07-08) to 6.8.2 (2024-10-28)

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

2. Mercurial 6.7 (2024-03-15) to 6.7.4 (2024-06-12)

/!\ 6.7.1, 6.7.2 and 6.7.3 are affected with a data loss critcal bug.

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

3. Mercurial 6.6 (2023-11-21) to 6.6.3 (2024-02-12)

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

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

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

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

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

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

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

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

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

11. Mercurial 5.8 (2021-05-03)

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

12. Mercurial 5.7.1 (2021-03-08)

Regularly scheduled bug fix release.

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

12.2. core

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

12.3. extensions

  • largefiles: properly pass kwargs into url.open

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

13. Mercurial 5.7 (2021-01-29)

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

14. Mercurial 5.6.1 (2020-12-03)

Regularly scheduled bug fix release.

14.1. extensions

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

14.2. unsorted

  • crecord: render chunkpad on Windows (issue6427)

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

15. Mercurial 5.6 (2020-11-02)

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

16. Mercurial 5.5.2 (2020-10-02)

Regularly scheduled bug fix release.

16.1. commands

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

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

17. Mercurial 5.5.1 (2020-09-01)

Regularly scheduled bug fix release.

17.1. bug fixes

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

18. Mercurial 5.5 (2020-08-03)

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

19. Mercurial 5.4.2 (2020-07-01)

Regularly scheduled bug fix release.

19.1. extensions

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

19.2. unsorted

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

20. Mercurial 5.4.1 (2020-06-15)

Regularly scheduled bug fix release.

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

20.2. core

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

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

21. Mercurial 5.4 (2020-05-01)

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

22. Mercurial 5.3.2 (2020-04-02)

Regularly scheduled bug fix release.

22.1. unsorted

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

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

23. Mercurial 5.3.1 (2020-03-04)

Regularly scheduled bug fix release.

23.1. commands

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

23.2. extensions

  • shelve: fix ordering of merge labels

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

24. Mercurial 5.3 (2020-02-03)

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

25. Mercurial 5.2 (2019-11-05)

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

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

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

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

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

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

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

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

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

26. Mercurial 5.1.2 (2019-10-02)

Regularly scheduled bug fix release.

26.1. extensions

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

26.2. tests

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

27. Mercurial 5.1.1 (2019-09-05)

Regularly scheduled bug fix release.

27.1. commands

  • bookmarks: actual fix for race condition deleting bookmark

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

27.3. tests

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

28. Mercurial 5.1 (2019-08-01)

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

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

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

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

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

28.5. Behavior Changes

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

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

29. Mercurial 5.0.2

A regularly scheduled bugfix release.

29.1. commands

  • Help fixes on hg mv and hg cp

29.2. unsorted

30. Mercurial 5.0.1

A regularly scheduled bugfix release.

30.1. commands

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

30.2. unsorted

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

  • sslutil: fsencode path returned by certifi (issue6132)

31. Mercurial 5.0 (2019-05-01)

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

32. Mercurial 4.9.1 (2019-03-19)

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

32.1. commands

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

32.2. extensions

  • rebase: add missing dashes in help text

32.3. unsorted

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

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

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

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

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

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

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

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

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

34. Mercurial 4.8.2 (2019-01-07)

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

34.1. commands

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

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

34.3. extensions

  • phabricator: properly encode boolean types in the request body

34.4. unsorted

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

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

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

35.2. core

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

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

35.4. unsorted

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

36. Mercurial 4.8 (2018-11-02)

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

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

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

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

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

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

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

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

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

37. Mercurial 4.7.2 (2018-10-01)

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

37.1. security

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

37.2. core

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

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

38. Mercurial 4.7.1 (2018-09-04)

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

38.1. commands

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

38.2. core

  • revlog: fix descendant deprecated method

38.3. hgweb

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

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

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