Differences between revisions 256 and 386 (spanning 130 versions)
Revision 256 as of 2015-04-17 15:54:21
Size: 42491
Editor: GregorySzorc
Comment: move tags cache out of commands section; trim list
Revision 386 as of 2019-03-19 14:29:07
Size: 28909
Comment: by "record" it means ci -i, and there's a better section name for it
Deletions are marked like this. Additions are marked like this.
Line 14: Line 14:
== Mercurial 3.4-rc (2015-04-17) ==
Preliminary release notes for 3.4.
== Mercurial 4.9.1 (2019-03-19) ==

A regularly scheduled bugfix release, late due to vacations and similar disruptions at the regular time.
Line 18: Line 19:
 * annotate: add option to annotate working-directory files
 * annotate: always prepare ancestry context of base fctx (Bts:issue4600)
 * bookmarks: add incoming() to replace diff() for incoming bookmarks
 * bookmarks: add outgoing() to replace diff() for outgoing bookmarks
 * bookmarks: check @pathalias suffix before available @number for efficiency
 * bookmarks: enhance test of showing detail about incoming/outgoing bookmarks
 * bookmarks: prevent divergent bookmark from being updated unexpectedly
 * bookmarks: reuse @number bookmark, if it refers changeset referred remotely
 * bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
 * bookmarks: show detailed status about incoming/outgoing bookmarks
 * clone: add progress support to hardlink clones (Bts:issue3059)
 * commands.import: accept a prefix option
 * commands.push: abort when revisions evaluate to empty set (BC)
 * commands: add ui.statuscopies config knob
 * files: split reusable implementation into cmdutil for subrepo support
 * files: use ctx object to access dirstate
 * graft: allow creating sibling grafts
 * graft: record intermediate grafts in extras
 * import-checker: allow *.pyd based stdlib modules
 * import-checker: fix rotatecycle
 * import-checker: force 'fcntl', 'grp', 'pwd', and 'termios' to stdlib modules
 * import-checker: make search algorithm non-recursive breadth-first
 * import-checker: rotatecycle is actually the canonical cycle key
 * log: display closing-branch nodes as "_" (BC)
 * log: fix --follow null parent not to include revision 0
 * log: make -fr show complete history from the given revs
 * log: prefer 'wctx' over 'pctx' for working context
 * patch.internalpatch: accept a prefix parameter
 * patch.internalpatch: add a default value for prefix
 * patch: rename pathstrip to pathtransform
 * pull: print "pulling from foo" before accessing the other repo
 * push: acquire local 'wlock' if "pushback" is expected (BC) (Bts:issue4596)
 * resolve: silence warning of unknown pats for -l/--list (BC)
 * revert: evaluate filesets against working directory (Bts:issue4497)
 * revert: fix --interactive on local modification (Bts:issue4576)
 * revert: stop marking files clean after interactive revert (Bts:issue4592)
 * status: add relative directory help text (Bts:issue3835)
 * 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
Line 57: Line 55:
 * dirstate: fix order of initializing nf vs f
 * filelog: allow censored files to contain padding data
 * repoview: improve compute staticblockers perf
 * revlog: _addrevision creates full-replace deltas based on censored revisions
 * revlog: add "iscensored()" to revlog public API
 * revlog: addgroup checks if incoming deltas add censored revs, sets flag bit
 * revlog: in addgroup, reject ill-formed deltas based on censored nodes
 * revlog: make converting from inline to non-line work after a strip
 * revlog: special case expanding full-replacement deltas received by exchange
 * tags: establish a separate and shared cache of .hgtags filenodes
 * tags: change format of tags cache files
 * tags: have a different cache file per filter level
 * util: add progress callback support to copyfiles
 * 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
Line 72: Line 70:
 * color: be more conservative about setting ANSI mode on Windows (BC)
 * color: fix crash in cmd.exe
 * color: omit terminfo/win32 warning if non-interactive (Bts:issue4543)
 * color: support a different color mode when the pager is active
 * convert: adjust progress bar for octopus merges (Bts:issue4169)
 * histedit: add --edit-plan option to histedit
 * histedit: allow histedit --continue when not on a descendant (BC)
 * histedit: fix preventing strips during histedit
 * histedit: fix style of new error message
 * histedit: improve roll action integration with fold
 * largefiles: always consider updatelfiles 'checked' parameter set
 * largefiles: avoid infinite recursive call of openlfdirstate in overriderevert
 * largefiles: don't create chain of __contains__ calls
 * largefiles: don't prefix standin patterns with '.hglf' when logging
 * largefiles: don't warn when reverting a forgotten largefile
 * largefiles: extract and reuse 'standin' variable in overriderevert()
 * largefiles: for update -C, only update largefiles when necessary
 * largefiles: handle logging from outside the repo
 * largefiles: introduce lfutil.findstorepath()
 * largefiles: override cmdutil.revert() instead of comands.revert()
 * largefiles: report the source of copied/moved largefiles in status -C
 * largefiles: set the extension as enabled locally after a clone requiring it
 * largefiles: teach log to handle patterns
 * largefiles: update _subdirlfs() comment
 * largefiles: use common function to build content of .hg_archival.txt
 * largefiles: use lfutil.findstorepath() when verifying a local repo
 * largefiles: use the core file copy logic to validate the destination path
 * largefiles: use the share source as the primary local store (Bts:issue4471)
 * rebase: restore bookmark state on abort
 * shelve: acquire lock in the right order
 * shelve: add interactive mode
 * shelve: add interactive mode command line option
 * absorb: don't prompt to apply changes when there are none to apply
 * amend: add -D/--currentdate option
 * amend: add config option to update time to current in hg amend (Bts:issue5828)
 * blackbox: add configitem for format of log timestamps
 * bookflow: new extension for bookmark-based branching
 * convert: don't drop commits that are empty in the source when using --filemap
 * extensions: deprecate extsetup without a 'ui' argument (API)
 * extensions: import the exthelper class from evolve 980565468003 (API)
 * fix: add a config to abort when a fixer tool fails
 * fix: add extra field to fixed revisions to avoid creating obsolescence cycles
 * fix: add suboption for configuring execution order of tools
 * histedit: add rewrite.update-timestamp support to fold and mess
 * histedit: add warning message on editing tagged commits (Bts:issue4017)
 * histedit: drop unused constructor arguments (API)
 * histedit: fix --continue and --abort when curses is enabled
 * histedit: import chistedit curses UI from hg-experimental
 * lfs: improve the hints for common errors in the Batch API
 * logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)
 * logtoprocess: leverage procutil.shellenviron() to stringify variables (BC)
 * narrow: don't resurrect old commits when narrowing (don't strip obsmarkers)
 * narrow: drop the bundle2 capability since we have server capabilities (BC)
 * phabricator: teach {phabreview} to work without --amend
 * phabricator: warn if unable to amend, instead of aborting after posting
 * remotefilelog: fix {file_copies} template keyword
 * remotefilelog: import pruned-down remotefilelog extension from hg-experimental
 * sparse: don't enable on clone if it was a narrow clone
 * strip: compute bookmark target only if we have bookmark to move

=== unsorted ===
 * changegroup: add a option to create bundle with full snapshot only
 * changegroup: allow to force delta to be against p1
 * commandserver: add IPC channel to teach repository path on command finished
 * commandserver: add config knob for various logging options
 * commandserver: add experimental option to use separate message channel
 * commandserver: send raw progress information to message channel
 * filecache: unimplement `__set__`() and `__delete__`() (API)
 * http: allow 'auth.prefix' to have a username consistent with the URI
 * match: support rooted globs in hgignore
 * merge-tools: when calling external merge tool, describe the resolve inputs
 * mergetools: adjust Beyond Compare config on Mac/Linux
 * obsutil: fix the Bts:issue5686
 * progress: deprecate ui.progress()
 * rust-cpython: binding for !AncestorsIterator
 * rust-cpython: binding for !LazyAncestors
 * rust-cpython: bindings for !MissingAncestors
 * sparse-revlog: disable sparse-revlog if config disable general-delta
 * sparse-revlog: enabled by default
 * storage: update sqlitestore to use the new 'deltamode' parameter
 * store: raise !ProgrammingError if unable to decode a storage path
 * subrepo: extend path auditing test to include more weird patterns (SEC)
 * subrepo: prohibit variable expansion on creation of hg subrepo (SEC)
 * subrepo: reject potentially unsafe subrepo paths (BC) (SEC)

=== Behavior Changes ===

 * graft: abort if --date/user specified with --currentdate/currentuser (BC)
 * logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)
 * logtoprocess: leverage procutil.shellenviron() to stringify variables (BC)
 * narrow: drop the bundle2 capability since we have server capabilities (BC)
 * revset: enforce "%d" to be interpreted as literal revision number (API) (BC)
 * revsets: make bookmark/named('re:nonexistent') not abort (Bts:issue6018) (BC)
 * subrepo: reject potentially unsafe subrepo paths (BC) (SEC)

=== Internal API Changes ===

 * extensions: deprecate extsetup without a 'ui' argument (API)
 * extensions: import the exthelper class from evolve 980565468003 (API)
 * filecache: unimplement `__set__`() and `__delete__`() (API)
 * histedit: drop unused constructor arguments (API)
 * revset: enforce "%d" to be interpreted as literal revision number (API) (BC)
 * ui: add config knob to redirect status messages to stderr (API)


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

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

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

=== core ===
 * match: fix assertion for fileset with no context (Bts:issue6046)
 * revlog: catch delta base value under -1
 * revlog: catch revlog corruption in index_baserev
 * server: always close http socket if responding with an error (Bts:issue6033)
 * vfs: ensure closewrapbase fh doesn't escape by entering context manager

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

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


== Mercurial 4.8.1 (2018-12-04) ==

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

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

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

=== extensions ===
 * rebase: abort in-mem rebase if there's a dirty merge state
 * rebase: fix dir/file conflict detection when using in-mem merge
 * rebase: fix path auditing to audit path relative to repo root (Bts:issue5818)
 * rebase: preserve working copy when redoing in-mem rebase on disk

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


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

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

=== commands ===
 * add: add a label for messages about added files
 * addremove: add labels for messages about added and removed files
 * annotate: pass in wdir rev and node to formatter (BC)
 * annotate: rename {line_number} to {lineno} (BC)
 * bookmarks: add explicit option to list bookmarks of the given names
 * bookmarks: pass in formatter to printbookmarks() instead of opts (API)
 * clone: allow local cloning to create more than one level of directories
 * debugcommands: introduce debugrevlogindex (BC)
 * debugcommands: use openstorage() in debugdata (BC)
 * grep: add MULTIREV support to --allfiles flag
 * grep: rename {line_number} to {lineno} as well (BC)
 * grep: search all commits in allfiles mode
 * help: adding a proper declaration for shortlist/basic commands (API)
 * help: adding support for command categories
 * identify: change {parents} to a list of nodes (BC)
 * identify: show remote bookmarks in 'hg id url -Tjson -B'
 * log: have changesetformatter fill in wdir() rev and node (BC)
 * log: respect graphshorten on terminal nodes (collapsing o-~ to just o~)
 * merge: improve interactive one-changed one-deleted message (Bts:issue5550)
 * phase: explicitly exclude secret phase and above
 * phase: expose a '_phase(idx)' revset
 * phase: handle phase with no command flag
 * phase: report number of non-public changeset alongside the new range
 * push: add "remote" to 'repository changed while pushing' messages (Bts:issue5971)
 * remove: add a label for messages about removed files
 * rename: return error status if any rename/copy failed
 * resolve: add a flag for the default behavior of re-merging
 * resolve: add config to make hg resolve not re-merge by default
 * resolve: add confirm config option
 * resolve: add option to warn/abort on -m with unresolved conflict markers
 * resolve: graduate resolve.mark-check from experimental, add docs
 * resolve: rename {status} to {mergestatus} to not shadow change status (BC)
 * status: advertise --abort instead of 'update -C .' to abort a merge
 * status: advertise --abort instead of 'update -C .' to abort graft
 * status: remove "morestatus" message from formatter data (BC)
 * status: rename {copy} to {source} for compatibility with {file_copies} (BC)
 * verify: make output less confusing (Bts:issue5924)

=== core ===
 * context: drop compatibility for 'context.descendant' (API)
 * context: move logic from `changectx.__init__` to `localrepo.__getitem__` (API)
 * context: remove unused overlayfilectx (API)
 * dispatch: don't show list of commands on bogus command
 * dispatch: making all hg abortions be output with a specific label
 * dispatch: show a short error message when invalid global option given
 * exchange: support declaring pull depth
 * exchange: support defining narrow file patterns for pull
 * filelog: add a hasnode() method (API)
 * filelog: drop _generaldelta attribute (API)
 * filelog: drop index attribute (API)
 * filelog: remove checkhash() (API)
 * filelog: remove revdiff() (API)
 * filelog: remove version attribute (API)
 * filelog: stop proxying "opener" (API)
 * filelog: stop proxying _addrevision() (API)
 * filelog: stop proxying checksize() (API)
 * filelog: stop proxying compress() (API)
 * filelog: stop proxying datafile (API)
 * filelog: stop proxying deltaparent() (API)
 * filelog: stop proxying flags() (API)
 * filelog: stop proxying headrevs() (API)
 * filelog: stop proxying rawsize() (API)
 * filelog: stop proxying start(), end(), and length() (API)
 * localrepo: add repository feature when repo can be stream cloned
 * localrepo: add requirement when narrow files creation option present
 * localrepo: automatically load lfs extension when required (BC)
 * localrepo: define "features" on repository instances (API)
 * localrepo: define storage backend in creation options (API)
 * localrepo: move repo creation logic out of `localrepository.__init__` (API)
 * localrepo: pass ui to newreporequirements() (API)
 * localrepo: support marking repos as having shallow file storage
 * localrepo: support writing shared file (API)
 * pager: do not enable when TERM=dumb
 * repository: establish API for emitting revision deltas
 * revlog: add method for obtaining storage info (API)
 * revlog: drop !LookupError alias (API)
 * revlog: drop !RevlogError alias (API)
 * revlog: drop compatibility for 'revlog.descendant' (API)
 * revlog: drop emitrevisiondeltas() and associated functionality (API)
 * revlog: drop some more error aliases (API)
 * revlog: new API to emit revision data
 * revlog: reuse cached delta for identical base revision (Bts:issue5975)
 * revset: expand bookmark(.) to the active bookmark
 * revsetlang: fix position of '-' in spaceless 'a-b' expressions
 * streamclone: don't support stream clone unless repo feature present
 * streamclone: include obsstore file into stream bundle if client can read it
 * templatefuncs: add truncate parameter to pad
 * templatekw: add experimental {status} keyword
 * templatekw: deprecate old-style template keyword function (API)
 * templates: rename "user" to "luser" defined in default map file (API)
 * tracing: new module to make tracing events in hg easier
 * tracing: trace command function execution
 * transaction: make entries a private attribute (API)
 * transaction: remember original len(repo) instead of tracking added revs (API)
 * util: make timedcm require the label (API)
 * wireprotov2: add bookmarks to "changesetdata" command
 * wireprotov2: add phases to "changesetdata" command
 * wireprotov2: client support for advertising redirect targets
 * wireprotov2: client support for following content redirects
 * wireprotov2: define and implement "changesetdata" command
 * wireprotov2: define and implement "filedata" command
 * wireprotov2: define and implement "filesdata" command
 * wireprotov2: define and implement "manifestdata" command
 * wireprotov2: server support for sending content redirects
 * wireprotov2: support response caching

=== extensions ===
 * absorb: import extension from Facebook's hg-experimental
 * absorb: print '{rev}:' as a prefix to the hash
 * absorb: print summary of changesets affected
 * absorb: prompt user to accept absorb changes by default
 * amend: support "history-editing-backup" config option
 * closehead: fix close-head -r listification
 * commitextras: work nicely with other extensions
 * convert: fix a file descriptor leak
 * extension: add a summary of total loading time per extension
 * extensions: add detailed loading information
 * extensions: new closehead module for closing arbitrary heads
 * fastannotate: initial import from Facebook's hg-experimental
 * fastannotate: make the default value for 'fastannotate.useflock' dynamic
 * fix: add a monkey-patchable point after all new revisions have been committed
 * fix: compute changed lines lazily to make whole-file fixer tools faster
 * fix: determine fixer tool failure by exit code instead of stderr
 * fix: pull out flag definitions to make them re-usable from extensions
 * fsmonitor: use vfs instead of opener (Bts:issue5938)
 * journal: do not pass in repolookuperror string to template (BC)
 * journal: unify template name for "nodes" (BC)
 * largefiles: automatically load largefiles extension when required (BC)
 * lfs: add repository feature denoting the use of LFS
 * lfs: autoload the extension when cloning from repo with lfs enabled
 * lfs: consult the narrow matcher when extracting pointers from ctx (Bts:issue5794)
 * lfs: don't add extension to hgrc after clone or share (BC)
 * lfs: don't add extension to hgrc after conversion (BC)
 * logtoprocess: connect all fds to /dev/null to avoid bad interaction with pager
 * logtoprocess: define $HG for children processes
 * narrow: add '--import-rules' flag to tracked command
 * narrow: add a --narrowspec flag to clone command
 * narrow: add narrow and ellipses as server capabilities
 * narrow: add server logic to send cg while widening without ellipsis
 * narrow: check for servers' narrow support before doing anything (BC)
 * narrow: drop support for remote expansion (BC)
 * narrow: introduce a config option to check if narrow is enabled or not
 * narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
 * narrow: move support for 'hg verify' into core
 * narrow: the first version of narrow_widen wireprotocol command
 * narrow: validate spec files are well-formed during clone (BC)
 * patchbomb: allow using HGHOSTNAME to force a hostname
 * phabricator: drop support for the legacy phabricator.auth.token config (BC)
 * phabricator: mark extension as experimental for now
 * rebase: add --stop option to stop rebase at any point (Bts:issue5206)
 * rebase: don't try to prune obsolete changeset already in the destination
 * rebase: explicitly track collapses as fold
 * rebase: skip extinct revisions even if it has no successor in rebase set
 * rebase: support "history-editing-backup" config option
 * remotenames: add names argument to remotenames revset
 * share: allow more than one level of directories to be created
 * shelve: add an "internal" extra
 * shelve: fix crash on unshelve without .shelve metadata file
 * shelve: use the internal phase when possible
 * sqlitestore: file storage backend using SQLite
 * strip: ignore orphaned internal changesets while computing safe strip roots
Line 106: Line 355:
 * hgweb: resurrect <span> tag on diffline to fix rendering in monoblue style
 * hgweb: use introrev() for finding parents (Bts:issue4506)
 * 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
Line 110: Line 367:
 * archive: change the default prefix to `''` from None
 * archive: look for first visible revision to build repo identity (Bts:issue4591)
 * bundle2-localpeer: properly propagate the server output on error (Bts:issue4594)
 * bundle2-wireproto: properly propagate the server output on error (Bts:issue4594)
 * changeset_printer: display p1rev:p1node with "+" suffix for workingctx
 * check-commit: be more picky about detection of wrong bug tag
 * check-commit: check capitalization in summary lines
 * churn: deprecate -t option in favour of -T
 * crecord: fix another underbar
 * crecord: fix underbar style for orig_stdout
 * devel-warn: add a prefix to all messages ("devel-warn: ")
 * dirs._addpath: don't mutate Python strings after exposing them (Bts:issue4589)
 * dispatch: consolidate formatting of ParseErrors
 * dispatch: offer near-edit-distance suggestions for {file,rev}set functions
 * dispatch: offer suggestions of similar-named commands
 * extensions: support callbacks after another extension loads
 * get-with-headers: support parsing and pretty printing JSON
 * graphlog: do not bypass commands.log so that -fr works
 * graphlog: move comment and flag denoting revs might be unsorted
 * graphlog: remove too early return from getgraphlogrevs() for empty repo
 * lazymanifest: fix memory leak in lmiter_iterentriesnext() after 3d485727e45e
 * lazymanifest: fix pure hg iterkeys()
 * linkrev: fix issue with annotate of working copy
 * manifestv2: add support for reading new manifest format
 * manifestv2: add support for writing new manifest format
 * obsolete: avoid infinite loop from obs-cycle in divergence (Bts:issue4126)
 * record: add interactive option to the commit command
 * record: allow editing new files (Bts:issue4304)
 * record_curses: fix ui bug for newly added file
 * revbranchcache: add test for when the cache is not writable
 * revbranchcache: move out of branchmap onto localrepo
 * revbranchcache: populate cache incrementally
 * revbranchcache: store repo on the object
 * revbranchcache: write cache even during read operations
 * revrange: don't parse revset aliases as hash prefixes (Bts:issue4553)
 * rollback: clear resolve state (Bts:issue4593)
 * ssl: resolve symlink before checking for Apple python executable (Bts:issue4588)
 * ssl: set explicit symbol "!" to web.cacerts to disable SSL verification (BC)
 * strip: properly clear resolve state with --keep (Bts:issue4593)
 * subrepo: add 'cat' support for git subrepos
 * subrepo: add basic support to hgsubrepo for the files command
 * subrepo: add include/exclude support for diffing git subrepos
 * subrepo: add status support for ignored and clean files in git subrepos
 * subrepo: change arguments of abstractsubrepo.__init__ (API)
 * subrepos: support adding files in git subrepos
 * test-convert-git: show insane progress bar with octopus merge (Bts:issue4169)
 * test-histedit-edit.t: demonstrate qnew fails during a histedit (Bts:issue4366)
 * test-https: enable dummycert test only if Apple python is used (Bts:issue4500)
 * test-shelve: be more lenient about whitespace (Bts:issue4124)
 * tests: add test showing tags cache drops filtered heads (Bts:issue4550)
 * tests: handle deleted .hg directory (git 2.2.0 and higher) (Bts:issue4585)
 * trydiff: join filename with prefix only once
 * unbundle: acquire 'wlock' when processing bundle2 (BC) (Bts:issue4596)
 * webcommands: define a dict of available commands
 * webcommands: define web commands using a decorator

 * color: be more conservative about setting ANSI mode on Windows (BC)
 * commands.push: abort when revisions evaluate to empty set (BC)
 * histedit: allow histedit --continue when not on a descendant (BC)
 * log: display closing-branch nodes as "_" (BC)
 * push: acquire local 'wlock' if "pushback" is expected (BC) (Bts:issue4596)
 * resolve: silence warning of unknown pats for -l/--list (BC)
 * ssl: set explicit symbol "!" to web.cacerts to disable SSL verification (BC)
 * unbundle: acquire 'wlock' when processing bundle2 (BC) (Bts:issue4596)

 * subrepo: change arguments of abstractsubrepo.__init__ (API)

== Mercurial 3.3.3 (2015-04-01) ==
This is a regularly-scheduled bugfix release.

 * adjustlinkrev: handle 'None' value as source
 * adjustlinkrev: prepare source revs for ancestry only once
 * amend: check for directory renames for both merge parents (Bts:issue4516)
 * annotate: reuse ancestry context when adjusting linkrev (Bts:issue4532)
 * dirstate: don't require exact case when adding dirs on icasefs (Bts:issue4578)
 * dirstate: make sure rootdir ends with directory separator (Bts:issue4557)
 * filemerge: clean up language in mergemarkertemplate help
 * forget: cleanup the output for an inexact case match on icasefs
 * hgweb: prevent loading style map from directories other than specified paths
 * mergecopies: reuse ancestry context when traversing file history (Bts:issue4537)
 * templates: fix "log -q" output of default style
 * templates: fix "log -q" output of phases style
 * win32: 'raise ctypes.WinError' -> 'raise ctypes.WinError()'

== Mercurial 3.3.2 (2015-03-02) ==
An unscheduled bugfix release to fix the fix.

 * transaction: really disable hardlink backups (Bts:issue4546)

== Mercurial 3.3.1 (2015-03-02) ==
This is a regularly scheduled bugfix release. It fixes a significant regression with transactions on Windows network shares.

 * dispatch: work around !UnicodeDecodeError caused by SSLError of Python 2.7.9
 * hgweb: recreate old DOM structure for css in monoblue style
 * largefiles: access to specific fields only if largefiles enabled (Bts:issue4547)
 * log: fix json-formatted output when file copies are listed (Bts:issue4523)
 * repoview: invalidate cached changelog if _delayed changes (Bts:issue4549)
 * revisionbranchcache: fall back to slow path if starting readonly (Bts:issue4531)
 * revset: mask specific names for named() predicate
 * shellquote: fix missing quotes for empty string
 * templatekw: fix {join(bookmarks, sep)} to always show associated bookmarks
 * transaction: disable hardlink backups (Bts:issue4546)

== Mercurial 3.3 (2015-02-01) ==
This is a regularly scheduled feature release with over 800 changes.
 * 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:
Line 217: Line 520:
 * add: add back forgotten files even when not matching exactly (BC)
 * addremove: add back forgotten files (BC)
 * addremove: add support for the -S flag
 * addremove: print relative paths when called with -I/-X (BC)
 * addremove: support addremove with explicit paths in subrepos
 * backout: add --commit option
 * commit: abort if --addremove is specified, but fails
 * commit: remove reverse search for copy source when not in parent (Bts:issue4476)
 * commit: propagate --addremove to subrepos if -S is specified (Bts:issue3759)
 * graft: show more useful status information while grafting
 * merge: do not delete untracked files silently (Bts:issue5962)
Line 229: Line 523:
 * bundles: do not overwrite existing backup bundles (BC)
 * osx: patch .pax.gz files in pkg bundles so they extract as root (Bts:issue4081)
 * revset: handle hidden linkrev for file missing for head (Bts:issue4490)
 * revset: allow rev(-1) to indicate null revision (BC)
 * revset: fix ancestors(null) to include null revision (Bts:issue4512)
 * subrepo: don't abort in add when non-hg subrepos are present (Bts:issue4513)
 * cmdserver: use given streams as pipe channels like other commands
 * extensions: only check compatibility against major and minor versions (BC)
 * https: support tls sni (server name indication) for https urls (Bts:issue3090)
 * ignore: resolve ignore files relative to repo root (Bts:issue4473) (BC)
 * linkrev: handle filtered linkrev with no visible children (Bts:issue4307)
 * linkrev: also adjust linkrev when bootstrapping annotate (Bts:issue4305)
 * linkrev: use the right manifest content when adjusting linrev (Bts:issue4499)
 * memctx: calculate manifest correctly with newly-removed files (Bts:issue4470)
 * memctx: fix manifest for removed files (Bts:issue4470)
 * obsstore: disable garbage collection during initialization (Bts:issue4456)
 * subrepo: support remove with explicit paths in subrepos
 * subrepo: add full revert support for git subrepos
 * subrepo: add partial diff support for git subrepos
 * subrepo: add status support for ignored files in git subrepos
 * win32: remove Mercurial.ini file from Inno Setup installer (Bts:issue4435)
 * revlog: fix descendant deprecated method
Line 252: Line 526:
 * hgweb: allow viewing diffs against p1 or p2 for merge commits (Bts:issue3904)

=== extensions ===
 * color: add support for colorizing git subrepo diffs
 * color: add missing 'dim' in _effects
 * convert: on svn failure, note libsvn version (Bts:issue4043)
 * convert: replace revision references in messages if they are >= short hashes
 * convert: handle !LookupError in mercurial_source.lookuprev()
 * extdiff: reintroduce backward compatibility with manual quoting of parameters
 * histedit: add a test to show that issue4251 is fixed (Bts:issue4251)
 * largefiles: fix commit of a directory with no largefile changes (Bts:issue4330)
 * largefiles: use 'default' path for pulling largefiles, not 'default-push'
 * largefiles: enable subrepo support for add, forget, remove
 * largefiles: show progress when checking standin hashes in outgoing changesets
 * mq: smarter handling of plain headers
 * patchbomb: don't honor whitespace and format-changing diffopts (BC)
 * rebase: show more useful status information while rebasing
 * rebase: ensure rebase revision remains visible (Bts:issue4504)
 * extdiff: avoid unexpected quoting arguments for external tools (Bts:issue4463)
 * highlight: ignore Unicode's extra linebreaks (Bts:issue4291)
 * record: don't honor format-changing diffopts (Bts:issue4459)
 * share: add option to share bookmarks
 * transplant: properly skip empty changeset (Bts:issue4423)

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

 * demandimport: blacklist distutils.msvc9compiler (Bts:issue4475)
 * largefiles: backout f72d73937853 - linear updates handle m -> a differently
 * largefiles: fix a spurious missing file warning with 'remove -A' (Bts:issue4053)
 * largefiles: fix a spurious missing file warning with forget (Bts:issue4053)
 * largefiles: introduce the 'composelargefilematcher()' method
 * largefiles: mark lfile as added in lfdirstate when the standin is added
 * sshpeer: more thorough shell quoting

== Mercurial 3.2.3 (2014-12-18) ==
This is an unscheduled bugfix release containing two security fixes for issues we uncovered in both Git and Mercurial for CVE-2014-9390. Users on Mac and Windows are encouraged to upgrade.

 * context: stop setting None for modified or added nodes
 * darwin: omit ignorable codepoints when normcase()ing a file path
 * encoding: add hfsignoreclean to clean out HFS-ignored characters
 * largefiles: don't actually remove largefiles in an addremove dry run
 * log: fix log -f slow path to actually follow history
 * log: fix log revset instability
 * manifest: disallow setting the node id of an entry to None
 * pathauditor: check for Windows shortname aliases
 * pathauditor: check for codepoints ignored on OS X
 * rebase: ignore negative state when updating back to original wc parent
 * update: add tests for untracked local file
 * update: don't overwrite untracked ignored files on update

== Mercurial 3.2.2 (2014-12-01) ==
This is a regularly-scheduled bugfix release.

 * changegroup: fix file linkrevs during reorders (Bts:issue4462)
 * hgweb: send proper HTTP response after uncaught exception
 * largefiles: avoid exec-bit examination on the platforms unaware of it
 * largefiles: don't show largefile/normal prompts if one side is unchanged
 * manifest: fix a bug where working copy file 'add' mark was buggy
 * merge: be precise about what merged into what in short desc
 * merge: before cd/dc prompt, check that changed side really changed
 * mq: fix update of headers that occur in the "wrong" order
 * mq: introduce insertplainheader - same naive implementation as before
 * mq: when adding headers in plain mode, separate them from message (Bts:issue4453)
 * mq: when setting message in plain mode, separate it from header (Bts:issue4453)
 * push: stop independent usage of bundle2 in syncphase (Bts:issue4454)
 * pushkey: gracefully handle prepushkey hook failure (Bts:issue4455)
 * rename: properly report removed and added file as modified (Bts:issue4458)
 * revert: look for copy information for all local modifications
 * revset: fix first and last for generatorset (Bts:issue4465)
 * templates: fix broken "less" & "more" links in paper style (Bts:issue4460)

== Mercurial 3.2.1 (2014-11-11) ==
This is an unscheduled release to address regressions in discovery, rebase, and bookmarks.

 * bookmarks: fix formatting of exchange message (Bts:issue4439)
 * changegroup: don't store unused value on fnodes (Bts:issue4443)
 * convert: use git diff-tree -Cn% instead of --find-copies=n% for older git
 * discovery: indices between sample and yesno must match (Bts:issue4438)
 * discovery: limit 'all local heads known remotely' to real 'all' (Bts:issue4438)
 * extdiff: quote user-supplied options passed to shell
 * hgweb: fix a crash when using web.archivesubrepos
 * mail: actually use the verifycert config value
 * rebase: fix rebase with no common ancestors (Bts:issue4446)
 * serve: correct meta variable of --daemon-pipefds option
 * templater: don't overwrite the keyword mapping in runsymbol() (Bts:issue4362)

== Mercurial 3.2 (2014-11-01) ==
This is a quarterly feature release.

=== commands ===
 * amend: abort early if no username is configured with evolve enabled (Bts:issue4211)
 * amend: fix amending rename commit with diverged topologies (Bts:issue4405)
 * annotate: rewrite long short-circuit statement by if-elif-else
 * bookmark: make the search for divergent names more robust
 * bookmarks: allow pushkey if new equals current
 * bookmarks: explicitly track identical bookmarks
 * bookmarks: fix divergent bookmark path normalization
 * bookmarks: inform transaction-related hooks that some bookmarks were moved
 * branches: include active, closed and current flags in template output
 * clone: copy '.hg/bookmarks' during copy clone
 * clone: explicitly push bookmarks when cloning from local to remote
 * clone: fix copying bookmarks in uncompressed clones (Bts:issue4430)
 * clone: for local clones, copy branchcache from the right location (Bts:issue4286)
 * clone: for local clones, copy over filtered branchcaches as well (Bts:issue4286)
 * clone: properly mark branches closed with --uncompressed (Bts:issue4428)
 * clone: provide sample username = config entry in .hg/hgrc (Bts:issue4359)
 * commit: correctly check commit mutability during commit --amend
 * commit: add customizable committemplate config
 * config: give more fine-tuned sample hgrcs to this command
 * config: highlight parse error caused by leading spaces (Bts:issue3214)
 * files: add new command unifying locate and manifest functionality
 * graft: allow regrafting ancestors with --force (Bts:issue3220)
 * graft: make --force apply across continues (Bts:issue3220)
 * help: document that default hgweb style is called paper (Bts:issue4373)
 * help: update help for hgweb template and style (Bts:issue4373)
 * import: let --exact 'work' with --no-commit (Bts:issue4376)
 * locate: deprecate in favor of files
 * log: allow patterns with -f
 * log: do not hide the public phase in debug mode (BC)
 * log: rewrite default template to use labels (Bts:issue2866)
 * log: show phase in hg log -v with the phase template
 * merge-tools: add a 'premerge=keep-merge3' config option
 * merge: use bid merge by default (BC)
 * merge: support three labels when using conflict markers
 * parents: deprecate the parents commands
 * pull: perform bookmark updates in the transaction
 * push: update bookmarks within the remote lock
 * push: wrap local phase movement in a transaction
 * pushbookmark: do not attempt to update bookmarks if the push failed (BC)
 * status: make 'hg status --rev' faster when there are deleted files
 * tag: properly abort if an unknown or ignored .hgtags is present

=== core ===
 * alias: expand "$@" as list of parameters quoted individually (BC) (Bts:issue4200)
 * dirstate: add exception when calling setparent without begin/end (API)
 * dirstate: wrap setparent calls with begin/endparentchange (Bts:issue4353)
 * hook: protect commit hooks against stripping of temporary commit (Bts:issue4422)
 * i18n: detect UI language without POSIX-style locale variable on Windows (BC)
 * localrepo: remove the 'pull' method (API)
 * localrepo: remove the 'push' method (API)
 * posix: implement readpipe using non-blocking I/O (Bts:issue4336)
 * revset: fix O(2^n) perf regression in addset
 * revset: have rev() drop out-of-range or filtered rev explicitly (Bts:issue4396)
 * setdiscovery: limit the size of all sample (Bts:issue4411)
 * ssl: only support TLS (BC)
 * ssl: only use the dummy cert hack if using an Apple Python (Bts:issue4410)
 * templater: fix ifcontains when list is a string (Bts:issue4399)

=== extensions ===
 * convert: add support for deterministic progress bar on scanning phase
 * convert: add support to detect git renames and copies
 * eol: fix crash when handling removed files
 * histedit: add "roll" command to fold commit data and drop message (Bts:issue4256)
 * largefiles: add examination of exec bit in "hg status --rev REV" case
 * largefiles: keep largefiles from colliding with normal one during linear merge
 * largefiles: restore R status of removed largefiles correctly at "hg rollback"
 * largefiles: restore standins from non branch-tip parent at rollback correctly
 * largefiles: unlink standins not known to the restored dirstate at rollback
 * mq: write '# Parent ' lines with two spaces like export does (BC)
 * mq: write headers for new HG patches in the same order as export (BC)
 * shelve: don't delete "." when rebase is a no-op (Bts:issue4398)

=== hgweb ===
 * hgweb: disable SSLv3 serving (BC)
 * hgweb: refresh repository using URL not path (Bts:issue4323)

== Mercurial 3.1.2 (2014-10-01) ==
This is a regularly-scheduled bugfix release.

 * commit: catch changed exec bit on files from p1 (Bts:issue4382)
 * diff: document the nobinary option
 * dispatch: check shell alias again after loading extensions (Bts:issue4355)
 * dispatch: make "_checkshellalias" reusable regardless of adding aliases
 * help: fix typo in log examples
 * help: mention mode in hg log --removed help (Bts:issue4381)
 * hgweb: fail if an invalid command was supplied in url path (Bts:issue4071)
 * hgweb: refresh hgweb.repo on phase change (Bts:issue4061)
 * histedit: abort gracefully on --continue/--abort with no state
 * keepalive: fix how md5 is used
 * mq: examine "pushable" of already applied patch correctly
 * mq: pop correct patches when changing pushable-ness of already applied ones
 * mq: report correct numbers for changing "number of guarded, applied patches"
 * mq: use "mq.applied[i].name" instead of "mq.appliedname(i)" for safety
 * revset: add an optimised baseset.__contains__ (Bts:issue4371)
 * templater: fix precedence of --style and --template options

== Mercurial 3.1.1 (2014-09-01) ==
This is a regularly-scheduled bugfix release.

 * changectx: ancestor should only prefer merge.preferancestor if it is a revision
 * color: pass on key error for win32 (Bts:issue4298)
 * config: exit non zero on non-existent config option (Bts:issue4247)
 * context: call normal on the right object
 * debugobsolete: catch !ValueError that may be raised by obsstore.create
 * discovery: prevent crash on unknown remote heads with old repo (Bts:issue4337)
 * graft: fix collision detection with origin revisions that are missing
 * help: add pad function to template help
 * help: only call doc() when it is callable
 * hgweb: avoid config object race with hgwebdir (Bts:issue4326)
 * histedit: preserve initial author on fold (Bts:issue4296)
 * import: show warning message for merge changesets
 * incoming: don't request heads that already are common
 * largefiles: don't override matchandpats for always matchers (Bts:issue4334)
 * largefiles: drop setting lfstatus in overridelog (Bts:issue4334)
 * largefiles: in overridelog, use non-lf matcher for patch generation (Bts:issue4334)
 * log: use correct phase info for parent field (Bts:issue4347)
 * merge: show the scary multiple ancestor hint for merges only, not for updates
 * obsstore.create: add a simple safeguard against cyclic markers
 * repoview: filter tags to non-existent nodes from blockers (Bts:issue4328)
 * repoview: fix typo in repoview.changelog
 * revset: bookmark revset interprets 'literal:' prefix correctly (Bts:issue4329)
 * unbundle: don't advance bookmarks (Bts:issue4322) (BC)

== Mercurial 3.1 (2014-08-01) ==
=== Core features ===
 * backout: accept '--edit' like other commands creating new changeset
 * bookmarks: improve the bookmark help (Bts:issue4244)
 * commit: make commit message shown in text editor customizable by template
 * config: allow 'user' in .hgrc ui section (Bts:issue3169)
 * conflict markers: customise local/other name for various command (graft, update, rebase, ...) (BC)
 * diff: add nobinary config to suppress git-style binary diffs
 * discovery: if a push would create a new head, mention the bookmark name if any
 * filemerge: add an internal:tagmerge merge tool
 * filemerge: add a `[ui] mergemarkers` option to use detailed merge marker.
 * gpg: accept '--edit' like other commands creating new changeset
 * help: suggest keyword search when no topic is found
 * import: add --partial flag to create a changeset despite failed hunks
 * resolve: print message when no unresolved files remain (Bts:issue4214)
 * resolve: print warning when no work performed (Bts:issue4208)
 * templatefilter: add splitlines function
 * templatekw: add 'currentbookmark' keyword to show current bookmark easily
 * templatekw: add 'subrepos' keyword to show updated subrepositories
 * templater: introduce startswith function
 * templater: introduce word function
 * templates: escape NUL bytes in jsonescape (Bts:issue4303)
 * update: introduce --tool for controlling the merge tool
 * update: show message when a bookmark is activated by update
 * update: when deactivating a bookmark, print a message
 * version: show enabled extensions (Bts:issue4209)

=== Extension features ===
 * convert: detect removal of ".gitmodules" at git source revisions correctly
 * convert: drastically speed up git conversions
 * convert: mercurial source: convert global tags only - not local tags
 * convert: only consider shamap revisions converted if they still exists
 * convert: update the transplant, rebase and graft references in 'extra'
 * largefiles: show also how many data entities are outgoing at "hg outgoing"
 * mergetools.hgrc: add minimal configuration for editmerge
 * pager: add attend-<command> option
 * patchbomb: includes series information in the header
 * purge: add options for deleting only files or only directories
 * qfold: allow to specify '--message/'--logfile' and '--edit' at the same time
 * qimport: record imported revs incrementally (Bts:issue3874)
 * qrefresh: allow to specify '--message/'--logfile' and '--edit' at the same time
 * shelve: accept '--edit' like other commands creating new changeset
 * shelve: add -l|--list support for bash completion
 * strip: drop -b/--backup option (BC)

=== Fixes ===
 * bookmarks: avoid deleting primary bookmarks on rebase
 * branch: add debug message for branch cache write failure
 * bugzilla extension: stop trying to cache setup across hook invocation
 * filemerge: use non-minimal conflict marker regions (BC)
 * help: always show command help with -h (Bts:issue4240)
 * histedit: respect revsetalias entries (Bts:issue4311)
 * largefiles: avoid unnecessary creation of .hg/largefiles when opening lfdirstate
 * largefiles: include largefiles when doing log on a directory (Bts:issue4241)
 * largefiles: use "normallookup", if "mtime" of standin is unset
 * log: allow revset for --follow to be lazily evaluated
 * log: do not use exact matcher for --patch --follow without file (Bts:issue4319)
 * log: make --patch --follow work inside a subdirectory
 * p4: accept changesets with no description (Bts:issue4282)
 * resolve: keep wlock while resolving
 * revset: maintain ordering when subtracting from a baseset (Bts:issue4289)
 * revset: optimize baseset.__sub__ (Bts:issue4313)
 * strip: remove bookmarks after strip succeed (Bts:issue4295)
 * vim: use try catch in vim plugin to avoid conflicts

=== Experimental features ===
 * bundle2: add pushkey support
 * bundle2: fix bundle2 pulling all revs on empty pulls
 * bundle2: pull phase data alongside changesets (when enabled)
 * bundle2: use bundle2 to push phases (when enabled)

=== Mercurial project ===
 * build: initial support for in-tree autobuilding recipes
 * buildrpm: include release version in .tar.gz name
 * make: add a basic osx mpkg target
 * packaging: move output directory from build/ to packages/
 * setup: fixed for Pythons which don't have a CFLAGS
 * setup: make Xcode 5.1 check less specific

== Mercurial 3.0.2 (2014-07-01) ==
This is a regularly-scheduled bugfix release.

 * cmdutil: add copy-filtering support to duplicatecopies
 * hgweb: avoid initialization race (Bts:issue4280)
 * keyword: suppress keyword expansion for internal merge
 * match: make glob '**/' match the empty string
 * parsers.c: fix a couple of memory leaks
 * push: restore contents of HG_URL for hooks (Bts:issue4268)
 * rebase: fix bug that caused transitive copy records to disappear (Bts:issue4192)
 * repoview: do not crash when localtags refers to non existing revisions

== 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
 * 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 4.9.1 (2019-03-19)

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

1.1. commands

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

1.2. extensions

  • rebase: add missing dashes in help text

1.3. unsorted

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

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

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

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

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

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

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

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

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

3. Mercurial 4.8.2 (2019-01-07)

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

3.1. commands

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

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

3.3. extensions

  • phabricator: properly encode boolean types in the request body

3.4. unsorted

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

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

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

4.2. core

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

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

4.4. unsorted

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

5. Mercurial 4.8 (2018-11-02)

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

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

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

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

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

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

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

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

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

6. Mercurial 4.7.2 (2018-10-01)

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

6.1. security

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

6.2. core

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

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

7. Mercurial 4.7.1 (2018-09-04)

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

7.1. commands

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

7.2. core

  • revlog: fix descendant deprecated method

7.3. hgweb

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

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

8. 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-03-29 20:39:30 by RaphaelGomes)