Mercurial Changelog

What's new in Mercurial 5.2

Nov 28, 2019
  • Backwards Compatibility Changes:
  • * The infinitepush extension is believed to be unused, and will be deleted at the end of 2020 unless users contact [email protected].
  • * 'hg grep' now searches working copy file contents by default. We recognize this is a significant change from past behavior, but surveys of large bodies of users indicated nobody used (and almost nobody understood) the previous no-flags behavior of 'hg grep'. The new behavior aligns with the behavior most users expected (including hg's maintainers), which also happens to be the behavior of 'git grep'. Given that the old behavior was confusing to the point of being unusable, we were comfortable changing this behavior.
  • API Changes:
  • * 'mercurial.hg.update*' and 'mercurial.merge.update' now expect a value from a set of NAMED_CONSTANTS ('merge.UPDATECHECK_*' constants) rather than a collection of magic strings. As of now, the values are the same, but code should be prepared for these values to change in the future.
  • * 'mercurial.hg.updatetotally' is now more thorough about checking its
  • 'updatecheck' keyword argument. Previously invalid values would have used
  • the configured default updatecheck method, but now will raise ValueError.
  • * 'mercurial.bookmarks.bmstore' no longer has a convenience method for looking up changectx instances from a bookmark name. Use 'repo[repo.bookmarks[name]]' intead of 'repo.bookmarks.changectx(name)'.
  • commands:
  • amend: add option to update to the current user
  • amend: enable support for closing the branch
  • amend: enable support for using the secret phase
  • bookmarks: actual fix for race condition deleting bookmark
  • bookmarks: remove changectx() method from bmstore (API)
  • branchmap: explicitly warm+write all subsets of the branchmap caches
  • import: add debug messages when parsing data from patch header
  • import: read X-Mercurial-Node email header to determine nodeid
  • log: populate keywords if specified in custom -Tjson(...) or -Tcbor(...)
  • merge: replace magic strings with NAMED_CONSTANTS (API)
  • push: support config option to require revs be specified when running push
  • core:
  • exchange: abort on pushing bookmarks pointing to secret changesets (issue6159)
  • exchange: avoid unnecessary conversion of bookmark nodes to hex (API)
  • revlog: add a 'sidedata' parameters to addrevision
  • revlog: add a way to control sidedata changes during revlog.clone
  • revlog: add the appropriate flag is sidedata are passed to 'addrevision'
  • revlog: assign rawtext earlier in '_revisiondata'
  • revlog: avoid caching raw text too early in _revisiondata
  • revlog: deprecate the use of 'revision(..., raw=True)'
  • revlog: drop silly 'raw' parameter to 'rawdata' function
  • revlog: explicitly set revlogv0 in vfs options
  • revlog: introduce a 'sidedata' method
  • revlog: move 'nullid' early return sooner in '_revisiondata'
  • revlog: return sidedata map from '_revisiondata'
  • revlog: stop calling 'basetext' 'rawtext' in _revisiondata
  • revlog: stop using '_processflags' directly
  • revlog: use the new sidedata map return in the sidedata method
  • templatefuncs: account for user's diffopts in diff() (BC)
  • ui: option to preserve the progress bar
  • extensions:
  • eol: don't fallback to use .hgeol from tip (BC)
  • largefiles: use context manager for setting "lfstatus" on subrepos too
  • rebase: track new nodes when --keep is set
  • unshelve: abort on using --keep and --interactive together
  • unshelve: add abort on using continue and interactive together
  • unshelve: changes how date is set on interactive mode
  • unshelve: create a matcher only if required on creating unshelve ctx
  • unshelve: delete shelvedstate after a successful unshelve --continue
  • unshelve: forget unknown files after a partial unshelve
  • unshelve: handle stripping changesets on interactive mode
  • unshelve: store information about interactive mode in shelvedstate
  • unshelve: unify logic around creating an unshelve changeset
  • unsorted:
  • automation: add a command to submit to a Try server
  • automation: support and use Debian Buster by default
  • changelog: make copies related function return None or a valid value
  • continue: added support for transplant
  • copies: remove existing copy info from the changeset on amend (BC)
  • demandimport: explicitly declare '_session' at the module level
  • discovery: replace "heads" by "changesets" in a output note (BC)
  • fastannotate: remove support for flock() locking
  • fix: warn when a fixer doesn't have a configured command
  • flagprocessors: deprecate _processflags
  • flagprocessors: have the read transform function return side data (API)
  • flagprocessors: writetransform function take side data as parameter (API)
  • flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)
  • flagutil: move addflagprocessor to the new module (API)
  • flagutil: move insertflagprocessor to the new module (API)
  • format: format commands.py, which recently regressed
  • grep: enable all-files by default (BC)
  • hg: have 'updatetotally' more thoroughly check updatecheck argument (API)
  • infinitepush: mark extension as likely to be deleted
  • narrow: don't hexify paths and double-hexify known nodes on wire (BC)
  • narrow: drop server support for widening using the getbundle command (BC)
  • notify: add option for deterministic message-id generation
  • py3: prevent comparison with None in curses histedit (issue6196)
  • python-zstandard: apply big-endian fix (issue6188)
  • remotefilelog: reduce probability of race-condition in remotefilelog tests
  • rust-dirstate-status: add call to rust-fast path for 'dirstate.status'
  • rust-dirstate-status: rust-cpython bindings for 'dirstate.status'
  • rust-dirstate-status: use fast-path even with fsmonitor and sparse extensions
  • rust-discovery: optionally don't randomize at all, for tests
  • sidedata: introduce a new requirement to protect the feature
  • split: handle partial commit of renames when doing split or record (issue5723)
  • sshserver: flush stream after command dispatch
  • test: allow different result for zstd compression (issue6188)
  • transplant: added support for --stop flag
  • uncommit: add options to update to the current user or current date
  • uncommit: add support to modify the commit message and date
  • uncommit: drop the hyphen from --current-user and --current-date
  • uncommit: enable support for adding a note
  • uncommit: make -D/--date and -U/--user mutually exclusive
  • Behavior Changes:
  • copies: remove existing copy info from the changeset on amend (BC)
  • discovery: replace "heads" by "changesets" in a output note (BC)
  • eol: don't fallback to use .hgeol from tip (BC)
  • grep: enable all-files by default (BC)
  • narrow: don't hexify paths and double-hexify known nodes on wire (BC)
  • narrow: drop server support for widening using the getbundle command (BC)
  • templatefuncs: account for user's diffopts in diff() (BC)
  • Internal API Changes:
  • bookmarks: remove changectx() method from bmstore (API)
  • exchange: avoid unnecessary conversion of bookmark nodes to hex (API)
  • flagprocessors: have the read transform function return side data (API)
  • flagprocessors: writetransform function take side data as parameter (API)
  • flagutil: move REVIDX_KNOWN_FLAGS source of truth in flagutil (API)
  • flagutil: move addflagprocessor to the new module (API)
  • flagutil: move insertflagprocessor to the new module (API)
  • hg: have 'updatetotally' more thoroughly check updatecheck argument (API)
  • merge: replace magic strings with NAMED_CONSTANTS (API)

New in Mercurial 5.1.2 (Oct 9, 2019)

  • extensions:
  • phabricator: don't abort if property writing fails during amending
  • tests:
  • test: allow different result for zstd compression (issue6188)

New in Mercurial 5.1 (Aug 19, 2019)

  • commands:
  • bookmark: also make bookmark cache depends of the changelog
  • bookmarks: actual fix for race condition deleting bookmark
  • bookmarks: actually trigger the race deleting bookmark in the test
  • bookmarks: backout the attempt to fix the delete race
  • bookmarks: keep bookmarks in .hg/store if new config set
  • bookmarks: use context manager when writing files
  • bookmarks: use correct store for "ambiguity check"
  • branch: abort if closing branch from a non-branchhead cset
  • branchcache: store the maximum tip in a variable inside for loop
  • commands: drop support for legacy ^cmd registration (API)
  • commit: add --force-close-branch flag to close a non-head changeset
  • commit: add a check if it is trying to close an already closed branch head
  • commit: add ability to print file status after each successful invocation
  • commit: allow --interactive to work again when naming a directory (issue6131)
  • commit: improve the files field of changelog for merges
  • commit: make the error message more specific while aborting branch closing
  • commit: respect --no-edit in combination with --amend
  • graft: moved abortgraft and readgraft to cmdutil
  • help: check if a subtopic exists and raise an error if it doesn't (issue6145)
  • log: add config for making 'hg log -G' always topo-sorted
  • log: flag topo-sorted set as such
  • log: pass getcopies() function instead of getrenamed() to displayer (API)
  • merge: disallow merge abort in case of an unfinished operation (issue6160)
  • patch: use a short, fixed-size message for last line of prompt (issue6158)
  • push: added clear warning message when pushing closed branches(issue6080)
  • tags: avoid double-reversing a list
  • verify: also check full manifest validity during verify runs
  • verify: introduce a notion of "level"
  • verify: introduce an experimental --full flag
  • core:
  • docs: man page and HTML help now order commands categorically, instead of alphabetically
  • minirst: support subsubsubsubsections (header level 5) with marker ''''
  • revlog: add the option to track the expected compression upper bound
  • revlog: speed up isancestor
  • templatekw: make {file_*} compare to both merge parents (issue4292)
  • templater: drop support for old style keywords (API)
  • util: make util.dirs() and util.finddirs() include root directory (API)
  • extensions:
  • largefiles: make last line of prompts

New in Mercurial 5.0 (May 27, 2019)

  • New Features:
  • ui.relative-paths option for getting relative path output from most commands. This is enabled when ui.tweakdefaults is enabled.
  • expectsize() revset errors out if revset has unexpected number of elements.
  • config() template function for getting a config value.
  • {negrev} template keyword shows the negative revision number. This is convenient because it is usually shorter than the positive number, but note that it is less stable.
  • hg uncommit now has an --allow-dirty-working-copy option.
  • hg shelve now has --keep option, which shelves but also leaves the working directory unchanged.
  • hg diff will now include specified files in subrepos.
  • hg recover now has a --no-verify option
  • Python 3 Support (Beta):
  • Mercurial 5.0 has beta level support for running on Python 3.5, 3.6, and 3.7. The Mercurial distribution itself and all extensions bundled with it should work on these Python versions.
  • To use Mercurial with Python 3, invoke setup.py with a Python 3 interpreter or set the PYTHON variable to a Python 3 interpreter when invoking the Makefile. e.g. python3.7 setup.py install or make install-home PYTHON=python3.7.
  • 3rd party extensions will likely need to be ported to support running on Python 3 and attempts to run many existing extensions with a Python 3 powered Mercurial will result in extension loading failures. See the Python3 page for more.
  • While the Mercurial test suite has a >99% pass rate when running with Python 3.5, 3.6, and 3.7, we anticipate that there are still many Python 3 bugs lingering in Mercurial. Please report Python 3 issues using the instructions at BugTracker.
  • If you package Mercurial or distribute it to users, we do not recommend making Python 3 the default at this time.
  • Python 3 is not yet very well tested on Windows and there are likely several more lingering issues on Windows compared to Linux, macOS, and other UNIX-like platforms.
  • Updated Windows Installers:
  • Windows installer packaging has been transitioned away from ad-hoc processes employed on individual contributors' personal machines to occurring in reproducible infrastructure driven by code in the Mercurial repository itself. This transition should enable Windows packaging and releasing to be more reliable and reproducible.
  • As part of this transition, there are changes to the Windows installers.
  • Inno Setup .exe Installer Changes:
  • Python has been upgraded from 2.7.15 to 2.7.16
  • add_path.exe has been removed and the Inno installer now updates PATH via a Pascal script that is part of the installer
  • The dulwich package has been upgraded from version 0.18.3 to 0.19.11
  • The keyring package has been upgraded to version 18.0.1
  • The pygments package has been upgraded to version 2.3.1
  • The urllib3 package is now included
  • The MSVC Runtime DLLs (msvcm90.dll, msvcp90.dll, and msvcr90.dll) have been upgraded from version 9.0.21022.8 to 9.0.30729.9518
  • Various tcl/tk Python packages are now included (making the Python distribution more complete)
  • The pywin32 package is no longer included (pywin32 has not been required by Mercurial for years)
  • Known issue: the distutils package is broken
  • (x86 only) Python .pyd and .dll extension modules and support libraries are now installed as standalone files instead of bundled in the library.zip file. This behavior is now consistent with 64-bit installers.
  • Other Improvements:
  • Improved color scheme for histedit's curses interface, making it more consistent with the curses hunk selector.
  • Bug Fixes:
  • Histedit's curse interface has improved support for non ascii characters.
  • Backwards Compatibility Changes:
  • color: change color of grep.rev label (BC)
  • commit: if interactive, look elsewhere for whitespace settings (BC)
  • diff: make sure we output stat even when --git is not passed (issue4037) (BC)
  • uncommit: abort if an explicitly given file cannot be uncommitted (BC)
  • The Windows Inno installers no longer ship the pywin32 package. This package was being bundled for historical reasons. Mercurial stopped using pywin32 several years ago and the disappearance of this package should not have any meaningful impact.
  • The 32-bit Windows Inno installers no longer distribute w9xpopen.exe. This should only impact people running Mercurial on Windows 95, 98, or ME.
  • The Windows MSI installers no longer include the Python sphinx package and its various dependencies.
  • The Windows MSI installers no longer include the pywin32 Python package.
  • The Windows MSI installers no longer include the enum and future Python packages.
  • Internal API Changes:
  • add: pass around uipathfn and use instead of m.rel() (API)
  • addremove: pass around uipathfn and use instead of m.uipath() (API)
  • branchmap: drop branchcache.setdefault() (API)
  • branchmap: remove the dict interface from the branchcache class (API)
  • forget: pass around uipathfn and use instead of m.rel() (API)
  • largefiles: use uipathfn instead of match.{rel,uipath}() (API)
  • match: delete unused abs() (API)
  • match: delete unused rel() (API)
  • match: delete unused root and cwd arguments from {always,never,exact}() (API)
  • match: delete unused root and cwd arguments to constructors (API)
  • match: delete unused uipath() and _uipathrelative (API)
  • match: remove unused "exact" argument (API)
  • memctx: rename constructor argument "copied" to "copysource" (API)
  • patch: accept second matcher that applies only to copy sources (API)
  • patch: let caller pass in root-filtering matcher (API)
  • patch: pass in context objects into diffhunks() (API)
  • patch: replace "prefix" and "relroot" arguments by "pathfn" (API)
  • remove: pass around uipathfn and use instead of m.rel() (API)
  • revset: leverage getintrange() helper in relation-subscript operation (API)
  • scmutil: delete now-unused origpath() (API)
  • scmutil: remove special handling of pats==("",) in matchandpats() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.add() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.addremove() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.archive() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.diff() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.forget() (API)
  • subrepo: adjust subrepo prefix before calling subrepo.removefiles() (API)
  • subrepo: avoid calculating subrepo prefix twice for cat() (API)
  • templatekw: move getrenamedfn() to scmutil (API)

New in Mercurial 4.8.2 (Jan 8, 2019)

  • commands:
  • update: do not pass in user revspec as default destination (issue6044)
  • 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
  • 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

New in Mercurial 4.7.2 (Oct 4, 2018)

  • Fix a potential out-of-bounds read in manifest parsing C code.
  • Various minor correctness fixes in revsets for commonancestors() and similar
  • 1.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)

New in Mercurial 4.0.2 (Jan 15, 2017)

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

New in Mercurial 3.7.2 (Mar 12, 2016)

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

New in Mercurial 3.7.1 (Feb 16, 2016)

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

New in Mercurial 3.5.1 (Sep 16, 2015)

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

New in Mercurial 3.4.2 (Jul 4, 2015)

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

New in Mercurial 3.4.1 (Jun 10, 2015)

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

New in Mercurial 3.4 (May 4, 2015)

  • commands:
  • annotate: add option to annotate working-directory files
  • annotate: always prepare ancestry context of base fctx (issue4600)
  • annotate: always adjust linkrev before walking down to parents (issue4623)
  • annotate: prepare ancestry context of workingfilectx
  • bookmarks: add incoming() to replace diff() for incoming bookmarks
  • bookmarks: add outgoing() to replace diff() for outgoing bookmarks
  • bookmarks: check @pathalias suffix before available @number for efficiency
  • bookmarks: enhance test of showing detail about incoming/outgoing bookmarks
  • bookmarks: prevent divergent bookmark from being updated unexpectedly
  • bookmarks: reuse @number bookmark, if it refers changeset referred remotely
  • bookmarks: rewrite comparing bookmarks in commands.summary() by compare()
  • bookmarks: show detailed status about incoming/outgoing bookmarks
  • clone: add progress support to hardlink clones (issue3059)
  • commands.import: accept a prefix option
  • commands.push: abort when revisions evaluate to empty set (BC)
  • commands: add ui.statuscopies config knob
  • debuginstall: expand the editor path before searching for it (issue4380)
  • files: split reusable implementation into cmdutil for subrepo support
  • files: use ctx object to access dirstate
  • graft: allow creating sibling grafts
  • graft: record intermediate grafts in extras
  • log: display closing-branch nodes as "_" (BC)
  • log: fix --follow null parent not to include revision 0
  • log: make -fr show complete history from the given revs
  • 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) (issue4596)
  • resolve: silence warning of unknown pats for -l/--list (BC)
  • revert: evaluate filesets against working directory (issue4497)
  • revert: fix --interactive on local modification (issue4576)
  • revert: stop marking files clean after interactive revert (issue4592)
  • revert: accept just -I/-X without paths or -a/-i (issue4592)
  • revert: apply normallookup on reverted file if size isn't changed (issue4583)
  • revert: restore the ability to revert across case only renames (issue4481)
  • status: add relative directory help text (issue3835)
  • core:
  • bundle2: capture transaction rollback message output (issue4614)
  • bundle2: disable ouput capture unless we use http (issue4613 issue4615)
  • changelog: fix readpending if no pending data exist (issue4609)
  • dirstate: fix order of initializing nf vs f
  • filelog: allow censored files to contain padding data
  • merge: run update hook after the last wlock release
  • pushkey: flush pending data before running a pre-pushkey hook (issue4607)
  • repoview: improve compute staticblockers perf
  • revlog: _addrevision creates full-replace deltas based on censored revisions
  • revlog: add "iscensored()" to revlog public API
  • revlog: addgroup checks if incoming deltas add censored revs, sets flag bit
  • revlog: in addgroup, reject ill-formed deltas based on censored nodes
  • revlog: make converting from inline to non-line work after a strip
  • revlog: special case expanding full-replacement deltas received by exchange
  • subrepo: don't write .hgsubstate lines with empty subrepo state (issue4622)
  • subrepo: update the help text to account for diff -I/-X gitsubrepo support
  • tags: establish a separate and shared cache of .hgtags filenodes
  • tags: change format of tags cache files
  • tags: have a different cache file per filter level
  • ui: disable revsetaliases in plain mode (BC)
  • util: add progress callback support to copyfiles
  • windows: make shellquote() quote any path containing '\' (issue4629)
  • extensions:
  • color: be more conservative about setting ANSI mode on Windows (BC)
  • color: fix crash in cmd.exe
  • color: omit terminfo/win32 warning if non-interactive (issue4543)
  • color: support a different color mode when the pager is active
  • convert: adjust progress bar for octopus merges (issue4169)
  • histedit: add --edit-plan option to histedit
  • histedit: allow histedit --continue when not on a descendant (BC)
  • histedit: fix preventing strips during histedit
  • histedit: fix style of new error message
  • histedit: improve roll action integration with fold
  • histedit: fix rollup prompting for a commit message (issue4606)
  • largefiles: don't crash when cloning to a remote repo
  • largefiles: don't mangle filesets when fixing up the log matcher
  • largefiles: always consider updatelfiles 'checked' parameter set
  • largefiles: avoid infinite recursive call of openlfdirstate in overriderevert
  • largefiles: don't create chain of contains calls
  • largefiles: don't prefix standin patterns with '.hglf' when logging
  • largefiles: don't warn when reverting a forgotten largefile
  • largefiles: extract and reuse 'standin' variable in overriderevert()
  • largefiles: for update -C, only update largefiles when necessary
  • largefiles: handle logging from outside the repo
  • largefiles: introduce lfutil.findstorepath()
  • largefiles: override cmdutil.revert() instead of comands.revert()
  • largefiles: report the source of copied/moved largefiles in status -C
  • largefiles: set the extension as enabled locally after a clone requiring it
  • largefiles: teach log to handle patterns
  • largefiles: update _subdirlfs() comment
  • largefiles: use common function to build content of .hg_archival.txt
  • largefiles: use lfutil.findstorepath() when verifying a local repo
  • largefiles: use the core file copy logic to validate the destination path
  • largefiles: use the share source as the primary local store (issue4471)
  • mq: avoid silent failure when single patch doesn't apply (issue4604)
  • rebase: don't forward "source" argument to rebase (issue4633)
  • rebase: restore bookmark state on abort
  • record: edit patch of newly added files (issue4304)
  • record: fix adding new file with record from within a subdir (issue4626)
  • record: fix record with change on moved file crashes (issue4619)
  • shelve: acquire lock in the right order
  • shelve: add interactive mode
  • shelve: add interactive mode command line option
  • hgweb:
  • hgweb: resurrect tag on diffline to fix rendering in monoblue style
  • hgweb: use introrev() for finding parents (issue4506)
  • json: implement {bookmarks} template
  • json: implement {branches} template
  • json: implement {changeset} template
  • json: implement {comparison} template
  • json: implement {fileannotate} template
  • json: implement {filediff} template
  • json: implement {helptopics} template
  • json: implement {help} template
  • json: implement {manifest} template
  • json: implement {shortlog} and {changelog} templates
  • json: implement {tags} template
  • unsorted:
  • archive: change the default prefix to '' from None
  • archive: look for first visible revision to build repo identity (issue4591)
  • bundle2-localpeer: properly propagate the server output on error (issue4594)
  • bundle2-wireproto: properly propagate the server output on error (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 (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 (issue4126)
  • record: add interactive option to the commit command
  • record: allow editing new files (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 (issue4553)
  • rollback: clear resolve state (issue4593)
  • ssl: resolve symlink before checking for Apple python executable (issue4588)
  • ssl: set explicit symbol "!" to web.cacerts to disable SSL verification (BC)
  • strip: properly clear resolve state with --keep (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 (issue4169)
  • test-histedit-edit.t: demonstrate qnew fails during a histedit (issue4366)
  • test-https: enable dummycert test only if Apple python is used (issue4500)
  • test-shelve: be more lenient about whitespace (issue4124)
  • tests: add test showing tags cache drops filtered heads (issue4550)
  • tests: handle deleted .hg directory (git 2.2.0 and higher) (issue4585)
  • trydiff: join filename with prefix only once
  • unbundle: acquire 'wlock' when processing bundle2 (BC) (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) (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) (issue4596)
  • subrepo: change arguments of abstractsubrepo.init (API)

New in Mercurial 3.3.3 (Apr 2, 2015)

  • adjustlinkrev: handle 'None' value as source
  • adjustlinkrev: prepare source revs for ancestry only once
  • amend: check for directory renames for both merge parents (issue4516)
  • annotate: reuse ancestry context when adjusting linkrev (issue4532)
  • dirstate: don't require exact case when adding dirs on icasefs (issue4578)
  • dirstate: make sure rootdir ends with directory separator (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 (issue4537)
  • templates: fix "log -q" output of default style
  • templates: fix "log -q" output of phases style
  • win32: 'raise ctypes.WinError' -> 'raise ctypes.WinError()'

New in Mercurial 3.3.2 (Mar 6, 2015)

  • transaction: really disable hardlink backups (issue4546)

New in Mercurial 3.3 (Feb 2, 2015)

  • commands:
  • 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 (issue4476)
  • commit: propagate --addremove to subrepos if -S is specified (issue3759)
  • graft: show more useful status information while grafting
  • core:
  • bundles: do not overwrite existing backup bundles (BC)
  • osx: patch .pax.gz files in pkg bundles so they extract as root (issue4081)
  • revset: handle hidden linkrev for file missing for head (issue4490)
  • revset: allow rev(-1) to indicate null revision (BC)
  • revset: fix ancestors(null) to include null revision (issue4512)
  • subrepo: don't abort in add when non-hg subrepos are present (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 (issue3090)
  • ignore: resolve ignore files relative to repo root (issue4473) (BC)
  • linkrev: handle filtered linkrev with no visible children (issue4307)
  • linkrev: also adjust linkrev when bootstrapping annotate (issue4305)
  • linkrev: use the right manifest content when adjusting linrev (issue4499)
  • memctx: calculate manifest correctly with newly-removed files (issue4470)
  • memctx: fix manifest for removed files (issue4470)
  • obsstore: disable garbage collection during initialization (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 (issue4435)
  • hgweb:
  • hgweb: allow viewing diffs against p1 or p2 for merge commits (issue3904)
  • extensions:
  • color: add support for colorizing git subrepo diffs
  • color: add missing 'dim' in _effects
  • convert: on svn failure, note libsvn version (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 (issue4251)
  • largefiles: fix commit of a directory with no largefile changes (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 (issue4504)
  • extdiff: avoid unexpected quoting arguments for external tools (issue4463)
  • highlight: ignore Unicode's extra linebreaks (issue4291)
  • record: don't honor format-changing diffopts (issue4459)
  • share: add option to share bookmarks
  • transplant: properly skip empty changeset (issue4423)

New in Mercurial 3.2.4 (Jan 5, 2015)

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

New in Mercurial 3.2.3 (Dec 19, 2014)

  • 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

New in Mercurial 3.2.2 (Dec 7, 2014)

  • changegroup: fix file linkrevs during reorders (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 (issue4453)
  • mq: when setting message in plain mode, separate it from header (issue4453)
  • push: stop independent usage of bundle2 in syncphase (issue4454)
  • pushkey: gracefully handle prepushkey hook failure (issue4455)
  • rename: properly report removed and added file as modified (issue4458)
  • revert: look for copy information for all local modifications
  • revset: fix first and last for generatorset (issue4465)
  • templates: fix broken "less" & "more" links in paper style (issue4460)

New in Mercurial 3.2.1 (Nov 15, 2014)

  • bookmarks: fix formatting of exchange message (issue4439)
  • changegroup: don't store unused value on fnodes (issue4443)
  • convert: use git diff-tree -Cn% instead of --find-copies=n% for older git
  • discovery: indices between sample and yesno must match (issue4438)
  • discovery: limit 'all local heads known remotely' to real 'all' (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 (issue4446)
  • serve: correct meta variable of --daemon-pipefds option
  • templater: don't overwrite the keyword mapping in runsymbol() (issue4362)

New in Mercurial 3.2 (Nov 10, 2014)

  • commands:
  • amend: abort early if no username is configured with evolve enabled (issue4211)
  • amend: fix amending rename commit with diverged topologies (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 (issue4430)
  • clone: for local clones, copy branchcache from the right location (issue4286)
  • clone: for local clones, copy over filtered branchcaches as well (issue4286)
  • clone: properly mark branches closed with --uncompressed (issue4428)
  • clone: provide sample username = config entry in .hg/hgrc (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 (issue3214)
  • files: add new command unifying locate and manifest functionality
  • graft: allow regrafting ancestors with --force (issue3220)
  • graft: make --force apply across continues (issue3220)
  • help: document that default hgweb style is called paper (issue4373)
  • help: update help for hgweb template and style (issue4373)
  • import: let --exact 'work' with --no-commit (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 (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) (issue4200)
  • dirstate: add exception when calling setparent without begin/end (API)
  • dirstate: wrap setparent calls with begin/endparentchange (issue4353)
  • hook: protect commit hooks against stripping of temporary commit (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 (issue4336)
  • revset: fix O(2^n) perf regression in addset
  • revset: have rev() drop out-of-range or filtered rev explicitly (issue4396)
  • setdiscovery: limit the size of all sample (issue4411)
  • ssl: only support TLS (BC)
  • ssl: only use the dummy cert hack if using an Apple Python (issue4410)
  • templater: fix ifcontains when list is a string (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 (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 (issue4398)
  • hgweb:
  • hgweb: disable SSLv3 serving (BC)
  • hgweb: refresh repository using URL not path (issue4323)

New in Mercurial 2.9 (Feb 3, 2014)

  • aliases: make "_checkshellalias()" invoke "findcmd()" with "strict=True"
  • backout: add a message after backout that need manual commit
  • backout: avoid update on simple case
  • bash_completion: add completion for deleting a shelve
  • bash_completion: add global support for -B|--bookmark
  • bash_completion: add global support for -b|--branch
  • bisect: --command without --noupdate should flag the parent rev it tested
  • bookmarks: allow push -B to create a new remote head (issue2372)
  • branchmap: cache open/closed branch head information
  • cat: increase perf when catting single files
  • changectx: increase perf of walk function
  • clone: do not turn hidden changeset public on publishing clone (issue3935)
  • convert: use branchmap to change default branch in destination (issue3469)
  • date: allow %z in format (issue4040)
  • diff: search beyond ancestor when detecting renames
  • hgweb: infinite scroll support for coal, gitweb, and monoblue styles
  • merge: consider successor changesets for a bare update
  • patch: add support for git delta hunks
  • phase: properly compute ancestors of --rev on push (issue3786)
  • rebase: abort cleanly when we encounter a damaged rebasestate (issue4155)
  • rebase: do not crash in panic when cwd disapear in the process (issue4121)
  • record: --user/-u now works with record when ui.username not set (issue3857)
  • record: re-enable whitespace-ignoring options
  • relink: abort earlier when on different devices (issue3916)
  • strip: add faster revlog strip computation
  • subrepo: check phase of state in each subrepositories before committing
  • subrepo: make it possible to update to hidden subrepo revisions
  • subsettable: move from repoview to branchmap, the only place it's used
  • templater: selecting a style with no templates does not crash (issue4140)
  • update: consider successor changesets when moving active bookmark
  • url: added authuri when login information is requested (issue3209)

New in Mercurial 2.8.2 (Jan 3, 2014)

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

New in Mercurial 2.8.1 (Dec 3, 2013)

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

New in Mercurial 2.2 (May 2, 2012)

  • This is a regularly-scheduled feature release. The most notable feature is a new safe '--amend' option for commit using our new phases infrastructure. There are also a number of signficant performance improvements for large repositories and improvements for case-folding filesystems.

New in Mercurial 2.1.2 (Apr 12, 2012)

  • alias: abort on missing positional args (issue3331)
  • aliases: use empty string for missing position parameters (issue3331)
  • bookmarks: clone non-divergent bookmarks with @ in them
  • convert/git: abort if git submodules are detected (issue2150)
  • convert: deal with empty splicemap path (issue3311)
  • dirstate: avoid normalizing letter case on icasefs for exact match (issue3340)
  • dirstate: fix some problems for recursive case normalization (issue3342)
  • dirstate: normalize case of directory components
  • extdiff: escape filenames with vim/DirDiff and make quoting work with Windows
  • filemerge: remove temporary files when using internal:dump as merge-tool
  • filemerge: restore default prompt for binary/symlink lost in 83925d3a4559
  • icasefs: use case preserved root for 'util.fspath()' invocation (issue3302)
  • largefiles: suppress unexpected warning of 'hg status' for removed files
  • localrepo: fix unpushable repos when using bookmarks (issue3317)
  • merge: accept missing revisions in symlink flag merge (issue3316)
  • merge: handle linear update to symlink correctly (issue3316)
  • mq: fix qpush --move with comments in series file between applied patches
  • qfinish: comply with the phases.new-commit option in secret mode (issue3335)
  • rebase: move bookmarks as needed with pull --rebase (issue3285)
  • rebase: properly calculate descendant set when aborting (issue3332)
  • rename: handle case-changing (issue1717)
  • setup.py: don't call splitlines twice on the output of xcodebuild (issue3277)
  • strip: enhance repair.strip to receive a list of nodes (issue3299)
  • strip: ignore -n (issue3326) (BC)
  • wix: add phases help text and two more translations (issue3288)

New in Mercurial 2.1.1 (Mar 2, 2012)

  • bdiff: fix malloc(0) issue in fixws()
  • bugzilla: stop XMLRPC requests from requesting gzipped responses
  • bundlerepo: bundle repos should be non-publishing (issue3266)
  • cmdserver: invalidate the dirstate when running commands (issue3271)
  • context: make workingctx.forget() really warn about untracked files
  • convert: ignore blank lines in mapfiles (issue3286)
  • convert: tolerate spaces between splicemap parent ids (issue3203)
  • convert: use splicemap entries when sorting revisions (issue1748)
  • dirstate: filecacheify _ignore (issue3278)
  • fetch: use update rather than clean when updating (issue3246)
  • forget: show warning messages for forgetting in subrepo correctly
  • graft: use proper revisions for copy detection (issue3265)
  • import: handle git renames and --similarity (issue3187)
  • largefiles: check whether specified patterns are related to largefiles strictly
  • largefiles: don't break filesets
  • largefiles: only cache largefiles in new heads
  • largefiles: use repo.store.createmode for new files in .hg/largefiles
  • localrepo: clear _filecache on rollback (issue3261)
  • localrepo: reset _phasesdirty flag after writing
  • localrepo: use 'changectx.dirs()' in 'status()' for directory patterns
  • log: fix --follow FILE ancestry calculation
  • log: remove caching of all visited revisions (issue3253)
  • log: restore cache used by --copies
  • mdiff: adjust hunk offsets with --ignore-blank-lines (issue3234)
  • mq: fix qapplied --last and qprev documentation (issue3282)
  • mq: fix qnext when all remaining patches are guarded
  • mq: make qimport --push push all imported patches (issue3130)
  • mq: make qprev return the previous applied patch (issue3245)
  • mq: restore _branchtags() fast path (issue3223)
  • patch: fix fuzzing of hunks without previous lines (issue3264)
  • patch: fuzz more aggressively to match patch(1) behaviour
  • pull: backout change to return code
  • scmutil: update cached copy when filecached attribute is assigned (issue3263)
  • setup: handle output from Apple's Xcode 4.3 better (issue3277)
  • subrepo: fix for merge inconsistencies
  • update: delete bookmarks.current when explicitly updating to a rev (issue3276)
  • update: don't move the active bookmark if a rev is specified with -r

New in Mercurial 2.1 (Feb 2, 2012)

  • Major features:
  • Changesets now have a phase attribute, which tracks what changesets are safe to modify (see Phases)
  • Core changes:
  • annotate: support diff whitespace filtering flags (issue3030)
  • bookmarks: automatically advance bookmark on bare update (BC) (issue2894)
  • bookmarks: shadow divergent bookmarks of foo with foo@n
  • copies: improved copy detection for diff and status
  • hooks: new priority specifier to control ordering
  • id: add command line options for handling ssh and https urls
  • push: propagate --new-branch and --ssh options when pushing subrepos
  • revset: add remote() predicate to lookup remote revisions
  • subrepo: support explicit add and forget of files in subrepos
  • Extension changes:
  • bugzilla: make XMLRPC interface support http and https access
  • largefiles: add --normal option to hg add (issue3061)
  • notify: add option for writing to mbox
  • rebase: add a "D" short option for detach
  • rebase: allow --detach when --rev is used
  • win32mbcs: allow win32mbcs extension to be enabled on cygwin platform
  • mq: add secret phase setting
  • Bug fixes:
  • hgcia: fix diffstat support
  • largefiles: add error checking to tags conversion (issue3092)
  • largefiles: add tests for uncovered codepaths (issue3092)
  • largefiles: check if largefile could be found when archiving (issue3193)
  • largefiles: correctly download new largefiles when merging
  • largefiles: correctly handle dirstate status when rebasing
  • largefiles: correctly handle newly added largefile on other side of merge
  • largefiles: display remote errors from putlfile (issue3123) (issue3149)
  • largefiles: don't reference uninitialized variable (issue3092)
  • largefiles: fix caching largefiles from an aliased repo (issue3212)
  • largefiles: fix confusion upon removal of added largefile (issue3176)
  • largefiles: fix inappropriate locking (issue3182)
  • largefiles: fix output of hg summary (issue3060)
  • largefiles: cache new largefiles for new heads when pulling
  • largefiles: implement addremove (issue3064)
  • largefiles: optimize performance of status on largefiles repos (issue3136)
  • largefiles: optimize status when files are specified (issue3144)
  • largefiles: remove empty directories upon update (issue3202)
  • largefiles: fix addremove when no largefiles are specified
  • largefiles: fix revert on missing largefile (issue3217)
  • largefiles: fix transplant for all cases (issue3192)
  • mail: use quoted-printable for mime encoding to avoid too long lines (issue3075)
  • merge: give a special message for internal:merge failure (issue3105)
  • rebase: reinstate old-style rev spec support for the source and base (issue3181)
  • ssh: quote remote paths (issue2983)
  • sslutil: abort properly if no certificate received for https connection
  • sslutil: show fingerprint when cacerts validation fails
  • status: support revsets with --change
  • subrepo: avoid syncing bookmarks twice on clone (issue3191)
  • tag: invalidate tag cache immediately after adding new tag (issue3210)
  • util: don't encode ':' in url paths
  • bundlerepo: try to find containing repo on creation (issue1812)
  • convert: subversion convert abort on revision not found (issue3205)
  • discovery: fix regression when checking heads for pre 1.4 client (issue3218)
  • merge: defer symlink flag merging to filemerge (issue3200)
  • patch: a little bit more robust line counting on diff --stat (issue3183)
  • push: return 1 if no changes found (issue3228)
  • qpush: avoid trying to manage existing history (issue2218)
  • revsets: include the correct first ancestor change for follow(file)
  • revsets: filesets now work correctly inside of revsets

New in Mercurial 2.0 (Nov 2, 2011)

  • subrepo aborts recursive commits, minor backout and alias changes

New in Mercurial 1.9.1 (Aug 2, 2011)

  • dispatch: make sure global options on the command line take precedence
  • eol: ignore IOError from deleted files in commitctx
  • hgcia: set default value of strip to -1 (issue2891)
  • hgweb: do not ignore [auth] if url has a username (issue2822)
  • hgweb: handle 'baseurl' configurations with leading slash (issue2934)
  • hgweb: raw file mimetype guessing configurable, off by default (BC) (issue2923)
  • httpclient: import ca33b88d143c from py-nonblocking-http (issue2932)
  • patch: fix parsing patch files containing CRs not followed by LFs
  • rebase: block collapse with keepbranches on multiple named branches (issue2112)
  • rebase: reset bookmarks (issue2265 and issue2873)
  • revert: restore check for uncommitted merge (issue2915) (BC)
  • revsets: catch type error on tip^p1(tip) (issue2884)
  • revsets: do the right thing with x^:y (issue2884)
  • subrepo: handle adding svn subrepo with a svn:external file in it (issue2931)
  • subrepo: use working copy of .hgsub to filter status (issue2901)
  • url: store and assume the query part of an url is in escaped form (issue2921)
  • util: rename the util.localpath that uses url to urllocalpath (issue2875)
  • verify: filter messages about missing null manifests (issue2900)
  • web: output a correct date in short format (issue2902)
  • win32: assign winstdout to sys.stdout as well (issue2888)

New in Mercurial 1.8.4 (Jun 2, 2011)

  • bookmarks: do not forward merged bookmark (issue1877)
  • changelog: convert user and desc from local encoding early
  • fix bookmarks rollback behavior
  • hgrc.5: document shell aliases
  • httprepo: proper handling of invalid responses without content-type (issue2019)
  • httprepo: send URL redirection notices to stderr (issue2828)
  • localrepo: don't add deleted files to list of modified/added files (issue2761)
  • localrepo: ignore tags to unknown nodes (issue2750)
  • mq: strip extra whitespace from node ids in header (issue2790)
  • rebase: restore mq guards after rebasing (issue2107)
  • revset: expand help for contains predicate
  • revset: note case-insensitive matches in keyword and user
  • revset: note case-sensitive match in grep
  • revset: report a parse error if a revset is not parsed completely (issue2654)
  • revset: the name is optional for the tag predicate
  • simplemerge: do not allow binary files to abort an entire merge
  • strip: make it clear that --force discards changes (issue310)
  • subrepo: don't crash when git .hgsubstate is empty (issue2716)
  • subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
  • subrepo: respect non-default path for incoming/outgoing
  • subrepo: svn abort now depends on exit code (issue2833)
  • subrepo: use code from 71ea5b only if Python needs it (issue2795)
  • tags: catch more corruption during cache parsing (issue2779)

New in Mercurial 1.8.1 (Mar 21, 2011)

  • annotate: rewrite to deal with crossed linkrevs (issue2682)
  • bookmark: fix invalidation of localrepo._bookmarkcurrent
  • cacert: improve error report when web.cacert file does not exist
  • contrib: update tcsh_completion for Mercurial 1.8
  • hgcia: accept "queued." xmlrpc return as success
  • hgweb: fix filelog rss links generation
  • hgweb: use tip in gitweb/monoblue filelog rss links (issue2677)
  • merge: back out single-parent fast-forward merge
  • merge: drop resolve state for mergers with identical contents (issue2680)
  • merge: improve unresolved conflicts warning (issue2681)
  • mergetools: add alternate registry keys for 32bit apps on 64bit O/S
  • mq: forbid commit of merge involving mq patches
  • subrepo: backout 67fbe566eff1, --force requires svn >= 1.5
  • subrepo: don't crash when git repo is missing
  • subrepo: handle svn tracked/unknown directory collisions
  • wix: drop bin/ folder from MSI installers (issue2673)

New in Mercurial 1.6.4 (Oct 4, 2010)

  • archive: set date to 1980 for very old zip files
  • bookmarks: fix _bookmarks/lookup() reentrancy issue (issue2016)
  • color: add win32 support for non-black background
  • context: fix filectx.undelete() (issue2388)
  • convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354)
  • convert/svn: fix broken symlink renames in svn sink
  • core: use lexists() instead of exists() where appropriate
  • hgweb: Fix memory leak when using hg commands over http repositories
  • hgweb: correct Content-Type header values for archive downloads
  • log: include unmodified-in-merge files in log diff/stat (issue2383)
  • mq: always require --force when pushing patches (issue2363)
  • patch: do not overwrite broken untracked symlinks
  • patch: fix rename text to binary file (issue2400)
  • patch: fix target when patching broken symlinks (issue2368)
  • patch: upgrade to git patch when removing binary file
  • rename: do not overwrite existing broken symlinks
  • url: verify correctness of https server certificates (issue2407)
  • util: avoid using hashlib on Python < 2.5 (issue2278)
  • verify: fix "missing revlog!" errors for revlog format v0 and add test
  • win32: add Emacs scripts to Inno Setup installer
  • win32: add hgweb scripts to Inno Setup installer

New in Mercurial 1.6.1 (Aug 2, 2010)

  • alias: ensure checksignature() is applied directly to the command (issue2286)
  • bash/zsh completion: use HGPLAIN when invoking hg (issue2297)
  • bookmarks: don't allow name to contain whitespaces only
  • bookmarks: ensure current bookmark is updated when specified with -r .
  • bundle: lookup revisions after addbranchrevs
  • color/progress: subclass ui instead of using wrapfunction (issue2096)
  • commit: only warn when reopening the workdir's branch
  • dispatch: give better error message when cwd doesn't exist (issue2293)
  • doc: make sure we use our own code for generating man pages
  • filelog: cmp: don't read data if hashes are identical (issue2273)
  • filelog: test behaviour for data starting with "\1\n"
  • hg.clone: fix branch value when passing a repo object (issue2267)
  • hgweb.wsgi: add a URL to the corresponding wiki documentation
  • hgwebdir: allow pure relative globs in paths
  • hgwebdir: use template paths configured in the hgrc (issue2281)
  • init: create target directory recursively
  • inotify: check all components of filenames against hgignore (issue884)
  • keyword: move collecting of [keyword] patterns to reposetup (issue2303)
  • log: fix missing diff output for hg log -p in subdirectory
  • log: follow filenames through renames (issue647)
  • mail: ensure that Python2.4 to 2.7 use the same header format
  • mercurial.spec: rename docutils to python-docutils in BuildRequires
  • mq: clarify the fact that qimport is trying to read a file
  • mq: cleanup status if applied mq is stripped (issue1881)
  • mq: fixed ENOENT when qrename to new/directory.patch
  • mq: reset self.added after the mq transaction instead of inside qimport
  • qpush --move: move the right patch even with comment lines
  • rebase: re-add patches to mq repo after rebase
  • revert: rename original to .orig instead of copying (issue2282)
  • revset: fix ancestor subset handling (issue2298)
  • runrst: try to be more helpful if docutils is not installed
  • tag: do not allow tag names to consist solely of whitespace (issue2307)
  • transplant: crash if repo.commit() finds nothing to commit

New in Mercurial 1.5.4 (Jun 1, 2010)

  • dispatch: include Python version in traceback
  • push: update help
  • status: avoid performance regression when no .hgsub is present
  • clone: fix performance issue with hardlinks and Windows shares
  • hgweb: fix race in refreshing repo list (issue2188)
  • hgrc: clarify that hgrc keys can be overridden and sections can be split
  • eol: new extension for managing file newlines based on a version controlled configuration file
  • pager: fork and exec pager as parent process with /bin/sh -c
  • rebase: stress that only local changesets should be rebased
  • convert/svn: close gettags() log stream (issue2196)
  • record: check that we are not committing a merge before patch selection

New in Mercurial 1.1.2 (Jan 2, 2009)

  • The path auditing was improved, some date-related test failures in test suite were fixed, and graph controls were added to the monoblue theme.

New in Mercurial 1.1.1 (Dec 21, 2008)

  • The resolve command now requires a -a switch to resolve all files and its help text has been improved.
  • Recursion was made optional for hgweb; it is triggered by "**" rather than "*".
  • A fncache bug affecting directories ending in " " or "." was fixed.
  • Non-existing directories are now created as needed when applying patches.
  • A copy bug was fixed in the SVN converter.
  • Branch names may now be kept when using the rebase extension.