Mercurial Changelog

What's new in Mercurial 6.4.2

Jun 23, 2023
  • Exceptional bugfix release due to a corruption bug that happens when using clonebundles on repositories with large files.
  • revlog-split: make sure the self._indexfile attribute is reset (issue6811)

New in Mercurial 6.4.1 (Jun 23, 2023)

  • rhg: fix a bug in path encoding
  • rhg: don't crash on empty directory names in path_encode, just in case
  • commands: correct documentation of hg serve’s --ipv6 options
  • run-tests: remove obsolete coverage check and packaging import (issue6805)
  • chg: populate CHGHG if not set
  • match: sort patterns before compiling them into a regex
  • match: match explicit file using a set
  • rebase: do not cleanup the working copy when --dry-run is used (issue6802)
  • sslutil: set context security level for legacy tls testing (issue6760)

New in Mercurial 6.4 (Jun 23, 2023)

  • New Features:
  • There is a new internal merge tool called internal:union-other-first.
  • It works like internal:union but add other side on top of local.
  • Pullbundles are enabled by default
  • delta-find: add a way to control the number of bases tested at the same time
  • changelog-v2: add a configuration to disable rank computation
  • debug: add an option to display statistic about a bundling operation
  • debug: add an option to display statistic about a unbundling operation
  • delta-find: add a delta-reuse policy that blindly accepts incoming deltas
  • debug: add debug-revlog-stats command
  • dirstate: add narrow support to verify
  • verify: also check dirstate
  • commit: add --draft option to use draft phase
  • amend: add a --draft option to set phase to draft
  • debug: add a config to abort update early
  • rhg: implement checkexec to support weird filesystems
  • debugshell: allow commands to be specified as a CLI argument
  • rhg-files: add support for narrow when specifying a revision
  • rust-narrow: enable narrow support for plain rhg files
  • Bug Fixes:
  • Aside from the following (unordered) commits which made it through a manual filter, there are a bunch of typing improvements and fixes, removal of deprecated code and general code cleanup.
  • lfs: improve an exception message for blob corruption detected on transfer
  • revlog: use the user facing filename as the display_id for filelogs
  • rust-status: query fs traversal metadata lazily
  • shelve: add Shelf.changed_files for resolving changed files in a plugin
  • demandimport: ensure lazyloaderex sets loader attributes (issue6725)
  • typing: fix a syntax error in mercurial/cext/bdiff.pyi
  • cffi: fix a bytes vs str issue on macOS when listing directories
  • changelog-v2: fix the docket struct
  • schemes: fix a broken check for drive letter conflicts
  • worker: avoid reading 1 byte at a time from the OS pipe
  • rust-narrow: fix loop that never loops
  • setup: Ensure target directory exists with building rust extension
  • dirstate: invalidate changes when parent-change fails
  • dirstate: warn about non-explicitly rolledback parent-change
  • dirstate: write dirstate on successful exit of changing_parents context
  • largefile: make sure we hold the lock when updating the second dirstate
  • dirstate: enforce holding the lock while doing any changes
  • run-tests: stop ignoring venv-installed packages
  • transaction: run abort callback in all cases
  • transaction: quietly rollback if no other changes than temporary files
  • debugrebuilddirstate: double check that no transaction is open
  • dirstate: do not write an empty dirstate just for backup
  • locking: take the wlock for the full hg add duration
  • locking: take the wlock for the full hg remove duration
  • locking: take the wlock for the full hg forget duration
  • locking: take the wlock for the full hg addremove duration
  • locking: grab the wlock before touching the dirstate in perfdirstatewrite
  • locking: hold the wlock for the full duration of the "keyword demo"
  • mq: properly take the wlock during the full qfold operation
  • dirstate: invalidate the dirstate change on transaction failure
  • status: fix post status writing
  • status: fix post status invalidation
  • dirstate: avoid transaction backup/restore if we do not hold the lock
  • rollback: explicitly skip dirstate rollback when applicable
  • dirstate-guard: remove the feature
  • dirstate: make restorebackup more robust when it is a noop
  • dirstate: generalize the dirstate's invalidation on transaction abort
  • dirstate: detect potential fishy transaction patterns while changing
  • mq: write the dirstate before stripping
  • dirstate: explicitly backup the datafile
  • localrepo: enforce a clean dirstate when the transaction open
  • localrepo: "blindly" do a dirstate backup at the end of the transaction
  • dirstate: remove the dedicated backup logic
  • rhg: fix a bug in path_encode
  • dirstate: invalidate on all exceptions
  • large-files: make sure we write newly initialized standin file early
  • dirstate: warn if dirty when starting an edition
  • dirstate: track that changes are pending in a transaction
  • dirstate: distinct transaction callback from largefile
  • automv: lock the repository before searching for renames
  • dirstate: only reload the dirstate when it may have changed
  • dirstate: cleanup the _map property cache
  • status: invalidate dirstate on LockError
  • dirstate: check that dirstate is clean at the initial context opening
  • dirstate: have running_status write the dirstate when holding the lock
  • dirstate: have running_status warn when exiting with a dirty dirstate
  • narrow: widden the lock context in tracking
  • narrow: enforce that narrow spec is written within a transaction
  • transaction: no longer explicitly cache phaseroots
  • transaction: no longer explicitly cache bookmarks
  • transaction: use the standard transaction mechanism to backup branch
  • bundlerepo: handle changegroup induced phase movement in the associated method
  • bundlerepo: apply phase data stored in the bundle instead of assuming draft
  • config-item: declare undeclared path suboption
  • narrow: read pending file when applicable
  • rust: fix building on macOS (issue6801)
  • run-tests: fix a crash when using the coverage options
  • undo-files: also remove the undo.backupfiles
  • undo-files: cleanup backup when cleaning undos
  • undo-files: clean existing files up before writing new one
  • undo-files: cleanup legacy files when applicable
  • dirstate-v2: fix an incorrect handling of readdir errors
  • rust: update zstd dependency
  • rust: upgrade rayon dependency
  • dirstate: fix the bug in [status] dealing with committed&ignored directories
  • dirstate: fix a potential traceback when in copy and rename
  • histedit: fix diff colors
  • cext: fix for PyLong refactoring in CPython 3.12
  • py3: fix for Python 3.12 emitting SyntaxWarning on invalid escape sequences
  • statprof: with Python 3.12, lineno is (more) often None
  • transaction: properly clean up backup file outside of .hg/store/
  • transaction: raise on backup restoration error
  • revlog: improve the robustness of the splitting process
  • debugdeltachain: stop summing the same chain over and over
  • url: don't ignore timeout for https connections
  • py3: fix for Python 3.12 emitting SyntaxWarning on invalid escape sequences
  • tests: accept a test output change in [tests/test-serve.t]
  • rust: fix thread cap (for real this time)
  • dirstate: try refreshing the changelog when parent are unknown
  • hooks: invalidate the repo after the hooks
  • Backwards Compatibility Changes:
  • rust: upgrade supported Rust toolchain version
  • rust: move all crates in the main workspace to edition 2021
  • hg-core: upgrade zstd dependency
  • hg-core: upgrade clap dependency
  • hg-core: upgrade all remaining dependencies
  • hg-cpython: upgrade dependencies
  • rhg: upgrade clap dependency
  • rhg: upgrade the remainder of the dependencies
  • Internal API Changes:
  • Many APIs around the dirstate have been made much stricter with regards to
  • locking and transaction handling
  • Some dirstate APIs have been renamed/removed
  • In both cases, you should get loud complaints in your tests if you do
  • something wrong.
  • Miscellaneous:
  • pullbundle support no longer requires setting a server-side option,
  • providing a .hg/pullbundles.manifest according to the syntax specified in 'hg help -e clonebundles' is enough.
  • debug-delta-find: add a --source option
  • delta-find: add debug information about reuse of cached data
  • delta-find: set the default candidate chunk size to 10
  • attr: vendor 22.1.0
  • configitems: add a default value for "merge-tools.xxx.regappend"
  • debugrevlog: display total stored information
  • emitrevision: if we need to compute a delta on the fly, try p1 or p2 first
  • emitrevision: consider ancestors revision to emit as available base
  • find-delta: pass the cache-delta usage policy alongside the cache-delta
  • delta-find: use a smarter object for snapshot caching
  • delta-find: use sets instead of list in the snapshot cache
  • delta-find: make sure we only use newer full snapshot as candidate
  • delta-find: use a single snapshot cache when applying a group to an object
  • bundleoperation: optionnaly record the remote that produced the bundle
  • bundle: when forcing acceptance of incoming delta also accept snapshot
  • bundle: emit full snapshot as is, without doing a redelta
  • pathutil: slightly faster path audit in the common case
  • merge: don't pay for pathconflicts if there are none
  • merge: short-circuit the _checkfs loop upon getting ENOENT
  • merge: disable the whole filesystem access loop if [_realfs] is false
  • merge: cache the fs checks made during [_checkunknownfiles]
  • rust: use logging_timer instead of micro_timer
  • rust: run cargo clippy
  • makefile: add cargo clippy to tests if cargo is available
  • heptapod-ci: add clippy to the CI
  • convert: use a priority queue for sorting commits, to make sorting faster
  • delta-find: adjust the default candidate group chunk size
  • delta-find: declare the "paths..*:pulled-delta-reuse-policy option

New in Mercurial 6.3.1 (Nov 20, 2022)

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

New in Mercurial 6.3.0 RC 0 (Oct 25, 2022)

  • New Features:
  • Bundle: introduce a --exact option
  • Perf-bundle: add a new command to benchmark bundle creation time
  • Perf-bundle: accept --rev arguments
  • Perf-bundle: accept --type argument
  • Perf-unbundle: add a perf command to time the unbundle operation
  • Perf: introduce a benchmark for delta-find
  • Contrib: add support for rhel9
  • Phase-shelve: Implement a 'shelve.store' experimental config
  • Debug-delta-find: introduce a quiet mode
  • Sort-revset: introduce a random variant
  • Phase: introduce a dedicated requirement for the archived phase
  • Rebase: add boolean config item rebase.store-source
  • Rhg: make [rhg status -v] work when it needs no extra output
  • Rhg: support "!" syntax for disabling extensions
  • Rhg: add debugrhgsparse command to help figure out bugs in rhg
  • Rhg: add sparse support
  • Rhg-status: add support for narrow clones
  • Templates: add filter to reverse list
  • Contrib: add pull_logger extension
  • Revset: handle wdir() in roots()
  • Revset: handle wdir() in sort(..., -topo)
  • Rhg: support tweakdefaults
  • Rhg: parallellize computation of [unsure_is_modified]
  • Default Format Change:
  • These changes affect newly created repositories (or new clones) done with Mercurial 6.3.
  • New Experimental Features:
  • Bug Fixes:
  • Shelve: demonstrate that the state is different across platforms (issue6735)
  • Shelve: in test for trailing whitespace, strip commit (issue6735)
  • Shelve: remove strip and rely on prior state (issue6735)
  • Tests: fix http-bad-server expected errors for python 3.10 (issue6643)
  • Status: let --no-copies override ui.statuscopies
  • Releasenotes: use re.MULTILINE mode when checking admonitions
  • Backwards Compatibility Changes:
  • Chg worker processes will now correctly load per-repository configuration
  • When given a both a relative --repository path and an alternate working directory via --cwd. A side-effect of this change is that these workers will now return an error if hg cannot find the current working directory, even when a different directory is specified via --cwd.
  • Phase: rename the requirement for internal-phase from internal-phase to use-internal-phase (see 74fb1842f8b962cf03d7cd5b841dbcf2ae065587)
  • Internal API Changes:
  • Miscellaneous:
  • Sslutil: use proper attribute to select python 3.7+
  • Typing: suppress a few pyi-errors with more recent pytype
  • Ci: bump pytype to 2022.03.29
  • Bundlespec: add documentation about existing option
  • Subrepo: avoid opening console window for non-native subrepos on Windows
  • Setup: unconditionally enable the long-paths-support option on Windows
  • Setup: use the full executable manifest from python.exe
  • Tests: work around libmagic bug in svn subrepo tests
  • Packagelib: use python3 by default
  • Improve hg bisect performance
  • Perf: properly process formatter option in perf::unbundle
  • Compare-disco: miscellaneous display improvements
  • Fsmonitor: better compatibility with newer Pythons
  • Revlog: finer computation of "issnapshot"
  • Rhg: don't fallback if strip or rebase are activated
  • Perf: make perf::bundle compatible before 61ba04693d65
  • Perf: make perf::bundle compatible down to 5.2
  • Run-tests: display the time it took to install Mercurial
  • Mergetools: don't let meld open all changed files on startup
  • Dirstate-v2: skip evaluation of hgignore regex on cached directories

New in Mercurial 6.2.2 (Oct 3, 2022)

  • Fsmonitor: restore functionality by moving to new dirstate APIs
  • Dirstate-v2: fix data file transaction handling (issue6730)
  • Rust: fix behavior when matching files with multiple includes
  • Rust: widen range of compatible crates to help with packaging
  • Rust-status: ignored directories are now correctly only listed if opted into
  • Automation: improve Windows packaging tooling
  • Contrib: update Mercurial install in bootstrap environment
  • Remove flakiness in some tests
  • Improve portability of certain tar uses in tests

New in Mercurial 6.2.1 (Jul 29, 2022)

  • Fix SSL support in Python 3.6
  • git: make sure to fsdecode bookmark names everywhere (issue6723)
  • git: add a missing reset_copy keyword argument to dirstate.set_tracked()
  • git: copy findmissingrevs() from revlog.py to gitlog.py (issue6472)
  • packaging: update keyring on Windows to avoid spurious stacktraces
  • packaging: bump dulwich to 0.20.45
  • Fix typos in documentation for debugdiscovery
  • Miscellaneous improvements of debugdiscovery

New in Mercurial 6.2 (Jul 20, 2022)

  • New Features:
  • Introduce a way to auto-upgrade a repo for certain requirements (see hg help config.format)
  • filemerge: add support for partial conflict resolution by external tool
  • contrib: add a partial-merge tool for sorted lists (such as Python imports)
  • revlog: reorder p1 and p2 when p1 is null and p2 is not while respecting issue6528
  • rhg: add support for ignoring all extensions
  • completion: install completers to conventional locations
  • revert: ask user to confirm before tracking new file when interactive
  • Rust implementation now uses the new dirstate API
  • sslutil: be less strict about which ciphers are allowed when using --insecure
  • sslutil: support TLSV1_ALERT_PROTOCOL_VERSION reason code
  • absorb: make --edit-lines imply --apply-changes
  • diff: add help text to highlight the ability to do merge diffs
  • censor: make rhg fall back to python when encountering a censored node
  • clone: use better names for temp files
  • debuglock: make the command more useful in non-interactive mode
  • debugdeltachain: distinct between snapshot and other diffs
  • debugindex: rename to debugindex debug-revlog-index
  • Make debug-revlog-index give out more information
  • sparse: use the rust code even when sparse is present
  • Bug Fixes:
  • Python 3 bugfixes
  • Windows bugfixes
  • templates: make firstline filter not keep 'v', 'f' and similar
  • rhg: sort unsupported extensions in error message
  • Improve performance of all functions that extract the first line of a text
  • crecord: avoid duplicating lines when reverting noeol->eol change
  • Some config.path options are now discoverable via config
  • mail: don't complain about a multi-word email.method
  • bundlespec: do not overwrite bundlespec value with the config one
  • bundlespec: do not check for - in the params portion of the bundlespec
  • bundlespec: handle the presence of obsmarker part
  • sparse: start moving away from the global variable for detection of usage
  • rust-changelog: don't skip empty lines when iterating over changeset lines
  • narrow: support debugupgraderepo
  • bundle: quick fix to ludicrous performance penalty
  • followlines: don't put Unicode directly into the .js file (issue6559)
  • manifest: improve error message in case for tree manifest
  • revlog: use %d to format int instead of %lu (issue6565)
  • revlog: use appropriate format char for int ("i" instead of I")
  • worker: stop relying on garbage collection to release memoryview
  • worker: implement _blockingreader.readinto() (issue6444)
  • worker: avoid potential partial write of pickled data
  • Backwards Compatibility Changes:
  • Removed Python 2 support: this includes a lot of cleanup in our codebase, automation, testing, etc.
  • debugindex: rename to debugindex debug-revlog-index
  • Miscellaneous:
  • Fix typos and add missing items from documentation
  • dirstate-tree: optimize HashMap lookups with raw_entry_mut
  • Rust dependencies have been upgraded
  • revlog: rank computation is done by Rust when available
  • Improve discovery test tooling
  • Audit the number of queries done in discovery
  • Improved .hgignore of the mercurial-devel repository itself
  • Improve test coverage of dirstate-v2
  • rust-requirements: allow loading repos with bookmarksinstore requirement
  • Various Rust refactorings to help with revlog management
  • Improve debugability of Rust structs
  • Improve unit testing of the Rust dirstatemap
  • Improve robustness of the Rust dirstatemap to corruption
  • Improve changelog-v2 upgrade system

New in Mercurial 6.1.3 (Jun 4, 2022)

  • Security:
  • Narrow_widen_acl: enforce narrowacl in narrow_widen (SEC) 6b10151b9621
  • Normal notes:
  • Censor: fix [hg update] away from a revision with censored files
  • Amend: stop losing copies when amending
  • Rhg: strengthen dirstate v2 writing in broken filesystems
  • Work around some broken DLL imports in Windows
  • Worker: adapt _blockingreader to work around a python3.8.[0-1] bug (issue6444)
  • Rhg: correctly handle the case where diffs are encoded relative to nullrev
  • Fix bugs and race-conditions in the Mercurial test runner
  • Chg: ignore already closed fds when cleaning up

New in Mercurial 6.1.2 (May 6, 2022)

  • Improve Windows test suite
  • Fix debuglock not ignoring a missing lockfile when forcing a lock
  • Improve help of ui.large-file-limit
  • Set the large-file-limit to 10MB (from 10MiB) for clarity
  • While rewriting desc hashes, ignore ambiguous prefix "hashes"
  • Fix a crash in partial amend with copies
  • Fix a py3 compatiblity bug
  • Fix incorrect metadata causing dirstate-v2 data loss in edge case (dd2503a63d33)
  • Fix cleanup of old dirstate-v2 data files when using rhg
  • Make reference to .hg/last_message.txt relative in commit
  • Fix an infinite hang when rhg is used in the background
  • Fix Python DLL loading bug in Windows
  • Add --docket flag to debugstate to check out dirstate-v2 metadata
  • Remove debugdirstateignorepatternhash in favor of debugstate --docket
  • Fix incorrect metadata causing systematic complete dirstate-v2 rewrite

New in Mercurial 6.1.1 (Apr 9, 2022)

  • Fix unsoundness (no known exploits) in Rust extensions
  • Fix Rust compilation on aarcch64
  • Fix Rust compilation on architectures where char is unsigned
  • When the merge tool uses $output, don't leave markers in $local
  • Improve test suite support on big-endian platforms
  • Cap the number of concurrent threads to 16 in Rust hg status to prevent huge speed regression at higher thread counts
  • Fix amend with copies in extras
  • Abort if commit we're trying to unamend was not created by hg [un]amend
  • Fix file name in the pullbundle help text
  • Fix an issue with data not being correctly reset in the C implementation of dirstate-v2
  • Fix issue6673 where some tags were missing from cache after a merge
  • Fix stream-cloning a repo with empty requirements
  • Fix a false warning about content-divergence creation
  • Fix silly blackbox entries when hg is interrupted
  • Fix Rust dirstate counters not being updated correctly leading to some potential bugs (none known)
  • Stop relying on a compiler implementation detail in Rust HgPath

New in Mercurial 6.1 (Mar 2, 2022)

  • New Features:
  • Added a way of specifying required extensions that prevent Mercurial from starting if they are not found. See hg help config.extensions.
  • Merge conflict markers have been made clearer (see backwards compatibility below)
  • Improve detailed error codes
  • Added a hint about mangled whitespace on bad patch
  • Explain which order the commits are presented in chistedit
  • Introduce a dirstate-tracked-hint feature to help automation keep track of changes to tracked files. See hg help config.use-dirstate-tracked-hint.
  • Shared repositories can be upgraded if the upgrade is specific to the share. For now, this only applies to dirstate-v2 and dirstate-tracked-hint.
  • When using the narrow extension, non-conflicting changes to files outside of the narrow specification can now be merged.
  • When cloning a repository using stream-clone, the client can now control the repository format variants to use as long as the stream content does not restrict that variant.
  • Default Format Change:
  • These changes affect newly created repositories (or new clones) done with Mercurial 6.1.
  • The share-safe format variant is now enabled by default. It makes configuration and requirements more consistent across repository and their shares. This introduces a behavior change as shares from a repository using the new format will also use their main repository's configuration. See hg help config.format.use-share-safe for details about the feature and the available options for auto-upgrading existing shares.
  • New Experimental Features:
  • The pure Rust version of Mercurial called rhg added support for most common invocations of hg status. See hg help rust.rhg for details on how to try it out.
  • rhg supports narrow clones and sparse checkouts.
  • Bug Fixes:
  • Obsolete revisions are skipped while computing heads. In conjunction with the evolve extension >= 10.5.0, this leads to massive exchange (push/pull) speedups in repositories with a lot of heads and/or obsolete revisions.
  • Stream-clones now properly advertise all requirements needed. This can result in the stream-clone feature being disabled for some clients using < 6.0.2. A small bugfix patch for these older client is available if necessary.
  • The --no-check and --no-merge flags now properly overwrite the behavior from commands.update.check
  • rhg's fallback detection is more robust in general in the presence of more advanced configs
  • rhg's blackbox now supports milliseconds by default and uses the same ISO 8601 format as the Python implementation
  • Fix rhg crash on non-generaldelta revlogs
  • The lfs, largefiles and sparse extensions now correctly take the appropriate lock before writing requirements
  • The notify extension does not produce errors anymore if a revision is not found
  • Remove unnecessary and overly strict check for divergence in hg fix
  • Windows compatibility improvements
  • Miscellaneous Python 3 and typing improvements
  • Many other small or internal fixes
  • Backwards Compatibility Changes:
  • The use of share-safe, means shares (of new repositories) will also use their main repository's configuration see the Default Format Change section for details.
  • The fix to stream-clone requirements advertising means some requirements previously (wronly) omitted are now sent. This can confuse client using a Mercurial version < 6.0.2. The client would consider these requirements unsupported even if it actually know them. If you encounter this, either upgrade your client or apply the necessary patch.
  • The labels passed to merge tools have changed slightly. Merge tools can get labels passed to them if you include $labellocal, $labelbase, and/or $labelother in the merge-tool.<tool name>.args configuration. These labels used to have some space-padding, and truncation to fit within 72 columns. Both the padding and the truncation has been removed.
  • Some of the text in labels passed to merge tools has changed. For example, in conflicts while running hg histedit, the labels used to be "local", "base", and "histedit". They are now "already edited", "parent of current change", and "current change", respectively.
  • The computation of namedbranch heads now ignores obsolete revisions. User of the Changeset Evolution feature may see a change in location and numbers of heads of each named branches (and topic).
  • The remotefilelog extension now requires an appropriate excludepattern for subrepositories.
  • debugsparse's interface has been reworked to be more flexible. Since it's a debug command it is not actually a breaking change, but it is worth noting here.
  • Temporary files for merges are now all inside a hgmerge directory instead of at the root of TMPDIR. The corresponding experimental mergetempdirprefix config option has been removed.

New in Mercurial 6.0.3 (Feb 20, 2022)

  • Fix an infinite loop in edge cases of the pure Python dirstate-v2 packer
  • Fix a small race condition with deleted files in Rust-augmented status
  • Small improvement to Python 3.11 compatibility
  • Fixed some typos in help messages that caused missing sections
  • Centos -> Rockylinux packaging

New in Mercurial 6.0.2 (Feb 3, 2022)

  • Fix hg incoming and hg outgoing with remote subrepos on Windows
  • Fix Rust build on MacOS
  • Fix a (15 year old?) bug where some data loss could happen in a very tight race window (f38ae2d7390e + ccd9cb73125c)
  • Remove support for running hg unamend on merge changesets at it was never actually implemented
  • Fix stream-clone requirements filtering which caused some stream-clones to be unusable from an older version of Mercurial
  • Rename dirstate-v2 configuration name from exp-rc-dirstate-v2 to use-dirstate-v2. This was overlooked in 6.0, the old name will be kept as an alias for compatibility.
  • Fix a bug where the branchmap could point to uncommitted data

New in Mercurial 6.0.1 (Jan 17, 2022)

  • Improve documentation around Rust (see hg help rust) and rust-related actions
  • Improve upgrade/downgrade edge cases for dirstate-v2
  • Make the test suite nicer to big-endian platforms
  • Make the test suite nicer to NetBSD
  • Fix a performance regression on fsmonitor (issue6612)
  • Add fixes for Python 3.10
  • Fix a deadlock when using sparse and share-safe together

New in Mercurial 6.0 (Nov 24, 2021)

  • Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release. It was delayed from the usual calendar due to the ongoing effort to make Windows support more robust, especially on Python 3.
  • New Features:
  • debugrebuildfncache now has an option to rebuild only the index files
  • a new bookmarks.mode path option have been introduced to control the
  • bookmark update strategy during exchange with a peer. See hg help paths for details.
  • a new bookmarks.mirror option has been introduced. See hg help bookmarks
  • for details.
  • more commands support detailed exit codes when config ui.detailed-exit-codes is enabled
  • Default Format Change:
  • New Experimental Features:
  • Major feature: version 2 of the dirstate is available (the first version is as old as Mercurial itself). It allows for much faster working copy inspection (status, diff, commit, update, etc.) and richer information (symlink and exec info on Windows, etc.). The format has been frozen with room for some future evolution and the current implementations (Python, Python + C, Python + Rust or pure Rust) should be compatible with any future change or optimization that the format allows. You can get more information in the internal documentation
  • Added a new web.full-garbage-collection-rate to control performance. See
  • de2e04fe4897a554b9ef433167f11ea4feb2e09c for more information
  • Added a new histedit.later-commits-first option to affect the ordering of commits in chistedit to match the order in hg log -G. It will affect the text-based version before graduating from experimental.
  • Bug Fixes:
  • hg fix --working-dir now correctly works when in an uncommitted merge state
  • Unintentional duplicated calls to hg fix's internals were removed, making it potentially much faster
  • rhg cat can be called without a revision
  • rhg cat can be called with the . revision
  • rhg cat is more robust than before with regards to edge cases. Some still remain like a tag or bookmark that is ambiguous with a nodeid prefix, only nodeids (prefixed or not) are supported as of now.
  • rhg cat is even faster
  • rhg (Rust fast-path for hg) now supports the full config list syntax
  • rhg now parses some corner-cases for revsets correctly
  • Fixed an fsmonitor on Python 3 during exception handling
  • Lots of Windows fixes
  • Lots of miscellaneous other fixes
  • Removed a CPython-specific compatibility hack to improve support for alternative Python implementations
  • Added a compatibility fix for Python 3.11
  • Backwards Compatibility Changes:
  • Internal API Changes:
  • The following functions have been removed:
  • dirstate.normal
  • dirstate.normallookup
  • dirstate.otherparent
  • dirstate.add
  • dirstate.addfile
  • dirstate.remove
  • dirstate.drop
  • dirstate.dropfile
  • dirstate.__getitem__
  • dirstatemap.nonnormalentries
  • dirstatemap.nonnormalset
  • dirstatemap.otherparentset
  • dirstatemap.non_normal_or_other_parent_paths
  • dirstateitem.dm_nonnormal
  • dirstateitem.dm_otherparent
  • dirstateitem.merged_removed
  • dirstateitem.from_p2
  • dirstateitem.merged
  • dirstateitem.new_merged
  • dirstateitem.new_added
  • dirstateitem.new_from_p2
  • dirstateitem.new_possibly_dirty
  • dirstateitem.new_normal
  • dirstateitem.from_p2_removed
  • Miscellaneous:
  • wireprotov1peer's batchable is now a simple function and not a generator
  • anymore
  • The Rust extensions (and by extension the experimental rhg status) only use a tree-based dirstate in-memory, even when using dirstate-v1. See bf8837e3d7cec40fe649c47163a3154dda03fa16 for more details
  • The Rust minimum supported version is now 1.48.0 in accordance with out policy of keeping up with Debian stable
  • The test harness plays nicer with the NixOS sandbox
  • The test harness plays nicer with NetBSD
  • Improved rpm packaging

New in Mercurial 5.9 (Oct 12, 2021)

  • New Features:
  • hg config now has a --source option to show where each configuration value comes from.
  • Internal API Changes:
  • The Dirstate API have been updated as the previous function leaked some internal details and did not distinct between two important cases: "We are changing parent and need to adjust the dirstate" and "some command is changing which file is tracked". To clarify the situation:
  • the following functions have been deprecated: dirstate.add, - dirstate.normal, - dirstate.normallookup, - dirstate.merge, - dirstate.otherparent, - dirstate.remove, - dirstate.drop,
  • these new functions are added for the "adjusting parents" use-case: dirstate.update_file, - dirstate.update_file_p1,
  • these new function are added for the "adjusting wc file" use-case": dirstate.set_tracked, - dirstate.set_untracked, - dirstate.set_clean, - dirstate.set_possibly_dirty,

New in Mercurial 5.8.0 (Jun 7, 2021)

  • New Features:
  • hg purge is now a core command using --confirm by default.
  • The rev-branch-cache is now updated incrementally whenever changesets are added.
  • The new options experimental.bundlecompthreads and experimental.bundlecompthreads.<engine> can be used to instruct the compression engines for bundle operations to use multiple threads for compression. The default is single threaded operation. Currently only supported for zstd.
  • Default Format Change:
  • These changes affects newly created repositories (or new clone) done with Mercurial 5.8.
  • The ZSTD compression will now be used by default for new repositories when available. This compression format was introduced in Mercurial 5.0, released in May 2019.
  • See hg help config.format.revlog-compression for details.
  • Mercurial installation built with the Rust parts will now use the "persistent nodemap" feature by default. This feature was introduced in Mercurial 5.4 (May 2020). However Mercurial instalation built without the fast Rust implementation will refuse to interract with them by default. This restriction can be lifted through configuration.
  • See hg help config.format.use-persistent-nodemap for details
  • New Experimental Features:
  • There's a new diff.merge config option to show the changes relative to an automerge for merge changesets. This makes it easier to detect and review manual changes performed in merge changesets. It is supported by hg diff --change, hg log -p hg incoming -p, and hg outgoing -p so far.
  • Bug Fixes:
  • gracefully recover from inconsistent persistent-nodemap data from disk.
  • Backwards Compatibility Changes:
  • In normal repositories, the first parent of a changeset is not null, unless both parents are null (like the first changeset). Some legacy repositories violate this condition. The revlog code will now silentely swap the parents if this condition is tested. This can change the output of hg log when explicitly asking for first or second parent. The changesets "nodeid" are not affected.
  • Internal API Changes:
  • changelog.branchinfo is deprecated and will be removed after 5.8. It is superseded by changelogrevision.branchinfo.
  • Callbacks for revlog.addgroup and the changelog._nodeduplicatecallback hook now get a revision number as argument instead of a node.
  • revlog.addrevision returns the revision number instead of the node.
  • nodes.nullid and related constants are being phased out as part of the deprecation of SHA1. Repository instances and related classes provide access via nodeconstants and in some cases nullid attributes.

New in Mercurial 5.7.1 (Jun 7, 2021)

  • commands:
  • log: fix handling of root (or empty) path provided by matcher (issue6478)
  • patch: fix a formatting issue
  • patch: make diff --git to differentiate b/w file is empty or doesn't exists
  • core:
  • hooks: introduce a ':run-with-plain' option for hooks
  • extensions:
  • largefiles: properly pass kwargs into url.open
  • unsorted:
  • procutil: extend gui test to detect wayland session (issue6479)
  • rust-status: honor matcher when using the dirstate-only fast-path (issue6483)
  • tests: add a test to demonstrate a bug in 'hg diff --git' (issue6486)

New in Mercurial 5.6.1 (Dec 12, 2020)

  • Regularly scheduled bug fix release.
  • Extensions:
  • rebase: clear merge state when aborting in-memory merge on dirty working copy
  • Unsorted:
  • crecord: render chunkpad on Windows (issue6427)
  • diff: do not concatenate immutable bytes while building a/b bodies (issue6445)

New in Mercurial 5.3 (Feb 4, 2020)

  • New Features:
  • Windows will process hgrc files in %PROGRAMDATA%Mercurialhgrc.d.
  • The Phabricator extension will read .arcconfig in the repository root to assign
  • the phabricator.callsign and phabricator.url properties, if availableThis file will override the settings in the global or user level config files, but is itself overridden by the config file for the repository (issue6243)
  • Accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
  • hg import has a new --secret option for committing with the secret phase
  • New Experimental Features:
  • The LFS extension adds --no-lfs to the verify, so that it won't attempt to
  • download missing blobs as part of the process
  • Bug Fixes:
  • The indent() template function was documented to not indent empty lines,
  • but it still indented the first line even if it was emptyIt no longer does that
  • Avoid setting both parents to the same commit in some cases when evolving a merge (issue6098)
  • Avoid spurious warnings with hg verify --verbose when there are renames in obsolete revisions (issue6172)
  • Check for unfinished ops when using the experimental in-memory rebase (issue6214)
  • Avoid corrupting dirstate if files are modified while the editor is open for an amend (issue6233)
  • Ensure reviews are posted to Phabricator in topological order, regardless of the order specified on the command line (issue6241)
  • Backwards Compatibility Changes:
  • Changed bundled config file location in Windows .exe installers to hgrc.d,
  • from default.dConsider using the new %PROGRAMDATA%Mercurialhgrc.d directory instead of the installation directory if you need to add custom config files globally
  • File patterns for the fix configuration are resolved against the repository
  • root, instead of cwdThis allows filesets to be resolved consistently, regardless of cwd
  • Internal API Changes:
  • Matcher instances no longer have a explicitdir propertyConsider
  • rewriting your code to use repo.wvfs.isdir() and/or ctx.hasdir() insteadAlso, the traversedir property is now also called when only explicitdir used to be calledThat may mean that you can simply remove the use of explicitdir if you were already using traversedir
  • The revlog.nodemap object have been merged into the revlog.index object.
  • n in revlog.nodemap becomes revlog.index.has_node(n),
  • revlog.nodemap[n] becomes revlog.index.rev(n),
  • revlog.nodemap.get(n) becomes revlog.index.get_rev(n)
  • copies.duplicatecopies() was renamed to
  • copies.graftcopies()Its arguments changed from revision numbers to context objectsIt also lost its repo and skip arguments (they should no longer be needed)

New in Mercurial 5.2 (Nov 17, 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 4, 2019)

  • Regularly scheduled bug fix release.
  • Phabricator: don't abort if property writing fails during amending
  • Test: allow different result for zstd compression

New in Mercurial 5.1 (Aug 3, 2019)

  • Mercurial 5.1 (2019-08-01):
  • Regularly scheduled feature release. An overview of new features available. This is a regularly-scheduled quarterly feature release.
  • Commands:
  • Bookmark: also make bookmark cache depends of the changelog
  • Bookmarks: actual fix for race condition deleting bookmark
  • Bookmarks: actually trigger the race deleting bookmark in the test
  • Bookmarks: backout the attempt to fix the delete race
  • Bookmarks: keep bookmarks in .hg/store if new config set
  • Bookmarks: use context manager when writing files
  • Bookmarks: use correct store for "ambiguity check"
  • Branch: abort if closing branch from a non-branchhead cset
  • Branchcache: store the maximum tip in a variable inside for loop
  • Commands: drop support for legacy ^cmd registration (API)
  • Commit: add --force-close-branch flag to close a non-head changeset
  • Commit: add a check if it is trying to close an already closed branch head
  • Commit: add ability to print file status after each successful invocation
  • Commit: allow --interactive to work again when naming a directory (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 <40 english chars (issue6158)
  • Mq: fix for merge detection methods
  • Rebase: fix in-memory rebasing of copy of empty file
  • Rebase: tweak description of inmemory working even w/ dirty working dir
  • Shelve: modify help text on --interactive
  • Unshelve: add interactive mode
  • Unshelve: add space to help
  • Unshelve: changed Corruptedstate error msg from ui.warn to error.Abort
  • Unshelve: mark unshelve interactive as experimental
  • Unsorted:
  • Abort: added support for graft
  • Abort: added support for histedit
  • Abort: added support for merge
  • Abort: added support for rebase
  • Abort: added support for unshelve
  • Automation: initial support for running Linux tests
  • Bisect: do not crash with rewritten commits
  • Blackbox: disable extremely verbose logging (issue6110)
  • Catapipe: add support for COUNTER events
  • Changelog: define changelogrevision.p[12]copies for null revision
  • Changelog: fix handling of empty copy entries in changeset
  • Changelog: optionally store added and removed files in changeset extras
  • Continue: added support for rebase
  • Continue: added support for unshelve
  • Copies: filter invalid copies only at end of pathcopies() (issue6163)
  • Copies: follow copies across merge base without source file (issue6163)
  • Debugrevlog: fix average size computation for empty data (issue6167)
  • Drawdag: don't crash when writing copy info to changesets
  • Extdata: avoid crashing inside subprocess when we get a revset parse error
  • Extensions: drop support for extsetup() without 'ui' argument (API)
  • Filemerge: make last line of prompts <40 english chars (issue6158)
  • Graphmod: remove support for graph lines mixing parent/grandparent styles (BC)
  • Manifest: avoid corruption by dropping removed files with pure (issue5801)
  • Match: remove unused match.__iter__ implementation (API)
  • Match: use '' instead of '.' for root directory (API)
  • Procutil: allow callers of runbgcommand to assume the process starts
  • Remotefilelog: check if RFL is enabled in getrenamedfn() override
  • Remotefilelog: handle copies in changesets in getrenamedfn() override
  • Remotefilelog: log when we're about to fetch files
  • Remotefilelog: tell runbgcommand to not block on child process startup
  • Root: add support for -Tformatter option
  • Sslutil: add support for SSLKEYLOGFILE to wrapsocket
  • Sslutil: fsencode path returned by certifi (issue6132)
  • Statecheck: added support for STATES
  • Subrepos: make last line of prompts <40 english chars (issue6158)
  • Tests: make the grep pattern in remotefilelog-gcrepack portable (issue6122)
  • Tests: work around libressl being different about error strings (issue6122)
  • Tracing: add support for emitting counters
  • Worker: support parallelization of functions with return values
  • Zsh: enable completion support for chg as well
  • Behavior Changes:
  • Graphmod: remove support for graph lines mixing parent/grandparent styles (BC)
  • Internal API Changes:
  • Commands: drop support for legacy ^cmd registration (API)
  • Extensions: drop support for extsetup() without 'ui' argument (API)
  • Log: pass getcopies() function instead of getrenamed() to displayer (API)
  • Match: remove unused match.__iter__ implementation (API)
  • Match: use '' instead of '.' for root directory (API)
  • Templater: drop support for old style keywords (API)
  • Util: make util.dirs() and util.finddirs() include root directory (API)

New in Mercurial 5.0.2 (Jul 9, 2019)

  • commands:
  • Help fixes on hg mv and hg cp
  • unsorted:
  • debugrevlog: fix average size computation for empty data (issue6167)
  • Fix an obscure data corruption bug with musl libc (and presumably others).

New in Mercurial 5.0.1 (Jul 9, 2019)

  • commands:
  • bookmark: also make bookmark cache depends of the changelog
  • commit: allow --interactive to work again when naming a directory (issue6131)
  • unsorted:
  • manifest: avoid corruption by dropping removed files with pure (issue5801)
  • sslutil: fsencode path returned by certifi (issue6132)

New in Mercurial 4.9.1 (Mar 19, 2019)

  • Commands:
  • Record: prevent commits that don't pick up dirty subrepo changes
  • 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 (issue6030)

New in Mercurial 4.9 (Mar 19, 2019)

  • 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 (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
  • 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
  • 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
  • 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)
  • 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)
  • 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)

New in Mercurial 4.8.2 (Jan 9, 2019)

  • This is a regularly-scheduled bugfix release containing following fixes:
  • 1.1. commands
  • update: do not pass in user revspec as default destination (issue6044)
  • 1.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
  • 1.3. extensions
  • phabricator: properly encode boolean types in the request body
  • 1.4. 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.8.1 (Dec 27, 2018)

  • 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()
  • 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 (issue5818)
  • Rebase: preserve working copy when redoing in-mem rebase on disk
  • Unsorted:
  • Tests: stabilize test-inherit-mode.t on FreeBSD and macOS (issue6026)

New in Mercurial 4.8 (Nov 5, 2018)

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

New in Mercurial 4.8 RC0 (Oct 23, 2018)

  • commands:
  • amend: support "history-editing-backup" config option
  • annotate: pass around full hex node until formatting plain output
  • annotate: pass in wdir rev and node to formatter (BC)
  • annotate: rename {line_number} to {lineno} (BC)
  • bookmark: add an --active flag to display the active bookmark
  • bookmarks: add explicit option to list bookmarks of the given names
  • bookmarks: adjust exception type so present(bookmark(.)) works as expected
  • bookmarks: clarify that opts['rename'] points to an old bookmark to be renamed
  • bookmarks: convert opts to bytes dict early
  • bookmarks: parse out --inactive to action early
  • bookmarks: parse out implicit "add" action early
  • bookmarks: pass in formatter to printbookmarks() instead of opts (API)
  • bookmarks: refactor option checking to pick one from --delete/rename/active
  • bookmarks: reject --delete with --inactive which makes no sense
  • bookmarks: remove --active in favor of --list
  • branchmap: close cache file properly
  • branchmap: explicitly convert file into iterator
  • branchmap: load branchmap as an iterable
  • branchmap: pass changelog into branchmap functions
  • branchmap: strip 'n' read from cache file as before
  • clone: allow local cloning to create more than one level of directories
  • commands: adjust metavariables as appropriate
  • commands: pass include and exclude options to hg.clone()
  • commands: restore compatibility for "^cmd" registration (issue6005)
  • commands: support passing depth to hg.clone()
  • commit: add debug message regarding manifest reuse
  • commit: try hard to reuse p1 manifest if nothing changed
  • fileset: extract language processing part to new module (API)
  • grep: add MULTIREV support to --allfiles flag
  • grep: rename {line_number} to {lineno} as well (BC)
  • help: adding a proper declaration for shortlist/basic commands (API)
  • identify: change {parents} to a list of nodes (BC)
  • log: fill in pseudo rev and node as wdir() manifest identifiers
  • log: have changesetformatter fill in wdir() rev and node (BC)
  • log: make changesetformatter pass in changectx to formatter
  • log: respect graphshorten on terminal nodes (collapsing o-~ to just o~)
  • logtoprocess: sends the canonical command name to the subprocess
  • merge: do not delete untracked files silently (issue5962)
  • merge: improve interactive one-changed one-deleted message (issue5550)
  • phases: enforce internal phase support
  • push: add "remote" to 'repository changed while pushing' messages (issue5971)
  • resolve: add confirm config option
  • resolve: add option to warn/abort on -m with unresolved conflict markers
  • resolve: rename {status} to {mergestatus} to not shadow change status (BC)
  • resolve: support confirm config option with --unmark flag
  • resolve: test that we suggest a valid hg command
  • status: advertise --abort instead of 'update -C .' to abort a merge
  • status: advertise --abort instead of 'update -C .' to abort graft
  • status: intersect matcher with narrow matcher instead of filtering afterwards
  • 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)
  • verify: start to abstract file verification
  • core:
  • 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: custom filelog to be used with narrow repos
  • filelog: drop _generaldelta attribute (API)
  • filelog: drop index attribute (API)
  • filelog: remove checkhash() (API)
  • filelog: remove proxies to revlog
  • 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)
  • filelog: store filename directly on revlog instance
  • revlog: add a callback "tracking" duplicate node addition
  • revlog: add a method to retrieve snapshot depth
  • revlog: add a method to tells whether rev is stored as a snapshot
  • revlog: add method for obtaining storage info (API)
  • revlog: add opener option to enable ellipsis flag processor
  • revlog: allow flag processors to be applied via store options
  • revlog: also detect intermediate snapshots
  • revlog: bound number of snapshots in a chain
  • revlog: catch more specific exception in shortest()
  • revlog: clear revision cache on hash verification failure
  • revlog: compute snapshot depth on delta info
  • revlog: define ellipsis flag processors in core
  • revlog: do not search for delta for empty content
  • revlog: don't include trailing nullrev in revlog.revs(stop=len(revlog))
  • 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: ensure intermediate snapshot have decreasing size
  • revlog: explicitly initialize static variables
  • revlog: filter out "invalid" delta base candidates
  • revlog: fix pure nodemap to not access missing index entry
  • revlog: fix pure version of _partialmatch() to include nullid
  • revlog: fix size of Python nodetree object
  • revlog: if the module is initialized more than once, don't leak nullentry
  • revlog: move censor logic out of censor extension
  • revlog: move revision verification out of verify
  • revlog: new API to emit revision data
  • revlog: obtain the first node at the lowest layer while building pure nodemap
  • revlog: only consider the span of the delta section
  • revlog: optimize ancestors() to not check filtered revisions for each
  • revlog: remove micro-optimization for looking up only nullid
  • revlog: remove some knowledge of sentinel nullid in index
  • revlog: reuse cached delta for identical base revision (issue5975)
  • revlog: rewrite censoring logic
  • revlog: skip over empty revision when looking for delta base
  • revlog: store flag processors per revlog
  • revlog: update pure nodecache start lookup offset on insertion
  • revlog: use a symbolic constant for the deltas/text ration
  • revlog: use proper version comparison during verify
  • revlog: use specialized exception for ambiguous prefix lookup
  • 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 exposing linknode of file revisions
  • wireprotov2: support response caching
  • extensions:
  • 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)
  • largefiles: use a context manager to control the progress bar lifetime
  • lfs: add repository feature denoting the use of LFS
  • 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)
  • narrow: add '--import-rules' flag to tracked command
  • narrow: add a --narrowspec flag to clone command
  • 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: 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: add support for using the vcr library to mock interactions
  • phabricator: drop support for the legacy phabricator.auth.token config (BC)
  • rebase: add --stop option to stop rebase at any point (issue5206)
  • rebase: add test for in-memory merge conflicts
  • rebase: add test to show --stop moves bookmarks
  • rebase: call _dorebase() properly
  • rebase: consolidate check for --abort/--stop/--continue conflicts
  • rebase: consolidate check for --dry-run/--confirm on abort/stop/continue
  • rebase: cover restorestatus() by lock to prevent it from being updated
  • rebase: do not pass in user option to rollback in-memory merge conflict
  • rebase: do not set internal dryrun flag by --confirm
  • rebase: expand a long "one-liner"
  • rebase: explicitly track collapses as fold
  • rebase: include --stop option in documentation
  • rebase: raise error for options conflicting with --stop
  • rebase: skip extinct revisions even if it has no successor in rebase set
  • rebase: support "history-editing-backup" config option
  • rebase: turn off inmemory flag on --stop
  • rebase: use action variable to select things to do
  • shelve: add an "internal" extra
  • shelve: drop mention of obsshelve file
  • shelve: find shelvedctx from bundle even if they are already in the repo
  • shelve: fix crash on unshelve without .shelve metadata file
  • shelve: handle shelved node on unfiltered repository
  • shelve: look for shelved node in the repository before unbundling
  • shelve: no longer strip internal commit when using internal phase
  • shelve: rename method for data write/read
  • shelve: return the shelved node as part of bundle application
  • shelve: store shelved node in a new data file
  • shelve: use bundlerepo.instance() to construct a repo object
  • shelve: use the internal phase when possible
  • shelve: write metadata file on the fly if they are missing
  • hgweb:
  • hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
  • hgweb: show shortlog by default in json output (issue5978)
  • hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
  • unsorted:
  • ancestors: actually iterate over ancestors in topological order (issue5979)
  • changegroup: pass sorted revisions into group() (API)
  • changegroup: port to emitrevisions() (issue5976)
  • changegroup: remove reordering control (BC)
  • changelog: keep track of duplicated node in the transaction adding them
  • chg: upgrade client to use "setumask2" command
  • chgserver: add "setumask2" command which uses correct message frame
  • chgserver: do not send system() back to client if stdio redirected (issue5992)
  • chgserver: restore pager fds attached within runcommand session
  • cleanupnodes: drop special casing around prune markers (API)
  • copies: improve logic of deciding copytracing on based of config options
  • debugcommands: introduce debugrevlogindex (BC)
  • debugcommands: use openstorage() in debugdata (BC)
  • demandimport: instrument python 2 code with trace events
  • 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
  • exchangev2: support fetching shallow files history
  • exchangev2: support for calling rawstorefiledata to retrieve raw files
  • fastannotate: address pyflakes concerns
  • fastannotate: make the default value for 'fastannotate.useflock' dynamic
  • fastannotate: pconvert paths from the server for Windows
  • fastannotate: process files as they arrive
  • fastannotate: record some TODO items from indygreg's review
  • fastannotate: rip out specialized support for remotefilelog
  • fastannotate: use repo.local()
  • fastannotate: use stringutil.pprint() to dump diffopts to be hashed
  • fastannotate: write out files from server in a predictable order
  • formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)
  • fsmonitor: use vfs instead of opener (issue5938)
  • 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
  • httppeer: log commands for version 2 peer
  • linelog: add a Python implementation of the linelog datastructure
  • linelog: fix bytes/str issue in exception raise on Python 3
  • linelog: fix infinite loop vulnerability
  • linelog: port to Python 3
  • linelog: update internal help text
  • 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 shared repo creation
  • localrepo: support writing shared file (API)
  • localrepo: use boolean in opener options
  • localrepo: validate supported requirements in makelocalrepository()
  • lookup: add option to disambiguate prefix within revset
  • mail: always fall back to iso-8859-1 if us-ascii won't work (BC)
  • manifest: add rawsize() proxy (API)
  • obsolete: fix ValueError when stored note contains ':' char (issue5783)
  • overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
  • phase: handle phase with no command flag
  • pref: support negative indexing in perfrevlogrevisions
  • procutil: compare fd number to see if stdio protection is needed (issue5992)
  • py3: rename pycompat.getcwd() to encoding.getcwd() (API)
  • py3: system-stringify file mode in commandserver.py
  • remotephase: avoid full changelog iteration (issue5964)
  • remotephase: fast path newheads computation in simple case (issue5964)
  • rename: quote hg commands in warnings
  • rust-chg: add callback to handle pager and shell command requests
  • rust-chg: add state machine to handle "runcommand" request with cHg extension
  • scmutil: accept multiple predecessors in 'replacements' (API)
  • scmutil: avoid quadratic membership testing (issue5969)
  • sparse-revlog: add a test checking revlog deltas for a churning file
  • sparse-revlog: fix delta validity computation
  • sparse-revlog: set max delta chain length to on thousand
  • sqlitestore: support for storing revisions without their parents
  • 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: make all callables optional
  • storageutil: move metadata parsing and packing from revlog (API)
  • storageutil: new module for storage primitives (API)
  • streamclone: don't support stream clone unless repo feature present
  • streamclone: include obsstore file into stream bundle if client can read it
  • streamclone: new server config and some API changes for narrow stream clones
  • streamclone: pass narrowing related info in _walkstreamfiles()
  • streamclone: reimplement nested context manager
  • templatekw: add option to include ignored/clean/unknown files in cache
  • templatekw: deprecate old-style template keyword function (API)
  • templates: rename "user" to "luser" defined in default map file (API)
  • tracing: trace command function execution
  • 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)

New in Mercurial 4.7.2 (Oct 19, 2018)

  • 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 (issue5992)
  • procutil: compare fd number to see if stdio protection is needed (issue5992)

New in Mercurial 4.7.1 (Sep 5, 2018)

  • This is a regularly-scheduled bugfix release containing following fixes:
  • Commands:
  • Merge: do not delete untracked files silently (issue5962)
  • Core:
  • Revlog: fix descendant deprecated method
  • Hgweb:
  • Hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
  • 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

New in Mercurial 4.6.1 (Jun 6, 2018)

  • This release is a security release due to multiple issues found in mpatch.c with a fuzzer. No exploits are known at the time, however, it is highly recommended that all users upgrade. Also included in this release are the following:
  • zstandard: pull in bug fixes from upstream 0.9.1 (issue5884)
  • bundle2: fix old clients from reading newer format (issue5872)
  • bdiff: fix xdiff long/int64 conversion (issue5885)
  • push: continue without locking on lock failure other than EEXIST (issue5882)
  • lfs: fix crash in command server (issue5902)
  • hghave: fix deadlock in test runner
  • rebase: fix error when computing obsoletenotrebased (issue5907)
  • rebase: prioritize indicating an interrupted rebase over update (issue5838)
  • revset: pass in lookup function to matchany() (issue5879)

New in Mercurial 4.6 (Jun 6, 2018)

  • New Features:
  • pullbundles:
  • Pullbundles allow the server to answer client requests using pre-built bundles. This is different from the existing clonebundle feature:
  • pullbundles can be used for both the initial clone and later pull operations
  • pullbundles can be used incrementally, i.e. to cover the changes up to the start of the current month as one bundle and the remaining changes as second bundle
  • the bundle is transferred inline as part of the existing connection without a secondary server
  • Pullbundles are only used for clients running Mercurial 4.6 as well.
  • push:
  • If 'server.streamunbundle' option is enabled, the server will directly apply the changes send by the changes. This avoids potentially large temporary files on the server side. It can also prevent concurrent pushes.
  • notify extension:
  • The 'maxdiffstat' option can be used to truncate long file lists similar to 'maxdiff' for the patch part of the email.
  • hgweb:
  • hgweb now shows date and user for operations that resulted in obsolete commit(s). For unstable commits, it shows the exact reason why they are considered unstable.
  • Server: header is now configurable using web.server-header option.
  • templates:
  • A new template keyword 'reporoot' which shows the root directory of the current repository. A new template function 'mailmap' which maps author fields based on values in a .mailmap file.
  • Other notable features:
  • revset: parse error now shows a hint where the error occurred
  • templates: parse error now shows a hint where the error occured
  • forget: new '--dry-run' and '--interactive' flags
  • copyfile: preserve stat info (mtime, etc.) when doing copies/renames
  • bundle2 format is documented and can be found using 'hg help internals.bundle2'
  • Backwards Compatibility Changes:
  • Support for connecting to Mercurial servers older than 0.9.1 has been removed.
  • Working-directory commands now respect "-X PATTERN" no matter if PATTERN matches explicitly-specified FILEs. For example, "hg add foo -X foo" no longer add the file "foo".
  • Support for the experimental manifestv2 format has been removed, as it was never completed and failed to meet expectations.
  • in output filename passed to archive/cat/export is taken as a start of a template expression.
  • The HTTP wire protocol server no longer accepts the "cmd" argument to control which command to run via HTTP POST bodies. The "cmd" argument must be specified on the URL query string.
  • Hgweb no longer reads form data in POST requests from multipart/form-data and application/x-www-form-urlencoded requests. Arguments should be specified as URL path components or in the query string in the URL instead.
  • Query string shorts in hgweb like "?cs=@" have been removed. Use URLs of the form "/:cmd" instead.
  • The HTTP client no longer accepts text/plain and application/hg-changegroup Content-Type values as a valid Mercurial command response. These should only be encountered on pre 1.0 Mercurial servers.
  • Performance Improvements:
  • hg manifest --all' is likely slower due to changing its implementation to respect storage interface boundaries. If you are impacted by this regression in a meaningful way, please make noise on the development mailing list and it can be dealt with
  • hg diff' is much faster for larger repositories. 40% improvements have been reported. Other operations using diffs like hgweb also benefit
  • Bug Fixes:
  • grep: fixes erroneous output of grep in forward order (issue3885)
  • dirstate: drop explicit files that shouldn't match (BC) (issue4679)
  • procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
  • bookmarks: test for exchanging long bookmark names (issue5165)
  • templater: drop symbols which should be overridden by new 'ctx' (issue5612)
  • clone: updates the help text for hg clone -{r,b} (issue5654)
  • bundle: updates the help text for hg bundle (issue5744)
  • histedit: make histedit's commands accept revsets (issue5746)
  • releasenotes: replace abort with warning while parsing (issue5775)
  • context: skip path conflicts by default when clearing unknown file (issue5776)
  • templatekw: switch most of showlist template keywords to new API (issue5779)
  • rebase: do not consider extincts for divergence detection (issue5782)
  • revert: use an exact matcher in interactive diff selection (issue5789)
  • subrepo: don't attempt to share remote sources (issue5793)
  • lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)
  • showconfig: allow multiple section.name selectors (issue5797)
  • annotate: do not poorly split lines at CR (issue5798)
  • convert: avoid closing ui.fout in subversion code (issue5807)
  • setdiscovery: back out changeset 5cfdf6137af8 (issue5809)
  • fsmonitor: layer on another hack in bser.c for os.stat() compat (issue5811)
  • notify: access the initial revision on an unfiltered repository (issue5821)
  • rebase: fix issue 5494 also with --collapse
  • date: fixed a bug in parsing months like 'Feb 2018', 'Apr 2018'
  • diffhelper: rename module to avoid conflicts with ancient C module (issue5846)
  • infinitepush: ensure fileindex bookmarks use '/' separators (issue5840)
  • import: fix crash on --exact check of empty commit (issue5702)
  • hgweb: reuse body file object when hgwebdir calls hgweb (issue5851)
  • debugcolor: fix crash by empty styles (issue5856)
  • hgweb: discard Content-Type header for 304 responses (issue5844)
  • hgweb: allow Content-Security-Policy header on 304 responses (issue5844)
  • paper: don't register click handlers with inline javascript (issue5812)
  • httppeer: detect redirect to URL without query string (issue5860)
  • filelog: don't crash on invalid copy metadata (issue5748)
  • New experimental features:
  • Each release there are lot of new features added which are hidden under the EXPERIMENTAL tag as the behavior may change in future or the feature is not complete yet. The experimental features added in this cycle are
  • narrow extension:
  • Allows to create clones which fetch history data for only a subset of files. This experimental extension is now distributed with Mercurial.
  • remotenames extension:
  • Shows remotebookmarks and remotebranches in the UI. This experimental extension is now distributed with Mercurial.
  • infinitepush extension:
  • Allows to store some pushes in a remote blob store on the server and to serve commits from remote blob store. The revisions are stored on disk or in everstore, the metadata are stored in sql or on disk. This experimental extension is now distributed with Mercurial.
  • fix extension:
  • Allows to rewrite file content in changesets or working copy. For example, automatically applying formatting fixes to modified lines of code. This experimental extension is now distributed with Mercurial.
  • lfs extension:
  • An alternative to the largefiles extension, which uses the git-lfs protocol. This experimental extension is now distributed with Mercurial.
  • API Changes:
  • Content from mercurial.hgweb.protocol has been moved to mercurial.wireprotoserver.
  • Content from mercurial.sshserver has been moved into mercurial.wireprotoserver.
  • sshserver no longers looks for wire protocol command handlers in methods named do_<command>. Use @wireproto.wireprotocommand to declare wire protocol command handler functions.
  • Log-related utility functions has been renamed as follows:
  • cmdutil.loglimit -> logcmdutil.getlimit
  • cmdutil.diffordiffstat -> logcmdutil.diffordiffstat
  • cmdutil._changesetlabels -> logcmdutil.changesetlabels
  • cmdutil.changeset_printer -> logcmdutil.changesetprinter - cmdutil.jsonchangeset = logcmdutil.jsonchangeset
  • cmdutil.changeset_templater -> logcmdutil.changesettemplater
  • cmdutil.logtemplatespec -> logcmdutil.templatespec
  • cmdutil.makelogtemplater -> logcmdutil.maketemplater
  • cmdutil.show_changeset -> logcmdutil.changesetdisplayer
  • cmdutil.getlogrevs -> logcmdutil.getrevs
  • cmdutil.getloglinerangerevs -> logcmdutil.getlinerangerevs
  • cmdutil.displaygraph -> logcmdutil.displaygraph
  • cmdutil.graphlog -> logcmdutil.graphlog
  • cmdutil.checkunsupportedgraphflags -> logcmdutil.checkunsupportedgraphflags
  • cmdutil.graphrevs -> logcmdutil.graphrevs
  • cmdutil._makenofollowlogfilematcher -> logcmdutil._makenofollowfilematcher
  • The following deprecated methods have been removed from context, with replacements:
  • unstable() -> orphan()
  • bumped() -> phasedivergent()
  • divergent() -> contentdivergent()
  • troubled() -> isunstable()
  • troubles() -> instabilities()
  • The following deprecated methods have been removed from obsolete, with replacements:
  • addprecursors() -> _addpredecessors()
  • obsstore.precursors -> obsstore.predecessors
  • allprecursors() -> obsutil.allprecursors()
  • allsuccessors() -> obsutil.allsuccessors()
  • marker() -> obsutil.marker
  • getmarkers() -> obsutil.getmarkers()
  • exclusivemarkers() -> obsutil.exclusivemarkers()
  • foreground() -> obsutil.foreground()
  • successorssets() -> obsutil.successorsset()
  • unstable() -> orphan()
  • bumped() -> phasedivergent()
  • divergent() -> contentdivergent()
  • The following deprecated methods have been removed from obsutil: marker.precnode() and allprecursors(). Use marker.prednode() and allpredecessors() instead.
  • beginparentchange() and endparentchange() have been replaced by the parentchange context manager.
  • The deprecated localrepo.walk() has been removed, and replaced by repo[node].walk().
  • The following deprecated methods have been removed from bookmarks: __setitem__(), __delitem__(), update(), and recordchange(). Use bookmarks.applychanges() instead.
  • The cmdutil._revertprefetch() hook point for prefetching stored files has been replaced by the command agnostic cmdutil._prefetchfiles(). The new function takes a list of files, instead of a list of lists of files.
  • sshpeer.sshpeer.__init__ now receives arguments describing an existing connection instead of creating a connection itself.
  • sshpeer.sshpeer renamed to sshpeer.sshv1peer.
  • wireproto.pushres and wireproto.pusherr now explicitly track stdio output.
  • redirect() and restore() have been removed from the wire protocol handler interface. Use mayberedirectstdio() instead.
  • The _client() method of the wire protocol handler interface has been renamed to client().
  • Wire protocol command handlers now return a wireprototypes.bytesresponse instead of a raw bytes instance. Protocol handlers will continue handling bytes instances. However, any extensions wrapping wire protocol commands will need to handle the new type.
  • SSH protocol handler now advertises its name internally as "ssh-v1" instead of "ssh."
  • File prefetching is now handled by registering a callback with scmutil.fileprefetchhooks.
  • HTTP protocol handlers now advertises its internal name as "http-v1" instead of "http".
  • context.basectx no longer implements __int__. Context instances will no longer cast to ints. Consumers should call ctx.rev() instead.
  • templatekw.showdict() and showlist() are deprecated in favor of new (context, mapping) API. Switch the keyword function to new API and use templatekw.compatdict() and compatlist() instead.
  • hgweb_mod.perms and wireproto.permissions have been removed. Wire protocol commands should declare their required permissions in the @wireprotocommand decorator.
  • The WSGI request object no longer exposes a form attribute containing parsed query string data. Use the qsparams attribute instead.
  • hgweb.hgweb_mod.permhooks no longer take a wsgirequest instance as an argument.
  • hgweb @webcommand functions must use the new response object passed in via "web.res" to initiate sending of a response. The hgweb WSGI application will no longer start sending the response automatically.
  • Various helper functions in hgweb.webutil no longer accept a templater instance. Access the templater through the "web" argument instead.
  • Various functions in hgweb.webutil now take a modern request object instead of "wsgirequest".
  • webcommand functions now only receive a single argument. The request and templater instances can be accessed via the "req" and "templater" attributes of the first argument. Note that the request object is different from previous Mercurial releases and consumers of the previous "req" 2nd argument will need updating to use the new API.
  • The old "wsgirequest" class for handling everything WSGI in hgweb has been replaced by separate request and response types. Various high-level functions in the hgweb WSGI applications now receive these new types as arguments instead of the old "wsgirequest" type.
  • The render(mapping) method of the templater has been renamed to renderdefault(mapping).
  • httppeer.httppeer.__init__ now takes additional arguments. Instances should be obtained by calling httppeer.instance() or httppeer.makepeer() instead.
  • The templater is no longer callable. Use templater.generate(t, mapping) instead of templater(t, **pycompat.strkwargs(mapping)).
  • templatekw._showlist() is deprecated in favor of templateutil._showcompatlist(), which takes context in place of templ.
  • Several generic string helper functions have been moved to utils.stringutil module.
  • The util.Abort alias has been removed. Use error.Abort.
  • merge.update() and merge.applyupdates() now return a class with named attributes instead of a tuple. Switch consumers to access elements by name instead of by offset.
  • Utility functions related to process/executable management have been moved to utils.procutil module.
  • localrepo.localrepository.featuresetupfuncs has been renamed to localrepo.featuresetupfuncs.
  • localrepo.localrepository.filterpats was renamed to localrepo.localrepository._filterpats.
  • Template filters should declare input data type and/or catch AttributeError, ValueError, TypeError, etc. as needed. See the doc of "registrar.templatefilters" for details.
  • "wireproto" module no longer re-exports various types used to define responses to wire protocol commands. Access these types from the "wireprototypes" module.
  • filelog.parsemeta() and filelog.packmeta() have been moved to the revlog module.
  • procutil.popen() no longer supports text mode I/O.
  • hook.hook() and hook.runhooks() may return a negative integer to denote that the process was killed by signal.
  • filelog.filelog is now a standalone class and doesn't inherit from revlog. Instead, it wraps a revlog instance at self._revlog. This change was made in an attempt to formalize storage APIs and prevent revlog implementation details leaking through to callers.
  • The fp argument is removed from cmdutil.export(). Use cmdutil.exportfile() instead.
  • cmdutil.export() takes a formatter as an argument.
  • patch.extract() is now a context manager. Callers no longer have to worry about deleting the temporary file it creates, as the file is tied to the lifetime of the context manager.
  • The wire protocol peer's iterbatch() for bulk executing commands has been removed. Use peer.commandexecutor() instead.

New in Mercurial 4.5.3 (Apr 5, 2018)

  • Bug Fixes:
  • rebase: on abort, don't strip commits that didn't need to be rebased (issue5822)
  • hgweb: garbage collect on every request
  • amend: abort if unresolved merge conflicts found (issue5805)

New in Mercurial 4.5.2 (Mar 7, 2018)

  • SECURITY FIXES:
  • All versions of Mercurial prior to 4.5.2 have vulnerabilities in the HTTP server that allow permissions bypass to: perform writes on repositories that should be read-only and perform reads on repositories that shouldn't allow read access
  • The nature of the vulnerabilities is:
  • Wire protocol commands that didn't explicitly declare their permissions had no permissions checking done. The web.{allow-pull, allow-push, deny_read, etc} config options governing access control were never consulted when running these commands. This allowed permissions bypass for impacted commands.
  • The batch wire protocol command did not list its permission requirements nor did it enforce permissions on individual sub-commands.
  • Mercurial 4.5.2 fixes these vulnerabilities by:
  • Performing permissions checking on all wire protocol commands, not just commands that list their permissions.
  • Checking permissions on sub-commands issued to the batch command.
  • BACKWARDS COMPATIBILITY CHANGES:
  • The "batch" wire protocol command now enforces permissions of each invoked sub-command. Wire protocol commands must define their operation type or the "batch" command will assume they can write data and will prevent their execution on HTTP servers unless the HTTP request method is POST, the server is configured to allow pushes, and the (possibly authenticated) HTTP user is authorized to perform a push.
  • Wire protocol commands not defining their operation type in "wireproto.PERMISSIONS" are now assumed to be used for "push" operations and access control to run those commands is now enforced accordingly.
  • BUG FIXES:
  • fileset: don't abort when running copied() on a revision with a removed file
  • date: fix parsing months
  • setup: only allow Python 3 from a source checkout (issue5804)
  • annotate: do not poorly split lines at CR (issue5798)
  • subrepo: don't attempt to share remote sources (issue5793)
  • subrepo: activate clone pooling to enable sharing with remote URLs
  • changegroup: do not delta lfs revisions
  • revlog: do not use delta for lfs revisions
  • revlog: resolve lfs rawtext to vanilla rawtext before applying delta

New in Mercurial 4.5 RC (Jan 23, 2018)

  • NEW FEATURES:
  • revert --interactive:
  • The revert command now accepts the flag --interactive to allow reverting only some of the changes to the specified files.
  • Accessing hidden changesets:
  • Set config option 'experimental.directaccess = True' to access hidden changesets from read only commands.
  • githelp extension:
  • The githelp extension provides the hg githelp command. This command attempts to convert a git command to its Mercurial equivalent. The extension can be useful to Git users new to Mercurial.
  • Largefiles changes:
  • largefiles: add a 'debuglfput' command to put largefile into the store
  • largefiles: add support for 'largefiles://' url scheme
  • largefiles: allow to run 'debugupgraderepo' on repo with largefiles
  • largefiles: convert EOL of hgrc before appending to bytes IO
  • largefiles: explicitly set the source and sink types to 'hg' for lfconvert
  • largefiles: modernize how capabilities are added to the wire protocol
  • HGWEB CHANGES:
  • hgweb now shows more information about commits: phase (if it's not public), obsolescence status (with a short explanation and links to the successors) and instabilities (e.g. orphan, phase-divergent or content-divergent).
  • Client-side graph code has been simplified by delegating more work to the backend, so /graph page is now more in sync with /log page, visually and feature-wise. Unfortunately, this code change means that 3rd-party themes for 4.5+ are required to have graphentry.tmpl template available (copy it from the base theme if you don't use %include and then reference it in map file) and render entries in graph.tmpl -- look at one of the core themes to see what it needs to look like. JS functions that create graph vertices and edges are now available in Graph.prototype, making it possible to call the original functions from custom theme-specific functions if needed.
  • Graph now shows different symbols for normal, branch-closing, obsolete and unstable commits, and marks currently checked out commit with a circle around its graph node.
  • There's also now json-graph API endpoint that can be used for rendering commit graph in 3rd-party applications.
  • Other Changes:
  • When interactive revert is run against a revision other than the working directory parent, the diff shown is the diff to <em>apply</em> to the working directory, rather than the diff to <em>discard</em> from the working copy. This is in line with related user experiences with 'git' and appears to be less confusing with 'ui.interface=curses'.
  • Let 'hg rebase' avoid content-divergence by skipping obsolete changesets (and their descendants) when they are present in the rebase set along with one of their successors but none of their successors is in destination.
  • A new experimental config flag, 'rebase.experimental.inmemory', makes rebase perform an in-memory merge instead of doing it on-disk in the working copy.
  • The HGPLAINEXCEPT environment variable can now include color to allow automatic output colorization in otherwise automated environments.
  • A new unamend command in uncommit extension which undoes the effect of the amend command by creating a new changeset which was there before amend and moving the changes that were amended to the working directory.
  • A '--abort' flag to merge command to abort the ongoing merge.
  • An experimental flag '--rev' to 'hg branch' which can be used to change branch of changesets.
  • bundle2 read I/O significantly improved
  • bundle2 memory use significantly reduced during read
  • clonebundle: it is now possible to serve the clonebundle using a git-lfs compatible server.
  • templatefilters: add slashpath() to convert path separator to slash (issue5572)
  • A new experimental config flag, 'inline-color-diff', adds within-line color diff capacity
  • histedit: add support to output nodechanges using formatter to help with editor integrations
  • BACKWARDS COMPATIBILITY CHANGES:
  • log --follow-first -rREV, which is deprecated, now follows the first parent of merge revisions from the specified REV just like log --follow -rREV.
  • log --follow -rREV FILE.. now follows file history across copies and renames.
  • transaction: register summary callbacks only at start of transaction
  • hgweb's graph view no longer supports browsers that lack <canvas> support
  • hgweb: only include graph-related data in jsdata variable on /graph pages
  • graphlog: add another graph node type, unstable, using character *
  • remove: print message for each file in verbose mode only while using '-A'
  • BUG FIXES:
  • Bookmark, whose name is longer than 255, can again be exchanged again between 4.4+ client and servers (issue5165)
  • The convert extension works with bzr < 2.6.0 again (issue5733)
  • Mercurial will now attempt to use hardlinks on NTFS on Windows (issue4580)
  • The revset x^:: is now correctly parsed as (x^):: instead of being an error (issue5764)
  • Setting the diff.noprefix configuration option no longer breaks the --stat flag on hg diff (issue5759)
  • hg outgoing now honors :pushurl paths from hgrc (issue5365)
  • log: translate column labels at once (issue5750)
  • patch: improve heuristics to not take the word diff as header (issue1879)
  • templater: look up symbols/resources as if they were separated (issue5699)
  • http and ssh: support for emitting extra debug logs about requests as they happen
  • API CHANGES:
  • bundlerepo.bundlerepository.bundle and bundlerepo.bundlerepository.bundlefile are now prefixed with an underscore.
  • Rename bundlerepo.bundlerepository.bundlefilespos to _cgfilespos.
  • dirstate no longer provides a 'dirs()' method. To test for the existence of a directory in the dirstate, use 'dirstate.hasdir(dirname)'.
  • mapping does not contain all template resources. use context.resource() in template functions.
  • text=False|True option is dropped from the vfs interface because of Python 3 compatibility issue. Use util.tonativeeol/fromnativeeol() to convert EOL manually.
  • wireproto.streamres.__init__ no longer accepts a reader argument. Use the gen argument instead.
  • exchange.getbundlechunks() now returns a 2-tuple instead of just an iterator.
  • bundle2 parts are no longer seekable by default
  • memfilectx: the changectx argument is now mandatory in constructor

New in Mercurial 4.4.2 (Dec 1, 2017)

  • Notable changes:
  • Stricter command option parsing:
  • Mercurial can now optionally parse "early" options (-R/--repository, --cwd, --config, --debugger, and --profile) more strictly, for more secure integration with tools that invoke 'hg' commands. Setting HGPLAIN=+strictflags will parse these options more strictly, which prevents them from being injected as arguments to other flags.
  • Bug fixes:
  • hg amend' now correctly handles deleted and removed files, as well as subrepos. (issue5732, issue5677)
  • largefiles now correctly handles dropped standin files when updating largefiles.
  • Fixed an issue with deleting symlinks to directories when ui.origbackuppath is set. (issue5731)
  • Performance improvements:
  • Improved performance in path conflict checking introduced in Mercurial 4.4. (issue5716)

New in Mercurial 4.4.1 (Nov 8, 2017)

  • Notable changes:
  • Git and Subversion subrepos have been disabled by default to mitigate a potential security risk if files overlapping with a subrepo managed to be committed to a repository.
  • Subrepos are now more paranoid about symlink traversal.
  • The share extension handles drive letters on Windows better.
  • It is possible that a specially malformed repository can cause Git subrepositories to run arbitrary code in the form of a .git/hooks/post-update script checked in to the repository in Mercurial 4.4 and earlier. Typical use of Mercurial prevents construction of such repositories, but they can be created programmatically.

New in Mercurial 4.4 (Nov 6, 2017)

  • NOTABLE CHANGES:
  • Control whitespace settings for annotation on hgweb:
  • annotate URLs on hgweb now accept query string arguments to influence how whitespace changes impact results.
  • The arguments "ignorews," "ignorewsamount," "ignorewseol," and "ignoreblanklines" now have the same meaning as their [annotate] config section counterparts. Any provided setting overrides the server default.
  • HTML checkboxes have been added to the paper and gitweb themes to expose current whitespace settings and to easily modify the current view.
  • Fast, heuristic copy-tracing:
  • A new fast heuristic algorithm for copytracing which assumes that the files moves are either
  • renames in the same directory
  • moves in other directories with same names
  • You can use this algorithm by setting 'experimental.copytrace=heuristics'. This setting performs full copytracing if both source and destination branches contains non-public changesets only
  • Other changes:
  • Estimated time is more accurate with non-linear progress
  • "hg status -v" can now show unfinished state.
  • Added '--ignore-space-at-eol' diff option to ignore whitespace differences at line endings.
  • show: use consistent node length in views
  • show: decrease minimum displayed hash length from 5 to 4
  • A new uncommit extension which provides 'hg uncommit' using which one can uncommit part or all of the changeset. This command undoes the effect of a local commit, returning the affected files to their uncommitted state.
  • hg clone --uncompressed' uses clone bundles when possible
  • hg annotate --skip' now prints a '*' on lines with skipped revisions
  • New 'commands.update.check' feature to adjust constraints on when 'hg update' will allow updates with a dirty working copy.
  • Add an experimental -L/--line-range FILE,FROMLINE:TOLINE option to 'hg log' command to follow the history of files by line range. In combination with -p/--patch option, only diff hunks within specified line range will be displayed. Feedback, especially on UX aspects, is welcome.
  • Print warning when fsmonitor isn't being used on a large repository
  • BACKWARDS COMPATIBILITY CHANGES:
  • The config option for copytrace 'experimental.disablecopytrace' is now replaced with 'experimental.copytrace' which defaults to 'on'. If you need to turn off copytracing, add '[experimental] copytrace = off' to your config.
  • 'hg clone --stream' should now be used instead of --uncompressed. --uncompressed is marked as deprecated and is an alias for --stream. There is no schedule for elimination of --uncompressed.
  • The 'experimental.updatecheck' name for the new 'commands.update.check' feature is now deprecated, and will be removed after this release.
  • Mercurial subrepositories are now shared instead of cloned when the parent repository is shared. This prevents dangling subrepository references in the share source. Previously shared repositories with cloned subrepositories will continue to function unchanged.
  • Push no longer triggers a pushkey hook when updating phases. Use the new 'txnclose-phase' and 'txnclose-phase' hooks instead. (Applies when both server and client use version 4.4 or above).
  • BUG FIXES:
  • Core rebase algorithm has been rewritten to be more robust (issue5578, issue5630)
  • Creating a share of a repository with a Mercurial subrepository will now share the subrepository (issue5675)
  • PERFORMANCE IMPROVEMENTS:
  • improved performance when many aliases are defined
  • API CHANGES:
  • remove peer.batch(). Replace with peer.iterbatch().
  • OTHER CHANGES:
  • @peer.batchable can no longer emit local values
  • @peer.batchable functions must now yield exactly 2 values
  • Rename attributes on sshpeer to reflect peer API
  • peer.peerrepository has been removed. Use repository.peer abstract base class to represent a peer repository.
  • revset.stringset() now takes 'order' as the last argument.

New in Mercurial 4.3.3 (Oct 2, 2017)

  • Prevent crashes when clearing progress bar. (issue5684)
  • Rebase: move bookmarks with --keep (issue5682)

New in Mercurial 4.3.2 (Sep 19, 2017)

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

New in Mercurial 4.3.1 (Aug 14, 2017)

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

New in Mercurial 4.2.2 (Jul 6, 2017)

  • This is a regularly-scheduled bugfix release:
  • largefiles: avoid a crash when archiving a subrepo with largefiles disabled
  • rebase: also test abort from pretxnclose error
  • rebase: backed out changes 2519994d25ca and cf8ad0e6c0e4 (issue5610)
  • rebase: reinforce testing around precommit hook interrupting a rebase

New in Mercurial 4.2.1 (Jun 6, 2017)

  • This is a regularly-scheduled bugfix release:
  • hg graft now works when grafting across merges that were problematic before (b4e1e30528c7)
  • A race condition in hg status was partially fixed (issue5584)
  • The message about deprecated SHA-1 hashes in the [hostfingerprints] config section now references the correct syntax for replacing them with SHA-256 hashes (issue5559)

New in Mercurial 4.2 RC (May 3, 2017)

  • Notable changes:
  • Pager support has been moved into core and is now enabled by default. This is now controlled with the ui.paginate setting.
  • Note that in 4.2-rc, the ui.paginate option was named pager.enable. The old name has been dropped in the final release. If you had turned pagination off using pager.enable=False, please update your config.
  • Color support has also been moved into core and is now enabled by default (the ui.color setting now defaults to 'auto').
  • The new experimental 'show' extension provides a way to view various information about your repository in an ergonomic way. It is deliberately designed for human consumption and not for scripting, so it doesn't carry the same backward compatibility guarantees as other commands. See 'hg help -e show' for more information.
  • commands:
  • Pager support has been added to the 'branches', 'files', 'status', 'summary', and 'tags' commands, as well as the '--patch', '--list', and '--stat' options of hg shelve.
  • bisect: set a blockedtag when running the check command
  • bookmarks: check HG_PENDING strictly
  • branches: populate all template keywords in formatter
  • commandserver: handle backlog before exiting
  • commandserver: prevent unlinking socket twice
  • commit: optionally strip quotes from commit template (BC)
  • diff: add --binary option for git mode diffs
  • help: add pointer how to narrow list of resolved/unresolved files (issue5469)
  • pager: advertise the config option in the default hgrc
  • pager: avoid shell=True on subprocess.Popen for better errors (issue5491)
  • pager: don't terminate with extreme prejudice on SIGPIPE (BC)
  • pager: exit cleanly on SIGPIPE (BC)
  • pager: improve support for various flavors of 'more' on Windows
  • pager: use less as a fallback on Unix
  • pull: abort pull --update if config requires destination (issue5528)
  • serve: add support for Mercurial subrepositories
  • status: handle more node indicators in buildstatus
  • status: support commands.status.relative config
  • update: accept --merge to allow merging across topo branches (issue5125)
  • verify: fix length check
  • core:
  • bundle2: ignore errors seeking a bundle after an exception (issue4784)
  • checkheads: upgrade the obsolescence postprocessing logic (issue4354)
  • color: insert color code after every "e[0m" (issue5413)
  • color: sync text attributes and buffered text output on Windows (issue5508)
  • config: use "churn" as an example extension
  • config: drop pager from the recommended extension
  • context: optimize linkrev adjustment in blockancestors() (issue5538)
  • crecord: avoid setting non-existing SIGTSTP signal on windows (issue5512)
  • debian: configure editor and pager to sensible-editor and sensible-pager by default
  • dispatch: ignore further SIGPIPE while handling KeyboardInterrupt
  • dispatch: protect against malicious 'hg serve --stdio' invocations (SEC)
  • dispatch: start profiling earlier
  • filemerge: optionally strip quotes from merge marker template (BC)
  • formatter: add support for changeset templating
  • formatter: support json formatting of long type
  • graphlog: draw multiple edges towards null node (issue5440)
  • graphlog: optionally strip quotes from graphnode template (BC)
  • localrepo: deprecate 'repo.join' in favor of 'repo.vfs.join'
  • localrepo: deprecate 'repo.opener' (API)
  • localrepo: deprecate 'wfile'
  • localrepo: deprecated 'repo.wopener' (API)
  • match: adding support for matching files inside a directory
  • packaging: add make target for linux wheels
  • patch: make diff in git mode respect --text option (issue5510)
  • plain: ignore [commands] config
  • profiling: add statprof support for Chrome trace viewer rendering
  • progress: retry ferr.flush() and .write() on EINTR (issue5532)
  • py3: stop exporting urlparse from pycompat and util (API)
  • rcutil: let environ override system configs (BC)
  • rcutil: let rccomponents return different types of configs (API)
  • rcutil: move scmutil.*rcpath to rcutil (API)
  • rcutil: rename rcpath to rccomponents (API)
  • rcutil: split osrcpath to return default.d paths (API)
  • record: update help message to use operation instead of "record" (issue5432)
  • revlog: avoid applying delta chain on cache hit
  • revset: split language services to revsetlang module (API)
  • revset: stop supporting plain list as input set (API)
  • revset: stop supporting predicate that returns plain list (API)
  • setup: use setuptools on Windows (issue5400)
  • smartset: move set classes and related functions from revset module (API)
  • sshpeer: try harder to snag stderr when stdout closes unexpectedly
  • templatefilter: add support for 'long' to json()
  • templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
  • templatekw: make join() escape values of extras (BC) (issue5504)
  • templater: make pad() strip color codes before computing width (issue5416)
  • test-profile: allow negative time in JSON output (issue5542)
  • track-tags: write all tag changes to a file
  • util: always force line buffered stdout when stdout is a tty (BC)
  • vfs: extract 'vfs' class and related code to a new 'vfs' module (API)
  • extensions:
  • histedit: log the time taken to read in the commands list
  • histedit: make check for unresolved conflicts explicit (issue5545)
  • histedit: modify rollup to discard date from the rollup commit (issue4820)
  • histedit: use safecleanupnode in _aborthistedit (issue5500)
  • largefiles: add copytostore() fstandin argument to replace readstandin() (API)
  • largefiles: add lfile argument to updatestandin() for efficiency (API)
  • largefiles: make copytostore() accept only changectx as the 2nd argument (API)
  • largefiles: omit updating newly added standin at linear merging
  • largefiles: remove unused keyword argument of copytostore() (API)
  • largefiles: replace hashrepofile by hashfile (API)
  • largefiles: set the extension as enabled locally after a share requiring it
  • patchbomb: add config knob to generate flags by template (issue5354)
  • patchbomb: drop internal option for pbranch extension (API)
  • patchbomb: use modern pager to display -n/--test result (BC)
  • rebase: abort hg pull --rebase if rebase.requiredest is set (issue5514)
  • rebase: abort if *any* commit in rebase set is public
  • rebase: add flag to require destination
  • rebase: allow aborting if last-message.txt is missing
  • rebase: allow destination-free continue and abort (issue5513)
  • rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
  • rebase: unhide original working directory node as well (issue5219)
  • shelve: add -n/--name option to unshelve (issue5475)
  • shelve: add logic to preserve active bookmarks
  • show: new extension for displaying various repository data
  • hgweb:
  • hgweb: add a "patch" query parameter to filelog command
  • hgweb: do not show "descending" link in followlines UI for filelog heads
  • hgweb: handle a "descend" query parameter in filelog command
  • hgweb: handle a "linerange" request parameter in filelog command
  • hgwebdir: add support for explicit index files
  • Behavior changes:
  • commit: optionally strip quotes from commit template (BC)
  • filemerge: optionally strip quotes from merge marker template (BC)
  • graphlog: optionally strip quotes from graphnode template (BC)
  • pager: don't terminate with extreme prejudice on SIGPIPE (BC)
  • pager: exit cleanly on SIGPIPE (BC)
  • patchbomb: use modern pager to display -n/--test result (BC)
  • rcutil: let environ override system configs (BC)
  • rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
  • templatekw: make join() escape values of extras (BC) (issue5504)
  • util: always force line buffered stdout when stdout is a tty (BC)
  • 1.7. Internal API changes
  • largefiles: add copytostore() fstandin argument to replace readstandin() (API)
  • largefiles: add lfile argument to updatestandin() for efficiency (API)
  • largefiles: make copytostore() accept only changectx as the 2nd argument (API)
  • largefiles: remove unused keyword argument of copytostore() (API)
  • largefiles: replace hashrepofile by hashfile (API)
  • localrepo: deprecate 'repo.opener' (API)
  • localrepo: deprecated 'repo.wopener' (API)
  • patchbomb: drop internal option for pbranch extension (API)
  • py3: stop exporting urlparse from pycompat and util (API)
  • rcutil: let rccomponents return different types of configs (API)
  • rcutil: move scmutil.*rcpath to rcutil (API)
  • rcutil: rename rcpath to rccomponents (API)
  • rcutil: split osrcpath to return default.d paths (API)
  • revset: split language services to revsetlang module (API)
  • revset: stop supporting plain list as input set (API)
  • revset: stop supporting predicate that returns plain list (API)
  • smartset: move set classes and related functions from revset module (API)
  • templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
  • vfs: extract 'vfs' class and related code to a new 'vfs' module (API)

New in Mercurial 4.1.3 (Apr 18, 2017)

  • This is an out of cycle release to address a security issue:
  • hg serve --stdio could be tricked into granting authorized users access to the Python debugger. Thanks to Jonathan Claudius of Mozilla for reporting this issue

New in Mercurial 4.1.2 (Apr 18, 2017)

  • Mercurial should work inside IIS on Windows again. (issue5493)
  • zstd support now refuses to work on old bundle formats. (issue5506)
  • Merges involving subrepositories no longer crash in some cases. (issue5505)
  • Checking for new heads during push is no longer accidentally quadratic

New in Mercurial 4.1.1 (Mar 3, 2017)

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

New in Mercurial 4.1 (Mar 3, 2017)

  • commands:
  • commands: config option to control bundle compression level
  • crecord: add an experimental option for space key to move cursor down
  • crecord: rewrite status line text (BC)
  • diff: add experimental support for more git-diff extended diff features
  • graft: support grafting changes to new file in renamed directory (issue5436)
  • help: show help for disabled extensions (issue5228)
  • help: update help for 'hg update' which was misleading (issue5427)
  • merge: fix crash on criss cross merge with dir move and delete (issue5020)
  • summary: add evolution "troubles" information to summary output
  • summary: use the same labels as log command in "parent: " line
  • templates: display evolution "troubles" in command line style
  • core:
  • changelog: keep track of file end in appender (issue5444)
  • dispatch: stop supporting non-use of @command (API)
  • hook: do not redirect stdout/err/in to ui while running in-process hooks (BC)
  • httppeer: advertise and support application/mercurial-0.2
  • localrepo: experimental support for non-zlib revlog compression
  • manifest: add bundlemanifestlog support
  • manifest: add unionmanifestlog support
  • manifest: make revlog verification optional
  • patch: add experimental config knob for displaying the index header
  • patch: add similarity config knob in experimental section
  • patch: add label for coloring the index extended header
  • patch: add label for coloring the similarity extended header
  • profiling: make statprof the default profiler (BC)
  • profiling: use vendored statprof and upstream enhancements (BC)
  • revlog: REVIDX_EXTSTORED flag
  • revlog: add clone method
  • revlog: ensure that flags do not overflow 2 bytes
  • revlog: flag processor
  • revlog: inline start() and end() for perf reasons
  • revlog: make compressed size comparisons consistent
  • revlog: merge hash checking subfunctions
  • revlog: move decompress() from module to revlog class (API)
  • revlog: optimize _chunkraw when startrev==endrev
  • revlog: pass revlog flags to addrevision
  • revlog: reorder index accessors to match data structure order
  • revlog: use compression engine API for compression
  • revlog: use compression engine APIs for decompression
  • revset: add regular expression support to 'desc'
  • revset: make children() not look at p2 if null (issue5439)
  • run-tests: forward Python USER_BASE from site (issue5425)
  • server: move cmdutil.service() to new module (API)
  • templatekw: force noprefix=False to insure diffstat consistency (issue4755)
  • ui: check EOF of getpass() response read from command-server channel
  • ui: do not translate empty configsource() to 'none' (API)
  • ui: factor out ui.load() to create a ui without loading configs (API)
  • util: compression APIs to support revlog compression and decompression
  • util: declare wire protocol support of compression engines
  • wireproto: advertise supported media types and compression formats
  • wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)
  • wireproto: perform chunking and compression at protocol layer (API)
  • extensions:
  • convert: add config option to control storing original revision
  • convert: add config option to copy extra keys from Git commits
  • convert: config option for git rename limit
  • convert: config option to control Git committer actions
  • rebase: calculate ancestors for --base separately (issue5420)
  • rebase: check for conflicts before continuing
  • rebase: fail-fast the pull if working dir is not clean (BC)
  • shelve: allow multiple shelves with --patch and --stat
  • shelve: choose a legal shelve name when no name is passed (issue5112)
  • shelve: make --keep option survive user intervention (issue5431)
  • shelve: make unshelve not crash when there are missing files (issue4176)
  • hgweb:
  • hgweb: link to raw-file on annotation page (BC)
  • hgweb: make log streams compatible with command server
  • hgweb: restore ascending iteration on revs in filelog web command
  • hgweb: support Content Security Policy
  • chg:
  • chg: send type information via S channel (BC)
  • chg: support long socket path
  • chgserver: make S channel support pager request
  • chgserver: override runcommand
  • Behavior Changes:
  • chg: send type information via S channel (BC)
  • crecord: rewrite status line text (BC)
  • hgweb: link to raw-file on annotation page (BC)
  • hook: do not redirect stdout/err/in to ui while running in-process hooks (BC)
  • profiling: make statprof the default profiler (BC)
  • profiling: use vendored statprof and upstream enhancements (BC)
  • rebase: fail-fast the pull if working dir is not clean (BC)
  • wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)
  • Internal API Changes:
  • bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
  • bookmarks: rename 'compare()' to 'comparebookmarks()' (API)
  • revlog: move decompress() from module to revlog class (API)
  • server: move cmdutil.service() to new module (API)
  • ui: do not translate empty configsource() to 'none' (API)
  • ui: factor out ui.load() to create a ui without loading configs (API)
  • util: remove compressors dict (API)
  • util: remove decompressors dict (API)
  • wireproto: perform chunking and compression at protocol layer (API)
  • dispatch: stop supporting non-use of @command (API)

New in Mercurial 4.0.2 (Jan 5, 2017)

  • This is a regularly-scheduled bugfix release.
  • demandimport: do not raise ImportError for unknown item in fromlist
  • posix: make poll() restart on interruption by signal (issue5452)
  • hgweb: add missing slash to file log url in rss style

New in Mercurial 4.0.1 (Dec 2, 2016)

  • This is a regularly-scheduled bugfix release:
  • hgweb: cache fctx.parents() in annotate command (issue5414)
  • vfs, scmutil: ignore EPERM at os.utime, which avoids ambiguity (issue5418)

New in Mercurial 4.0 RC (Nov 1, 2016)

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

New in Mercurial 3.9.2 (Oct 7, 2016)

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

New in Mercurial 3.9.1 (Oct 7, 2016)

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

New in Mercurial 3.9 RC (Aug 1, 2016)

  • COMMANDS:
  • annotate: handle empty files earlier
  • annotate: optimize line counting
  • bookmarks: abort 'push -B .' when no active bookmark
  • bookmarks: add 'hg pull -B .' for pulling the active bookmark (issue5258)
  • bookmarks: jettison bmstore's write() method per deprecation policy
  • bookmarks: make writing files out avoid ambiguity of file stat
  • commandserver: add new forking server implemented without using SocketServer
  • commandserver: backport handling of forking server from chgserver
  • commandserver: manually create file objects from socket
  • commandserver: send pgid in hello message
  • commandserver: use SOMAXCONN as queue size of pending connections
  • patch: allow copy information to be passed in
  • patch: define full messages for interactive record/revert
  • pull: add help information about pulling active bookmark
  • revert: don't backup if no files reverted in interactive mode (issue4793)
  • revert: use "discard"/"revert" verb when reverting interactively (issue5143)
  • update: fix bug when update tries to modify folder symlink
  • CORE:
  • date: accept broader range of ISO 8601 time specs
  • revlog: add a fast path for "ambiguous identifier"
  • templatekw: fix join format of parents keyword (issue5292)
  • templatekw: fix join format of revset() function
  • revset: build dict of extra sort options before evaluating set
  • transaction: turn lack of locking into a hard failure (API)
  • ui: don't fixup [paths] sub-options
  • ui: path option to declare which revisions to push by default
  • ui: provide official way to reset internal state per command
  • sslutil: allow TLS 1.0 when --insecure is used
  • sslutil: improve messaging around unsupported protocols (issue5303)
  • sslutil: work around SSLContext.get_ca_certs bug on Windows (issue5313)
  • sslutil: abort when unable to verify peer connection (BC)
  • sslutil: config option to specify TLS protocol version
  • sslutil: convert socket validation from a class to a function (API)
  • sslutil: don't access message attribute in exception (issue5285)
  • sslutil: more robustly detect protocol support
  • sslutil: move sslkwargs logic into internal function (API)
  • sslutil: per-host config option to define certificates
  • sslutil: remove sslkwargs() (API)
  • sslutil: remove ui from sslkwargs (API)
  • sslutil: require TLS 1.1+ when supported
  • sslutil: require serverhostname argument (API)
  • sslutil: stop checking for web.cacerts=! (BC)
  • sslutil: support defining cipher list
  • hg: copy [hostsecurity] options to remote ui instances (issue5305)
  • demandimport: avoid infinite recursion at actual module importing (issue5304)
  • rbc: fix superfluous rebuilding from scratch - don't abuse self._rbcnamescount
  • url: avoid re-issuing incorrect password (issue3210)
  • util: better handle '-' in version string (issue5302)
  • packagelib: do not remove packages directory in hggetversion (issue5262)
  • EXTENSIONS:
  • histedit: add optional parameter for determining intial editor line
  • largefiles: check file in the repo store before checking remotely (issue5257)
  • largefiles: make cloning not ask two times about password (issue4883)
  • largefiles: makes verify batching stat calls to remote
  • largefiles: remove additional blank line between methods in localstore
  • largefiles: remove additional blank lines
  • largefiles: send statlfile remote calls only for nonexisting locally files
  • rebase: do not abort if all changesets have equivalents in the destination
  • rebase: handle successor targets (issue5198)
  • rebase: introduce a rebaseruntime (RR) class
  • rebase: make collapsing use explicit logic to decide on the rev to reuse
  • rebase: pass repo, ui and opts objects to the RR class constructor
  • rebase: remove sortedstate-related confusion
  • shelve: make unshelve be able to abort in any case
  • keyword: avoid traceback when kwdemo is run outside a repo
  • rebase: turn rebase revs into set before filtering obsolete
  • extdiff: escape path for docstring (issue5301)
  • UNSORTED:
  • atomictempfile: add context manager support
  • atomictempfile: add read to the supported file operations
  • bashcompletion: show available command-line switches for aliases
  • chg: send SIGPIPE to server immediately when pager exits (issue5278)
  • dispatch: add fail-* family of hooks
  • dispatch: always load extensions before running shell aliases (issue5230)
  • dispatch: defer environment variable resolution in alias commands (BC)
  • dispatch: set ui.insecureconnections when --insecure is used
  • dispatch: stop setting web.cacerts=! to indicate --insecure
  • error: make HintException a mix-in class not derived from BaseException (API)
  • error: make hintable exceptions reject unknown keyword arguments (API)
  • hgcia: remove hgcia (BC)
  • journal: add share extension support
  • journal: add support for seaching by pattern
  • localrepo: jettison parents() method per deprecation policy (API)
  • mail: unsupport smtp.verifycert (BC)
  • py3: shift from future import absolute import to beginning (issue5269)
  • rollback: add a config knob for entirely disabling the command
  • subrepo: use unset instead of env -u to fix test on BSDs (issue5229)
  • templates: add support for filelog webcommand in json style
  • templates: add support for filerevision webcommand in json style
  • templates: add support for search webcommand in json style
  • templates: add support for summary webcommand in json style
  • update: fix bare --clean to work on new branch (issue5003) (BC)
  • url: add distribution and version to user-agent request header (BC)
  • chg: forward SIGINT, SIGHUP to process group

New in Mercurial 3.8.4 (Jul 4, 2016)

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

New in Mercurial 3.8.3 (Jun 10, 2016)

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

New in Mercurial 3.8.2 (Jun 2, 2016)

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

New in Mercurial 3.8.1 (May 3, 2016)

  • commands:
  • bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
  • bookmarks: avoid creating a nested repository during testing
  • branchmap: check node against changelog instead of repo
  • commands: add postincoming explicit brev argument (API)
  • commands: centralize code to update with extra care for non-file components
  • commit: block amend while histedit is in progress (issue4800)
  • fileset: replace predicate by filesetpredicate of registrar (API)
  • graft: suggest the correct tool to continue (not graft)
  • graft: use single quotes around command hint
  • log: disable graph styling when HGPLAIN is set (issue5212)
  • log: fix seen state handling for > 2 parents (issue5174)
  • log: fix status template to list copy source per dest (issue5155)
  • merge: minimize conflicts when common base is not shown (issue4447)
  • pull: activate a bookmark matching with the destination of the update (BC)
  • pull: deactivate a bookmark not matching with the destination of the update
  • revert: makes interactive mode ask to forget added files (issue4936)
  • verify: check directory manifests
  • verify: check for orphaned dirlogs
  • verify: include "manifest" prefix in a few more places
  • verify: move cross-checking of changeset/manifest out of _crosscheckfiles()
  • verify: show progress while verifying dirlogs
  • verify: don't init subrepo when missing one is referenced (issue5128) (API)
  • core:
  • bdiff: balance recursion to avoid quadratic behavior (issue4704)
  • bdiff: further restrain potential quadratic performance
  • hook: report untrusted hooks as failure (issue5110) (BC)
  • revset: remove useless extpredicate class (API)
  • revset: make sort() do dumb multi-pass sorting for multiple keys (issue5218)
  • templater: load and expand aliases by template engine (API) (issue4842)
  • templater: separate function to create templater from map file (API)
  • ui: add prompt argument to write (issue5154) (API)
  • extensions:
  • convert: keep converted hg parents that are outside convert.hg.revs (BC)
  • histedit: adds hint how to reorder changesets at editor (issue3766)
  • histedit: improve error when run on nodes with children (issue5056)
  • histedit: make histedit aware of obsolescense not stored in state (issue4800)
  • largefiles: add abstract methods in remotestore class
  • largefiles: don't access repo.changelog directly in getlfilestoupload
  • largefiles: don't explicitly list optional parameters that are not used
  • largefiles: drop partial support for not having a user cache
  • largefiles: introduce push --lfrev to control which revisions are pushed
  • largefiles: replace invocation of os.path module by vfs in lfcommands.py
  • largefiles: specify unit for ui.progress when operating on files
  • largefiles: use revisions as a ui.progress unit
  • rebase: 'hg pull --rebase' now update only if there was nothing to rebase
  • rebase: add potential divergent commit hashes to error message (issue5086)
  • rebase: adds storing collapse message (issue4792)
  • rebase: choose default destination the same way as 'hg merge' (BC)
  • rebase: explicitly test abort from ambiguous destination
  • rebase: fix crash when rebase aborts while rebasing obsolete revisions
  • rebase: mention help merge-tools in help
  • rebase: perform update through the 'update' command
  • rebase: remove experimental option from 'rebase' config section
  • rebase: respect checkunknown and checkignored in more cases
  • rebase: suggest the correct tool to continue (not rebase)
  • rebase: restrict rebase destination to the pulled set (issue5214)
  • shelve: adds restoring newly created branch (issue5048) (BC)
  • shelve: changes getting opts values by get method
  • shelve: make non bare shelve not saving branch information in bundle
  • shelve: preserve newly created branch on non-bare shelve in wctx (BC)
  • shelve: suggest the correct tool to continue (not unshelve)
  • hgweb:
  • hgweb: add option to convert encoding of graphdata()
  • hgweb: add parents to json-log (issue5074)
  • hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
  • unsorted:
  • blackbox: optionally log event source
  • bugzilla: do not load style file if template is specified (BC)
  • bundle: move writebundle() from changegroup.py to bundle2.py (API)
  • bundle: warn when update to revision existing only in a bundle (issue5004)
  • bundlerepo: properly handle hidden linkrev in filelog (issue4945)
  • changelog: add class to represent parsed changelog revisions
  • changelog: avoid slicing raw data until needed
  • changelog: backed out changeset 1778770e1982
  • changelog: backed out changeset 86de91c56355
  • changelog: lazily parse date/extra field
  • changelog: lazily parse description
  • changelog: lazily parse files
  • changelog: lazily parse manifest node
  • changelog: lazily parse user
  • changelog: lazy decode description (API)
  • changelog: lazy decode user (API)
  • changelog: parse description last
  • chg: fallback to original hg for some unsupported commands or flags
  • chg: forward job control signals to worker process (issue5051)
  • chg: pass sensitive command line flags to server
  • chgserver: create new process group after fork (issue5051)
  • date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)
  • debugrevlog: fix dumping manifest fails on empty first revision (issue5062)
  • demandimport: blacklist sqlalchemy.events as it has side effects (issue5085)
  • demandimport: enforce ignore list while processing modules in fromlist
  • destutil: choose non-closed branch head at first (BC)
  • dispatch: add wd parameter to _getlocal
  • dispatch: catch KeyboardInterrupt more broadly
  • dispatch: factor out command failure handling into a function
  • dispatch: flush ui before returning from dispatch
  • dispatch: make cmdalias forward command attributes to function
  • dispatch: make loading extra information from extension extensible
  • dispatch: show deprecation warning if command has no attributes (issue5137)
  • dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
  • dispatch: strip command line options like config file options
  • encoding: add option to escape non-ascii characters in JSON
  • graphlog: bring back color to node symbol template
  • graphmod: set default edge styles for ascii graphs (BC)
  • hg: perform update after pulling during clone with share (issue5103)
  • http: support sending hgargs via POST body instead of in GET or headers
  • localrepo: move new repo requirements into standalone function (API)
  • localrepo: support background closing for wwrite()
  • mail: retain hostname for sslutil.wrapsocket (issue5203)
  • match: rename "narrowmatcher" to "subdirmatcher" (API)
  • mpatch: un-nest the move() method
  • mpatch: unify mpatchError (issue5182)
  • notify: do not load style file if template is specified (BC)
  • record: deprecate the extension
  • registrar: add templatefilter to mark a function as template filter (API)
  • registrar: add templatefunc to mark a function as template function (API)
  • registrar: add templatekeyword to mark a function as template keyword (API)
  • registrar: remove useless base classes (API)
  • remove: add progress support
  • remove: fix --force option help description (issue5177)
  • remove: queue warnings until after status messages (issue5140) (API)
  • scmutil: support background closing for write()
  • serve: add chdir command for --daemon-postexec
  • serve: rename --daemon-pipefds to --daemon-postexec (BC)
  • sslutil: require a server hostname when wrapping sockets (API)
  • streamclone: specify unit for ui.progress when handling data
  • subrepo: disable localizations when calling Git (issue5176)
  • templatefilters: drop broken "jsonescape" from filters table (BC)
  • templatefilters: make json filter be byte-transparent (BC) (issue4926)
  • templatekw: switch ctx of list expression to rev of {parents} (BC)
  • test-debugextensions: passes with byte-compilation disabled (issue5147)
  • testing: expand Hypothesis tests with branch commands
  • tests: add test for "log -r wdir() -p" (issue4871)
  • tests: ensure that 'hg update' is disabled during histedit (issue3655)
  • tests: update test output for test written on stable branch (issue5104)
  • treemanifest: don't use cp -T, not supported on OS X
  • update: change default destination to tipmost descendant (issue4673) (BC)
  • update: check command line before modifying repo
  • version: verbose list internal and external extension source (issue4731)

New in Mercurial 3.8 RC (Apr 18, 2016)

  • commands:
  • bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
  • bookmarks: avoid creating a nested repository during testing
  • branchmap: check node against changelog instead of repo
  • commands: add postincoming explicit brev argument (API)
  • commands: centralize code to update with extra care for non-file components
  • commit: block amend while histedit is in progress (issue4800)
  • fileset: replace predicate by filesetpredicate of registrar (API)
  • graft: suggest the correct tool to continue (not graft)
  • graft: use single quotes around command hint
  • merge: minimize conflicts when common base is not shown (issue4447)
  • pull: activate a bookmark matching with the destination of the update (BC)
  • pull: deactivate a bookmark not matching with the destination of the update
  • revert: makes interactive mode ask to forget added files (issue4936)
  • verify: check directory manifests
  • verify: check for orphaned dirlogs
  • verify: include "manifest" prefix in a few more places
  • verify: move cross-checking of changeset/manifest out of _crosscheckfiles()
  • verify: show progress while verifying dirlogs
  • verify: specify unit for ui.progress when checking files
  • verify: use similar language for missing manifest and file revisions
  • core:
  • hook: report untrusted hooks as failure (issue5110) (BC)
  • revset: remove useless extpredicate class (API)
  • templater: load and expand aliases by template engine (API) (issue4842)
  • templater: separate function to create templater from map file (API)
  • ui: add prompt argument to write (issue5154) (API)
  • extensions:
  • convert: keep converted hg parents that are outside convert.hg.revs (BC)
  • histedit: adds hint how to reorder changesets at editor (issue3766)
  • histedit: improve error when run on nodes with children (issue5056)
  • histedit: make histedit aware of obsolescense not stored in state (issue4800)
  • largefiles: add abstract methods in remotestore class
  • largefiles: don't access repo.changelog directly in getlfilestoupload
  • largefiles: don't explicitly list optional parameters that are not used
  • largefiles: drop partial support for not having a user cache
  • largefiles: introduce push --lfrev to control which revisions are pushed
  • largefiles: replace invocation of os.path module by vfs in lfcommands.py
  • largefiles: specify unit for ui.progress when operating on files
  • largefiles: use revisions as a ui.progress unit
  • rebase: 'hg pull --rebase' now update only if there was nothing to rebase
  • rebase: add potential divergent commit hashes to error message (issue5086)
  • rebase: adds storing collapse message (issue4792)
  • rebase: choose default destination the same way as 'hg merge' (BC)
  • rebase: explicitly test abort from ambiguous destination
  • rebase: fix crash when rebase aborts while rebasing obsolete revisions
  • rebase: mention help merge-tools in help
  • rebase: perform update through the 'update' command
  • rebase: remove experimental option from 'rebase' config section
  • rebase: respect checkunknown and checkignored in more cases
  • rebase: suggest the correct tool to continue (not rebase)
  • shelve: adds restoring newly created branch (issue5048) (BC)
  • shelve: changes getting opts values by get method
  • shelve: make non bare shelve not saving branch information in bundle
  • shelve: preserve newly created branch on non-bare shelve in wctx (BC)
  • shelve: suggest the correct tool to continue (not unshelve)
  • hgweb:
  • hgweb: add option to convert encoding of graphdata()
  • hgweb: add parents to json-log (issue5074)
  • hgweb: generate last change date for an empty atom-bookmarks feed (issue5022)
  • unsorted:
  • blackbox: optionally log event source
  • bugzilla: do not load style file if template is specified (BC)
  • bundle: move writebundle() from changegroup.py to bundle2.py (API)
  • bundle: warn when update to revision existing only in a bundle (issue5004)
  • bundlerepo: properly handle hidden linkrev in filelog (issue4945)
  • changelog: add class to represent parsed changelog revisions
  • changelog: avoid slicing raw data until needed
  • changelog: backed out changeset 1778770e1982
  • changelog: backed out changeset 86de91c56355
  • changelog: lazily parse date/extra field
  • changelog: lazily parse description
  • changelog: lazily parse files
  • changelog: lazily parse manifest node
  • changelog: lazily parse user
  • changelog: lazy decode description (API)
  • changelog: lazy decode user (API)
  • changelog: parse description last
  • chg: fallback to original hg for some unsupported commands or flags
  • chg: forward job control signals to worker process (issue5051)
  • chg: pass sensitive command line flags to server
  • chgserver: create new process group after fork (issue5051)
  • date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)
  • debugrevlog: fix dumping manifest fails on empty first revision (issue5062)
  • demandimport: blacklist sqlalchemy.events as it has side effects (issue5085)
  • demandimport: enforce ignore list while processing modules in fromlist
  • destutil: choose non-closed branch head at first (BC)
  • dispatch: add wd parameter to _getlocal
  • dispatch: catch KeyboardInterrupt more broadly
  • dispatch: factor out command failure handling into a function
  • dispatch: flush ui before returning from dispatch
  • dispatch: make cmdalias forward command attributes to function
  • dispatch: make loading extra information from extension extensible
  • dispatch: show deprecation warning if command has no attributes (issue5137)
  • dispatch: store norepo/optionalrepo/inferrepo attributes in function (API)
  • dispatch: strip command line options like config file options
  • encoding: add option to escape non-ascii characters in JSON
  • graphlog: bring back color to node symbol template
  • graphmod: set default edge styles for ascii graphs (BC)
  • hg: perform update after pulling during clone with share (issue5103)
  • http: support sending hgargs via POST body instead of in GET or headers
  • localrepo: move new repo requirements into standalone function (API)
  • localrepo: support background closing for wwrite()
  • mail: retain hostname for sslutil.wrapsocket (issue5203)
  • match: rename "narrowmatcher" to "subdirmatcher" (API)
  • mpatch: un-nest the move() method
  • mpatch: unify mpatchError (issue5182)
  • notify: do not load style file if template is specified (BC)
  • record: deprecate the extension
  • registrar: add templatefilter to mark a function as template filter (API)
  • registrar: add templatefunc to mark a function as template function (API)
  • registrar: add templatekeyword to mark a function as template keyword (API)
  • registrar: remove useless base classes (API)
  • remove: add progress support
  • remove: fix --force option help description (issue5177)
  • remove: queue warnings until after status messages (issue5140) (API)
  • scmutil: support background closing for write()
  • serve: add chdir command for --daemon-postexec
  • serve: rename --daemon-pipefds to --daemon-postexec (BC)
  • sslutil: require a server hostname when wrapping sockets (API)
  • streamclone: specify unit for ui.progress when handling data
  • subrepo: disable localizations when calling Git (issue5176)
  • templatefilters: drop broken "jsonescape" from filters table (BC)
  • templatefilters: make json filter be byte-transparent (BC) (issue4926)
  • templatekw: switch ctx of list expression to rev of {parents} (BC)
  • test-debugextensions: passes with byte-compilation disabled (issue5147)
  • testing: expand Hypothesis tests with branch commands
  • tests: add test for "log -r wdir() -p" (issue4871)
  • tests: ensure that 'hg update' is disabled during histedit (issue3655)
  • tests: update test output for test written on stable branch (issue5104)
  • treemanifest: don't use cp -T, not supported on OS X
  • update: change default destination to tipmost descendant (issue4673) (BC)
  • update: check command line before modifying repo
  • version: verbose list internal and external extension source (issue4731)

New in Mercurial 3.7.3 (Mar 29, 2016)

  • This is an out of cycle release to address three security issues:
  • CVE-2016-3630 Mercurial: remote code execution in binary delta decoding
  • Mercurial prior to 3.7.3 contained two bounds-checking errors in its binary delta decoder that may be exploitable via clone, push, or pull.
  • CVE-2016-3068 Mercurial: arbitrary code execution with Git subrepos
  • Mercurial prior to 3.7.3 allowed URLs for Git subrepos that could result in arbitrary code execution on clone. This is a further side-effect of Git CVE-2015-7545. Reported by Blake Burkhart.
  • CVE-2016-3069 Mercurial: arbitrary code execution when converting Git repos
  • Mercurial prior to 3.7.3 allowed arbitrary code execution when converting Git repos with hostile names. This could affect automated conversion services. Reported by Blake Burkhart.
  • bdiff: (pure) support array.array arrays (issue5130)
  • convert: add new, non-clowny interface for shelling out to git (SEC)
  • convert: dead code removal - old git calling functions (SEC)
  • convert: rewrite calls to Git to use the new shelling mechanism (SEC)
  • convert: rewrite gitpipe to use common.commandline (SEC)
  • convert: test for shell injection in git calls (SEC)
  • files: don't recurse into subrepos without a path or -S (issue5127)
  • hg: perform update after pulling during clone with share (issue5103)
  • mq: restrict generated patch name to 75 characters (issue5117)
  • obsolete: fix n^2 marker computation behavior
  • parsers: detect short records (SEC)
  • parsers: fix list sizing rounding error (SEC)
  • streamclone: fix error when store files grow while stream cloning
  • subrepo: adapt to git's recent renames-by-default
  • subrepo: set GIT_ALLOW_PROTOCOL to limit git clone protocols (SEC)

New in Mercurial 3.7.2 (Mar 2, 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 8, 2016)

  • This addresses an urgent regression in compilation on Solaris and metadata handling for conversions.
  • amend: don't preserve most extra fields
  • graft: don't preserve most extra fields
  • histedit: fix typo in documentation
  • osutil: disable compilation of recvfds() on unsupported platforms
  • osutil: do not abort loading pure module just because libc has no recvmsg()
  • rebase: backout changeset 986d04b9fedd
  • rebase: backout changeset d755a9531fce
  • rebase: don't preserve most extra fields

New in Mercurial 3.7 (Feb 4, 2016)

  • commands:
  • merge: don't try to merge subrepos twice (issue4988)
  • pull: advance current active bookmark at pull --update correctly
  • templater: abort if infinite recursion detected while evaluation (issue4758)
  • annotate: add missing period to help
  • annotate: mention that -n is suppressed in help
  • backout: disable --merge with --no-commit (issue4874)
  • bookmark: deprecate 'bmstore.write' method
  • bookmarks: hoist getbkfile out of bmstore class
  • bookmarks: make _readactive safe when readlines raises ENOENT
  • branch: reword help text
  • clone: move bookmarks and checkouts before pull help
  • clonebundles: improve BUNDLESPEC documentation
  • clonebundles: remove advertisement of feature
  • commands.summary: switch to mergestate.read()
  • commands: inline definition of localrepo.parents() and drop the method (API)
  • commands: make backout acquire locks before processing
  • commands: make commit acquire locks before processing (issue4368)
  • commands: use context manager for opened bundle file
  • commandserver: drop tell() and seek() from channels (issue5049)
  • commandserver: reset state of progress bar per command
  • commit: add a way to return more information from the chunkselector
  • commit: add amend mode for crecord commit -i
  • commit: add some help examples (issue4963)
  • commit: adjust the quoting in the examples to be Windows friendly
  • commit: fix rest syntax of examples
  • commit: make commit acquire store lock before processing for consistency
  • commit: preserve extra when amending with commit --amend
  • fileset: add missing() predicate (issue4925)
  • fileset: use set instead of list to mark predicates for efficiency (API)
  • graft: clarify in help that '-r' is not just optional
  • graft: copy extra (except branch) when copying changesets
  • graft: hook afterresolvedstates
  • graft: improve --continue abort message
  • help: fix quoting for bundle1 options
  • import: add word to help text
  • import: limit scope of msg in tryimportone
  • import: reorder help text
  • log: speed up single file log with hidden revs (issue4747)
  • log: add 'hg log' example for full hashes
  • log: help provide sort by date example
  • log: mention ordering
  • log: speed up hg log
  • merge.graft: add option to keep second parent
  • merge: add options to warn or ignore on colliding unknown files
  • merge: move almost all change/delete conflicts to resolve phase (BC) (API)
  • merge: refuse update/merge if there are unresolved conflicts (BC)
  • mergestate: raise structured exception for unsupported merge records
  • patch: disable nobinary when HGPLAIN=1
  • pull: make a single call to obsstore.add (issue5006)
  • pull: return 255 value on update failure (issue4948) (BC)
  • push: specify default-push and default as fallback paths
  • status: back out changeset 89f49813526c
  • status: change + back out == clean (API)
  • status: revert + flag-change == modified
  • summary: add troubles list to the output of hg summary
  • summary: mention graft
  • summary: print unstable, bumped and divergent as unconditionally plural
  • tags: mention --quiet switch in help (issue4920)
  • verify: add a hook that can let extensions manipulate file lists
  • verify: clean up weird error/warning lists
  • verify: get rid of some unnecessary local variables
  • verify: move checklog() onto class
  • verify: move exc() function onto class
  • verify: remove unreachable code to reraise KeyboardInterrupt
  • core:
  • context: don't use util.cachefunc due to cycle creation (issue5043)
  • context: use a the nofsauditor when matching file in history (issue4749)
  • parsers: check results of PyInt_FromLong (issue4771)
  • repoview: fix corrupted hiddencache crash Mercurial (issue5042)
  • revlog: avoid string slice when decompressing u* chunks
  • revlog: clarify which revision is added to 'tested' when using cached delta
  • revlog: don't consider nullrev when choosing delta base
  • revlog: improve documentation
  • revlog: make calls to _isgooddelta() consistent
  • revlog: make clearcaches() more effective
  • revlog: return offset from _chunkraw()
  • revsetbenchmarks: support benchmarking changectx loading
  • ui: optionally ignore sub-options from configitems()
  • ui: support declaring path push urls as sub-options
  • util: disable floating point stat times (issue4836)
  • wireproto: config options to disable bundle1
  • wireproto: support disabling bundle1 only if repo is generaldelta
  • extensions:
  • crecord: fix help bar display issue (issue5063)
  • histedit: add progress support
  • histedit: explain basics of histedit commands
  • histedit: pick an appropriate base changeset by default (BC)
  • largefiles: actions will now always have a file - drop check
  • largefiles: fall back to the original for change/delete conflicts
  • largefiles: fix commit of missing largefiles
  • largefiles: make prompt order deterministic
  • largefiles: specify where .orig files are kept
  • largefiles: use a context manager in _getfile
  • largefiles: use util.readfile in lfconvert
  • largefiles: use util.readfile in overrides
  • largefiles: fix an explicit largefile commit after a remove (issue4969)
  • largefiles: prevent committing a missing largefile
  • mq: check for reserved patch name with qimport -r (issue5033)
  • mq: let the user choose where .orig files are kept
  • rebase: add date parameter to concludenode function
  • rebase: better error message when rebased changes are all in destination
  • rebase: create a new variable to make the next patch more legible
  • rebase: hook afterresolvedstates
  • rebase: only clear rebase status after the rebase transaction has completed
  • rebase: pass date parameter to concludenode
  • rebase: prevent creating divergence
  • rebase: propagate extra dict from rebase source changeset
  • rebase: remove extra "if" from check of collapsing named branches
  • rebase: better way to detect non-detaching revisions (issue5044)
  • rebase: restore help for rebase w/o args (issue5059)
  • shelve: choose where .orig file locations are kept
  • shelve: execute checkunfinished inside wlock scope
  • shelve: hook afterresolvedstates
  • shelve: lowercase flag description
  • shelve: permit shelves to contain unknown files
  • shelve: remove redundant acquisition of wlock for sub commands of unshelve
  • shelve: switch to mergestate.read()
  • shelve: use a context manager for file I/O in listcmd
  • shelve: widen wlock scope of shelve for consistency while processing
  • shelve: widen wlock scope of unshelve for consistency while processing
  • unshelve: add -k as short form of --keep
  • unshelve: add support for custom merge tools
  • unshelve: shed spurious space
  • hgweb:
  • hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option
  • hgweb: load server settings from --web-conf (issue4699)
  • hgweb: make sure command options are set to all ui objects
  • hgweb: support rendering a sub-topic
  • hgweb: support rendering sub-topic indexes
  • hgweb: update canvas.width before dynamically redrawing graph (issue2683)
  • unsorted:
  • addrevision: only use the incoming base if it is a good delta (issue4975)
  • backout: commit changeset by default (BC)
  • backout: fix --no-commit option (issue5054)
  • batchget: add support for backing up files
  • builddeb: add --distid option to specify Distributor ID
  • changegroup: introduce cg3, which has support for exchanging treemanifests
  • changelog: add a new method to get files modified by a changeset
  • checkunknownfiles: make control flow clearer
  • crecord: edit during hg crecord should preserve cursor position (issue5041)
  • debugignore: find out why a file is being ignored (issue4856)
  • demandimport: add support for PyPy
  • demandimport: don't enable when running under PyPy
  • destutil: use scmutil.revrange for desthistedit (issue5001)
  • diff: don't crash when merged-in addition was removed (issue4786)
  • discovery: properly filter changeset in 'peer.known' (issue4982)
  • dispatch: copy inferrepo attribute to alias commands
  • dispatch: report similar names consistently
  • dispatch: use print function
  • dispatch: use versiontuple()
  • dockerrpm: fix CentOS 5 RPMs (issue4977)
  • encoding: handle UTF-16 internal limit with fromutf8b (issue5031)
  • encoding: re-escape U+DCxx characters in toutf8b input (issue4927)
  • error: add a structured exception for unsupported merge records
  • extdiff: correctly handle deleted subrepositories (issue3153)
  • extdiff: use @command decorator to set up diff commands
  • filemerge: add a 'leave unresolved' option to change/delete prompts
  • filemerge: add a 'leave unresolved' option to regular prompts
  • filemerge: add support for change/delete conflicts to the ':local' merge tool
  • filemerge: add support for change/delete conflicts to the ':other' merge tool
  • filemerge: add support for change/delete conflicts to the ':prompt' tool
  • filemerge: default change/delete conflicts to 'leave unresolved' (BC)
  • filemerge: default regular prompts to 'leave unresolved' (BC)
  • graphlog: make node symbol templatable by ui.graphnodetemplate option
  • graphlog: rename glog function
  • hghave: support HGMODULEPOLICY for pure
  • localrepo: don't reference transaction from hook closure (issue5043)
  • lsprof: support PyPy (issue4573)
  • mac: fix percent-encoding of non-utf-8 characters (issue4999)
  • match: add option to return line and lineno from readpattern
  • mercurial: pass ui to extensions.load (issue5007)
  • mercurial: support loading modules from zipimporter
  • paths: do not process default-push as pushurl of default path (issue5000)
  • posix: work around "posix" systems without os.link available (issue4974)
  • run-tests: skip threading for a single test (issue5040)
  • scmutil: support background file closing
  • sslutil: fix reversed logic (issue5034)
  • streamclone: use backgroundfilecloser (issue4889)
  • streamclone: use context manager for writing files
  • streamclone: use read()
  • templates: make earlycommands and othercommands optional
  • templates: use canvaswidth instead of fixed width for canvas (issue2683)
  • test-extension: do not depend on demandimport (issue5012)
  • unionrepo: fix wrong rev being checked in iscensored (issue5024)
  • webcommands: get correct parents when comparing a removed file (issue4962)
  • webcommands: stop using ersatz if-else ternary operator for rename variable
  • webcommands: test that fctx is not None in filediff()
  • zeroconf: access repo on hgweb_mod properly (issue5036)

New in Mercurial 3.6.3 (Jan 4, 2016)

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

New in Mercurial 3.6.2 (Jan 4, 2016)

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

New in Mercurial 3.6.1 (Nov 11, 2015)

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

New in Mercurial 3.6 (Nov 11, 2015)

  • commands:
  • bookmark: do not crash when active bookmark is forward and --date is used
  • bookmarks: don't deactivate on no-op update (issue4901)
  • clone: fix updaterev to update to latest branch changeset (issue4528)
  • clonebundles: support for seeding clones from pre-generated bundles
  • commit: abort when a committemplate is not changed (BC)
  • help: distinguish sections when multiple match (issue4802)
  • help: pass around ui to doc loader (API)
  • help: pass around ui to rewriter hooks (API)
  • merge: perform all premerges before any merges (BC)
  • merge: abort on file/directory case folding collisions (issue4892)
  • phases: return zero for no-op operations (issue4751) (BC)
  • resolve: perform all premerges before performing any file merges (BC)
  • core:
  • cmdutil: make in-memory changes visible to external editor (issue4378)
  • cmdutil: stop tryimportone from using dirstateguard (BC)
  • context: don't hex encode all unknown 20 char revision specs (issue4890)
  • dirstate: batch calls to statfiles (issue4878)
  • parsers: fix infinite loop or out-of-bound read in fm1readmarkers (issue4888)
  • revlog: add an aggressivemergedelta option
  • revlog: change generaldelta delta parent heuristic
  • revset: do not fall through to revspec for literal: branch (issue4838)
  • revsets: makes follow() supports file patterns (issue4757) (BC)
  • templater: add new docheader/footer components for XML (issue4135)
  • templater: create string unescape helper (issue4798)
  • templater: do not pre-evaluate generator keyword at runsymbol (issue4868)
  • templater: introduce {latesttag()} function to match a pattern (issue4184)
  • templater: switch ctx of list expression to rev of revset() (BC)
  • ui: change default path fallback mechanism (issue4796)
  • util: use tuple accessor to get accurate st_mtime value (issue4836)
  • wireproto: properly parse false boolean args (BC)
  • extensions:
  • histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
  • largefiles: better handling of merge of largefiles that are not available
  • mq: generate patch names from first line of description
  • rebase: avoid losing branch commits with --keepbranch (issue4835)
  • rebase: fix warning about ignoring tool option on rebase continue (issue4698)
  • rebase: fix wrong 'no changes to commit' when using --collapse
  • rebase: on abort delete rebase state file no matter what
  • rebase: properly abort when destination is public (issue4896)
  • rebase: properly handle chains of markers with missing nodes
  • shelve: bundle using bundle2 if repository is general delta (issue4862)
  • shelve: delete shelve statefile on any exception during abort
  • shelve: restore shelved dirstate explicitly after aborting transaction
  • shelve: restore unshelved dirstate explicitly after aborting transaction
  • hgweb:
  • hgweb: consume generator inside context manager (issue4756)
  • hgweb: ensure both foreground and background colors are specified (issue4872)
  • hgweb: overwrite cwd to resolve file patterns relative to repo (issue4568)
  • unsorted:
  • builddeb: actually run make when building the deb (issue4778)
  • buildrpm: mkdir -p two needed directories (issue4779)
  • bundle2: don't try to recover from a GeneratorExit (issue4785)
  • bundle: extend the format of --type to support version and compression
  • debian: install bash completion as hg and not mercurial (issue4900)
  • debian: install hgk as part of mercurial-common (issue4829)
  • dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)
  • dispatch: stop warning about EPIPE in --debug mode
  • graphmod: compute slow revset query once prior to reachableroots (issue4782)
  • highlight: add highlightfiles config option which takes a fileset (issue3005)
  • highlight: add option to prevent content-only based fallback
  • highlight: exit early on textual and unknown files (issue3005)
  • incoming: request a bundle2 when possible (BC)
  • localrepo: recreate phasecache if changelog was modified (issue4855)
  • lock: loop a finite number of times in trylock (issue4787)
  • mercurial: add debugextensions command (issue4676)
  • minirst: don't treat top level item as children of last item (issue4803)
  • notify: fix fromauthor setting for 'incoming' hook type (issue4194)
  • posix: shellquote do not require quoting for "+" (issue4818)
  • reachableroots: verify integer range of heads argument (issue4775)
  • revpair: restrict odd-range handling to top-level x:y expression (issue4774)
  • revrange: drop old-style parser in favor of revset (API)
  • test-merge-tools: include /usr/sbin in path for sysctl (issue4813)
  • traceback: allow providing a local support contact point
  • treemanifest: rework lazy-copying code (issue4840)
  • windows: read all global config files, not just the first (issue4491) (BC)
  • worker: restore old countcpus code (issue4869)

New in Mercurial 3.5.2 (Oct 2, 2015)

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

New in Mercurial 3.5.1 (Oct 2, 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.5 (Aug 1, 2015)

  • Commands:
  • bookmark: informs of failure to upgrade a bookmark
  • bookmark: remove the "touch changelog" hack
  • bookmarks: abort the whole push if bookmarks fails to update (BC)
  • bookmarks: change bookmark within a transaction
  • bookmarks: clear active bookmark on non-linear update
  • bookmarks: mark internal-only config option
  • bookmarks: mark internal-only option
  • bookmarks: name label for active bookmark correctly
  • bookmarks: remove unused updatecurrentbookmark function (API)
  • bookmarks: rename bookmarkcurrent to activebookmark (API)
  • bookmarks: rename current to active in variables and comments
  • bookmarks: rename readcurrent to readactive (API)
  • bookmarks: rename setcurrent to activate (API)
  • bookmarks: rename unsetcurrent to deactivate (API)
  • bookmarks: simplify iscurrent to isactivewdirparent (API)
  • bookmarks: use try/except/finally
  • branch: don't warn about branches if repository has multiple branches already
  • commands: use the optional badfn argument when building a matcher
  • commands: use try/except/finally
  • commit: add ui.allowemptycommit config option
  • commit: avoid match.files() in conditions
  • commit: improve --close-branch documentation
  • commit: mark internal-only option
  • commit: no longer allow empty commit with the 'force' argument (API)
  • config: give it an includepaths option for looking for config files
  • files: recurse into subrepos automatically with an explicit path
  • import-checker: add xargs like mode
  • import-checker: don't treat modules as relative one if not found
  • import-checker: exclude mercurial packages installed into the system path
  • import-checker: loop to get list of locally defined modules at first
  • import: cross-reference patch.fuzz option from 'hg help import'
  • import: cross-reference ui.patch option from 'hg help import'
  • import: use ui.allowemptycommit to allow empty commits
  • log: add a status template
  • patch: add 'extra' argument to makememctx
  • patch: add fuzz config flag (issue4697)
  • phases: abort the whole push if phases fail to update (BC)
  • phases: fix bug where native phase computation wasn't called
  • phases: really fix native phase computation
  • pull: allow a generic way to pass parameters to the pull operation
  • pull: document the race condition with bookmark name
  • pull: only list remote bookmarks if -B is used to populate pulled heads
  • pull: only prefetch bookmarks when using bundle1
  • pull: prevent race condition in bookmark update when using -B (issue4689)
  • pull: skip pulling remote bookmarks with bundle1 if a value already exist
  • pull: skip pulling remote bookmarks with bundle2 if a value already exists
  • push: catch and process PushkeyFailed error
  • push: make pushkey part advisory
  • push: only say we are trying to push obsmarkers when we actually try
  • revert: fix edition of newly added file during --interactive
  • summary: add a phase line (draft, secret) to the output
  • summary: move the parents phase marker to commit line (issue4688)
  • tags: support reading tags cache without populating
  • tags: support setting hgtags fnodes cache entries
  • tags: use try/except/finally
  • verify: check the subrepository references in .hgsubstate
  • verify: clarify misleading fncache message
  • Core:
  • dirstate: ensure mv source is marked deleted when walking icasefs (issue4760)
  • ignore: fix include: rules depending on current directory (issue4759)
  • parsers: fix buffer overflow by invalid parent revision read from revlog
  • revlog: add support for a callback whenever revisions are added
  • revlog: raise an exception earlier if an entry is too large (issue4675)
  • revset: fix a crash in parents() when 'wdir()' is in the set
  • revset: fix iteration over ordered addset composed of non-ordered operands
  • revset: gratuitous formating fix in keyword
  • revset: improves time complexity of 'roots(xxx)'
  • revset: port extra() to support keyword arguments
  • revset: reduce nesting of chained 'or' operations (issue4624)
  • revsetbenchmarks: fix argument parsing
  • revsetbenchmarks: improve error output in case of failure
  • revsetbenchmarks: improve revision printing
  • revsetbenchmarks: support combining variants with "+"
  • templater: do not reevaluate rawstring as template (BC)
  • templater: remove noop calls of parsestring(s, quoted=False) (API)
  • templater: rename parsestring() to unquotestring() (API)
  • templater: take any string literals as template, but not for rawstring (BC)
  • templater: tokenize decimal integer literal (issue4638) (BC)
  • wireproto: correctly escape batched args and responses (issue4739)
  • Extensions:
  • convert: add config option for disabling ancestor parent checks
  • convert: add support for specifying multiple revs
  • convert: allow customizing git remote prefix
  • convert: apply the appropriate phases to the destination (issue4165)
  • convert: fix bug with converting the same commit twice
  • convert: handle copies when converting from Perforce (issue4744)
  • convert: handle deleted files when converting from Perforce (issue4743)
  • convert: handle deleted files when converting from Perforce (issue4743)
  • convert: improve support for unusual .gitmodules
  • convert: support incremental conversion with hg subrepos
  • convert: support multiple specifed revs in git source
  • convert: use 'default' for specifying branch name in branchmap (issue4753)
  • convert: when converting from Perforce use original local encoding by default (BC)
  • extdiff: allow modifications in subrepos to be copied back
  • highlight: produce correct markup when there's a blank line just before EOF
  • histedit: abort rather than edit a public changeset (issue4704)
  • histedit: mark defaultrev option experimental
  • largefiles: allow the archiving of largefiles to be disabled
  • largefiles: avoid match.files() in conditions
  • largefiles: ignore hidden changesets with 'verify --large --lfa'
  • largefiles: pass in whole matcher to getstandinmatcher()
  • largefiles: restore the original converter class after lfconvert --to-normal
  • largefiles: use the convert extension for 'lfconvert --to-normal'
  • largefiles: use the optional badfn argument when building a matcher
  • largefiles: use try/except/finally
  • mq: ban \r and \n in patch names (issue4711)
  • mq: tweak config reading to make check-config happy
  • mq: use the optional badfn argument when building a matcher
  • mq: use ui.allowemptycommit to allow empty commits
  • rebase: add short -k option for --keep
  • rebase: remove extraneous blank at the end of file
  • shelve: allow --patch and --stat without --list for a single shelf
  • shelve: always backup shelves instead of deleting them
  • shelve: keep old backups if timestamp can't decide exact order of them
  • shelve: make maxbackup doc check-config friendly
  • shelve: omit incorrect 'commit' suggestion at 'hg shelve -i'
  • shelve: only keep the latest N shelve backups
  • shelve: refactor allowables to specify sets of valid operations
  • shelve: use try/except/finally
  • transplant: restore dirstate correctly at unexpected failure
  • Hgweb:
  • hgweb: don't dereference symbolic revision in paper & coal style (issue2296)
  • paper: show branch/tags/bookmarks when blaming (issue3559)
  • paper: show branch/tags/bookmarks when browsing (issue3559)
  • paper: show branch/tags/bookmarks when comparing (issue3559)
  • paper: show branch/tags/bookmarks when diffing (issue3559)
  • paper: show branch/tags/bookmarks when viewing (issue3559)
  • Unsorted:
  • archive: drop the leading '.' path component from the prefix (issue4634)
  • archive: fix changesincelatesttag with wdir()
  • archive: support 'wdir()'
  • bufferedinputpipe: remove N^2 computation of buffer length (issue4735)
  • bundle2: fix type of experimental option
  • bundle2: pull bookmark the old way if no bundle2 listkeys support (issue4701)
  • canonpath: fix infinite recursion
  • censor: make various path forms available like other Mercurial commands
  • censor: mark experimental option
  • changegroup: compute seen files as changesets are added (issue4750)
  • changelog: change input type of index_get_parents
  • changelog: fix bug in heads computation
  • changelog: move index_get_parents function up
  • changelog: update read pending documentation
  • check-commit: catch both patterns of double empty lines
  • check-commit: print limit when user has a too-long summary
  • check-config: add config option checker
  • crecord: fix issue when backgrounding editor would leave artefact
  • demandimport: alias builtin as builtins
  • demandimport: define a 'deactivated' context manager
  • demandimport: support importing builtins for Python 3
  • devel: rename 'all' to 'all-warnings' (BC)
  • dispatch: add support for python-flamegraph[0] profiling
  • dispatch: disable demandimport for the --debugger option
  • email: fix config default value inconsistency
  • exchange: support transferring .hgtags fnodes mapping
  • extdiff: add support for subrepos
  • filemerge: mark internal-only config option
  • formatter: add template support
  • formatter: mark developer options
  • generaldelta: mark experimental reordering option
  • hg: support for auto sharing stores when cloning
  • hgewb: disable progress when serving (issue4582)
  • hghave: allow adding customized features at runtime
  • http2: mark experimental and developer options
  • localrepo: eliminate requirements class variable (API)
  • localrepo: kill off sopener (API)
  • localrepo: mark format options
  • mail: pass ui to sslutil.wrapsocket() even if verifycert is off (issue4713)
  • match: add an optional constructor parameter for a bad() override
  • match: add optional warn argument
  • match: introduce boolean prefix() method
  • match: resolve filesets in subrepos for commands given the '-S' argument
  • parser: factor out function that parses right-hand side of prefix/infix ops
  • parser: fill invalid infix and suffix actions by None
  • parser: reorder infix/suffix handling to be similar to prefix/primary flow
  • parser: resolve ambiguity where both prefix and primary actions are defined
  • parser: separate actions for primary expression and prefix operator
  • parser: take suffix action if no infix action is defined
  • pathutil: hint if a path is root relative instead of cwd relative (issue4663)
  • phase: default to current revision if no rev is provided (issue4666)
  • profiler: mark developer-only config option
  • progress: deprecate the progress extension
  • progress: mark experimental option
  • progress: respect ui.quiet (issue4726)
  • revrange: build balanced tree of addsets from revisions (issue4565)
  • run-tests: introduce PYTHON3 boolean constant (issue4668)
  • run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
  • run-tests: move unicode-to-bytes operations on paths to a helper (issue4667)
  • run-tests: prefer PYTHON3 constant to many version_info checks (issue4668)
  • run-tests: replace open-coded .decode()s on paths with a helper (issue4667)
  • scmutil: add an optional parameter to matcher factories for a bad() override
  • scmutil: use the optional badfn argument when building a matcher
  • setup.py: drop compatibility with Python 2.4 and 2.5 (BC)
  • setup: hide octal literals inside strings so they're portable (issue4554)
  • sshpeer: break "OutOfBandError" feature for ssh (BC)
  • sshpeer: run the ssh command unbuffered
  • ssl: prompt passphrase of client key file via ui.getpass() (issue4648)
  • subrepo: mark internal-only option
  • templatekw: display active bookmark more consistently (issue4552) (BC)
  • test-discovery: disable bundle2 for legacy test (issue4610)
  • bookmarks: abort the whole push if bookmarks fails to update (BC)
  • phases: abort the whole push if phases fail to update (BC)
  • templater: do not reevaluate rawstring as template (BC)
  • templater: take any string literals as template, but not for rawstring (BC)
  • templater: tokenize decimal integer literal (issue4638) (BC)
  • bookmarks: remove unused updatecurrentbookmark function (API)
  • bookmarks: rename bookmarkcurrent to activebookmark (API)
  • bookmarks: rename readcurrent to readactive (API)
  • bookmarks: rename setcurrent to activate (API)
  • bookmarks: rename unsetcurrent to deactivate (API)
  • bookmarks: simplify iscurrent to isactivewdirparent (API)
  • commit: no longer allow empty commit with the 'force' argument (API)
  • templater: remove noop calls of parsestring(s, quoted=False) (API)
  • templater: rename parsestring() to unquotestring() (API)

New in Mercurial 3.4.2 (Jul 20, 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)
  • transplant: update test to use hash for remote transplant

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 RC (May 2, 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 10, 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 3, 2015)

  • transaction: really disable hardlink backups (issue4546)

New in Mercurial 3.3.1 (Mar 3, 2015)

  • 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 (issue4547)
  • log: fix json-formatted output when file copies are listed (issue4523)
  • repoview: invalidate cached changelog if _delayed changes (issue4549)
  • revisionbranchcache: fall back to slow path if starting readonly (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 (issue4546)

New in Mercurial 3.3 (Mar 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.3 RC (Jan 19, 2015)

  • commands:
  • bookmark: read pending data when appropriate
  • bookmarks: factor out bookmark file opening for easier extensibility
  • bookmarks: factor out repository lookup from writing bookmarks file
  • branchcache: add debug output whenever cache files use truncate
  • branchcache: introduce revbranchcache for caching of revision branch names
  • branchcache: make _rbcrevslen handling more safe
  • branches: deprecate -a
  • branchmap: add seek() to end of file before calling tell() on append open()
  • branchmap: use revbranchcache when updating branch map
  • commit: abort if --addremove is specified, but fails
  • commit: propagate --addremove to subrepos if -S is specified (issue3759)
  • graft: drop cset description from empty commit message
  • graft: give helpful warning for empty grafts
  • graft: show hashes in user-facing messages
  • graft: show more useful status information while grafting
  • graft: use a real conflict for the tests
  • help: suggest '-v -e' to get built-in aliases for extensions (issue4461)
  • log: use namespace logname and colorname
  • log: use new namespaces api to display names
  • patch: add a new function to initialize diffopts by feature
  • patch: rename diffopts to diffallopts
  • patchbomb: don't honor whitespace and format-changing diffopts (BC)
  • push: elevate phase transaction to cover entire operation
  • push: send highest changegroup format supported by both side
  • status: cache dirstate status in _dirstatestatus()
  • status: don't list files as both clean and deleted
  • status: don't list files as both removed and deleted
  • status: don't override _buildstatus() in workingcommitctx
  • core:
  • filelog: fix backwards comment for 'backrevref'
  • filelog: remove trailing "form feed" character
  • filelog: use censored revlog flag bit to quickly check if a node is censored
  • revlog: add a method to get missing revs incrementally
  • revlog: add config variable for limiting delta-chain length
  • revlog: add flags argument to _addrevision, update callers use default flags
  • revlog: bound based on the length of the compressed deltas
  • revlog: cache chain info after calculating it for a rev (issue4452)
  • revlog: compute length of compressed deltas along with chain length
  • revlog: define censored flag for revlogng index
  • revlog: increase I/O bound to 4x the amount of data consumed
  • revlog: make a predicate clearer with parens
  • revlog: store fulltext when compressed delta is bigger than it
  • revlog: switch findmissing* methods to incrementalmissingrevs
  • revlog: verify censored flag when hashing added revision fulltext
  • revset-filelog: handle hidden linkrev for file missing for head (issue4490)
  • transaction: allow generating files with a suffix
  • transaction: support cache file in backupentries
  • transaction: support for callbacks during abort
  • transaction: use the right location when cleaning up backup file (issue4479)
  • extensions:
  • color: add support for colorizing git subrepo diffs
  • convert: on svn failure, note libsvn version (issue4043)
  • histedit: add a test to show that issue4251 is fixed (issue4251)
  • largefiles: align the output messages for a removed file with core methods
  • largefiles: align the output messages for an added file with core methods
  • largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
  • largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
  • largefiles: avoid redundant "updatelfiles" invocation in "overridetransplant"
  • largefiles: convert addlargefiles() to vfs
  • largefiles: don't clobber merge action message with user message
  • largefiles: don't duplicate 'actions' into 'actionbyfile'
  • largefiles: don't pop largefile-specific arguments to the add command
  • largefiles: don't print files as both large and normal in addremove dryruns
  • largefiles: don't rehash largefiles in updatelfiles if standin hash changed
  • largefiles: don't unnecessarily sort merge action lists
  • largefiles: don't use 'r' action for normal file that doesn't exist
  • largefiles: don't use 'r' action for standin that doesn't exist
  • largefiles: drop the override for 'fetch'
  • largefiles: drop the unfiltered repo usage in overridepurge()
  • largefiles: eliminate a duplicate message when removing files in verbose mode
  • largefiles: enable subrepo support for add
  • largefiles: enable subrepo support for forget
  • largefiles: enable subrepo support for remove
  • largefiles: ensure that the standin files are available in getlfilestoupload()
  • largefiles: factor out procedures to update lfdirstate for post-committing
  • largefiles: factor out procedures to update standins for pre-committing
  • largefiles: fix unused import
  • largefiles: get function to write status messages via "getstatuswriter()"
  • largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
  • largefiles: introduce "_lfstatuswriters" to customize status reporting
  • largefiles: look at unfiltered().lfstatus to allow status() to be filtered
  • largefiles: make linear update set unsure largefiles normal if unchanged
  • largefiles: pass a matcher instead of a raw file list to removelargefiles()
  • largefiles: properly sync lfdirstate after removing largefiles
  • largefiles: put same 'action' object back in 'newglist'
  • largefiles: return the list of added files from addlargefiles()
  • largefiles: rewrite merge code using dictionary with entry per file
  • largefiles: shortcircuit status code also for non-matching patterns
  • largefiles: show progress when checking standin hashes in outgoing changesets
  • largefiles: simplify check for lack of path arguments
  • largefiles: split the creation of a normal matcher out of its install method
  • largefiles: start by finding files of interest
  • largefiles: update comments to refer to the right overridden method
  • largefiles: update standins only at the 1st commit of "hg rebase --continue"
  • largefiles: update standins only at the 1st commit of "transplant --continue"
  • largefiles: use clearer debug messages in actions
  • largefiles: wrap "rebase.rebase" for functions using it directly
  • mq: drop updateheader - inserthgheader and insertplainheader is enough
  • mq: smarter handling of plain headers
  • rebase: add a 'revtodo' constant
  • rebase: always store rev in state, also when collapsing
  • rebase: clarify comment about merge ancestor when rebasing merges
  • rebase: clarify naming of variables holding node hashes - don't call them rev
  • rebase: handle revtodo as a special value when storing/restoring state
  • rebase: improve debug messages while processing the list of rebases
  • rebase: show more useful status information while rebasing
  • rebase: show warning when rebase creates no changes to commit
  • rebase: use '>= 0' to know is a revision was rebased
  • hgweb:
  • hgweb: allow viewing diffs against p1 or p2 for merge commits (issue3904)
  • unsorted:
  • add: add back forgotten files even when not matching exactly (BC)
  • add: pass options via keyword args
  • 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
  • bundle2-push: provide transaction to reply unbundler
  • bundles: do not overwrite existing backup bundles (BC)
  • changegroup: introduce "raw" versions of some commands
  • changelog: handle writepending in the transaction
  • changelog: register changelog.i.a as a temporary file
  • changelog: rely on transaction for finalization
  • changelog: rework the delayupdate mechanism
  • cmdserver: use given streams as pipe channels like other commands
  • copyfile: allow optional hardlinking
  • debugrevlog: fix computing chain length in debugrevlog -d
  • diff: add a --noprefix option
  • dispatch: only check compatibility against major and minor versions (BC)
  • extdiff: avoid unexpected quoting arguments for external tools (issue4463)
  • filectx: fix annotate to not directly instantiate filectx
  • generate-working-copy-states: accept depth arguments on command line
  • getbundle: send highest changegroup format supported by both side
  • graphlog: add a way to test the 'groupbranchiter' function
  • groupbranchiter: allow callers to select the first branch
  • groupbranchiter: support for non-contiguous revsets
  • hg.clone: set 'stream' depending on whether --pull was requested or not
  • hghave: we now support Python 2.7.9's ssl for https
  • hgk: forward command output to ui.fout consistently
  • highlight: ignore Unicode's extra linebreaks (issue4291)
  • https: support tls sni (server name indication) for https urls (issue3090)
  • ignore: resolve ignore files relative to repo root (issue4473) (BC)
  • linkrev-filelog: 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)
  • manifest: add optional recording of clean entries to diff
  • memctx: calculate manifest correctly with newly-removed files (issue4470)
  • memctx: fix manifest for removed files (issue4470)
  • obsstore: disable garbage collection during initialization (issue4456)
  • readmarkers: use unpacker for fixed header
  • record: don't honor format-changing diffopts (issue4459)
  • remove: support remove with explicit paths in subrepos
  • share: add option to share bookmarks
  • share: fix source repo lookup on Windows
  • subrepo: add full revert support for git subrepos
  • subrepo: add partial diff support for git subrepos
  • subrepo: add revert support without backup for git subrepos
  • subrepo: add status support for ignored files in git subrepos
  • subrepo: fix git subrepo ui argument
  • tests: adapt glob pattern to fix test with NetBSD's sh(1) (issue4484)
  • tests: run 'cvs init' only on non-existent directories (issue4482)
  • transplant: properly skip empty changeset (issue4423)
  • win32: fix win32 installers generation
  • win32: remove Mercurial.ini file from Inno Setup installer (issue4435)

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 10, 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 12, 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 3, 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 3.1.2 (Oct 2, 2014)

  • commit: catch changed exec bit on files from p1 (issue4382)
  • diff: document the nobinary option
  • dispatch: check shell alias again after loading extensions (issue4355)
  • dispatch: make "_checkshellalias" reusable regardless of adding aliases
  • help: fix typo in log examples
  • help: mention mode in hg log --removed help (issue4381)
  • hgweb: fail if an invalid command was supplied in url path (issue4071)
  • hgweb: refresh hgweb.repo on phase change (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 (issue4371)
  • templater: fix precedence of --style and --template options

New in Mercurial 3.1.1 (Sep 15, 2014)

  • changectx: ancestor should only prefer merge.preferancestor if it is a revision
  • color: pass on key error for win32 (issue4298)
  • config: exit non zero on non-existent config option (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 (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 (issue4326)
  • histedit: preserve initial author on fold (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 (issue4334)
  • largefiles: drop setting lfstatus in overridelog (issue4334)
  • largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
  • log: use correct phase info for parent field (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 (issue4328)
  • repoview: fix typo in repoview.changelog
  • revset: bookmark revset interprets 'literal:' prefix correctly (issue4329)
  • unbundle: don't advance bookmarks (issue4322) (BC)

New in Mercurial 3.1 (Aug 8, 2014)

  • Includes changes from the previous RC version

New in Mercurial 3.1 RC (Aug 2, 2014)

  • backout: accept '--edit' like other commands creating new changeset
  • bash_completion: add -l|--list support for shelve
  • bookmarks: avoid deleting primary bookmarks on rebase
  • bookmarks: improve the bookmark help (issue4244)
  • branch: add debug message for branch cache write failure
  • bugzilla: stop trying to cache setup across hook invocation
  • build: initial support for in-tree autobuilding recipes
  • buildrpm: include release version in .tar.gz name
  • bundle2: add pushkey support
  • bundle2: fix bundle2 pulling all revs on empty pulls
  • commit: make commit message shown in text editor customizable by template
  • config: allow 'user' in .hgrc ui section (issue3169)
  • 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'
  • 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 internal:tagmerge merge tool
  • filemerge: use 'basic' as the default of '[ui] mergemarkers' for safety
  • filemerge: use non-minimal conflict marker regions (BC)
  • gpg: accept '--edit' like other commands creating new changeset
  • graft: customize graft conflict markers (BC)
  • help: always show command help with -h (issue4240)
  • help: suggest keyword search when no topic is found
  • histedit: respect revsetalias entries (issue4311)
  • import: add --partial flag to create a changeset despite failed hunks
  • largefiles: avoid unnecessary creation of .hg/largefiles when opening lfdirstate
  • largefiles: include largefiles when doing log on a directory (issue4241)
  • largefiles: show also how many data entities are outgoing at "hg outgoing"
  • 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 (issue4319)
  • log: make --patch --follow work inside a subdirectory
  • make: add a basic osx mpkg target
  • merge: add conflict marker formatter (BC)
  • merge: define conflict marker labels in filemerge()
  • mergetools.hgrc: add minimal configuration for editmerge
  • packaging: move output directory from build/ to packages/
  • pager: add attend- option
  • patchbomb: includes series information in the header
  • pull: when remote supports it, pull phase data alongside changesets
  • purge: add options for deleting only files or only directories
  • push: use bundle2 to push phases when available
  • qfold: allow to specify '--message/'--logfile' and '--edit' at the same time
  • qimport: record imported revs incrementally (issue3874)
  • qrefresh: allow to specify '--message/'--logfile' and '--edit' at the same time
  • rebase: specify custom conflict marker labels for rebase (BC)
  • resolve: abort when not applicable (BC)
  • resolve: don't abort resolve -l even when no merge is in progress
  • resolve: print message when no unresolved files remain (issue4214)
  • resolve: print warning when no work performed (issue4208)
  • revset: maintain ordering when subtracting from a baseset (issue4289)
  • revset: optimize baseset.sub (issue4313)
  • setup: fixed for Pythons which don't have a CFLAGS
  • setup: make Xcode 5.1 check less specific
  • shelve: accept '--edit' like other commands creating new changeset
  • strip: drop -b/--backup option (BC)
  • strip: remove bookmarks after strip succeed (issue4295)
  • 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 (issue4303)
  • update: introduce --tool for controlling the merge tool
  • update: show message when a bookmark is activated by update
  • update: specify custom conflict markers for update (BC)
  • update: when deactivating a bookmark, print a message
  • version: show enabled extensions (issue4209)
  • version: don't traceback if no extensions to list (issue4312)
  • vim: use try catch in vim plugin to avoid conflicts

New in Mercurial 3.0.2 (Jul 19, 2014)

  • cmdutil: add copy-filtering support to duplicatecopies
  • hgweb: avoid initialization race (issue4280)
  • keyword: suppress keyword expansion for internal merge
  • match: make glob '**/' match the empty string
  • p4: accept changesets with no description (issue4282)
  • parsers.c: fix a couple of memory leaks
  • push: restore contents of HG_URL for hooks (issue4268)
  • rebase: fix bug that caused transitive copy records to disappear (issue4192)
  • repoview: do not crash when localtags refers to non existing revisions
  • resolve: keep wlock while resolving
  • revlog: hold a private reference to self._cache
  • revlog: make _chunkcache access atomic

New in Mercurial 3.0.1 (Jul 2, 2014)

  • 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 (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 (issue4237)
  • exchange: propagate arguments to the _getbundleextrapart function
  • localrepo: prevent leak of transaction object (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 (issue4259)
  • win32: backout 1a9ebc83a74c

New in Mercurial 3.0 (May 2, 2014)

  • 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 (issue4094)
  • color: allow color keywords to be used directly in template
  • commands: add -T as alternative to --template
  • commands: hg debuginstall checks missing templates (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 (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 (issue3567)
  • log: change implementation to use graphlog code
  • push: provide a hint when no paths are configured (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 (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 (issue3161)
  • cmdserver: reload mq on each runcommand request to avoid corruption
  • diff: use second filename for --stat reporting on git patches (issue4221)
  • dirstate: report bad subdirectories as match.bad, not just a warning (BC)
  • extensions: use normpath to allow trailing '\' on Windows (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 (issue3515)
  • parsers: fail fast if Python has wrong minor version (issue4110)
  • phases: apply publishing enforcement for "serve" source
  • revlog: deal with chunk ranges over 2G on Windows (issue4215)
  • setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
  • subrepo: check return code for git push (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

New in Mercurial 2.9.2 (Apr 18, 2014)

  • amend: save commit message into ".hg/last-message.txt"
  • backout: correct commit status of no changes made (BC) (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 (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 (issue4039)
  • hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
  • hg: use "os.path.join()" to join path components which may be empty (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 (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

New in Mercurial 2.9.1 (Mar 4, 2014)

  • coal: hgweb style adds extra blank line in file view (issue4136)
  • hg.openpath: use url.islocal to tell if the path is local (issue3624)
  • hgweb: hack around mimetypes encoding thinko (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 (issue2491) (issue2797)
  • purge: avoid duplicate output for --print (issue4092)
  • rebase: do not try to reactivate deleted divergent bookmark
  • resolve: use "other" changeset from merge state (issue4163)
  • verify: do not prevent verify repository containing hidden changesets

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 11, 2013)

  • bookmarks: consider successor change
  • sets when moving bookmark
  • 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
  • hgweb: ignore non numeric "revcount" parameter values
  • histedit: hold wlock and lock while in progress
  • largefiles: cache largefiles for update, also without print message
  • 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
  • phase: better error message when - force is needed
  • rebase: fix rebase aborts when 'tip-1' is public
  • rebase: fix working copy location after a - collapse
  • share: fix unshare calling wrong repo.init() method
  • shelve: fix bad argument interaction with large files
  • shelve: unshelve using an unfiltered repository
  • strip: fix last unprotected mq reference
  • strip: hold wlock for entire duration
  • subrepo: sanitize non-hg subrepos
  • templater: fix escaping in nested string literals
  • templater: makes branches work correctly with stringify
  • templater: only recursively evaluate string literals as templates
  • unshelve: add tests for unknown files
  • unshelve: don't commit unknown files during unshelve
  • util: url keeps backslash in paths
  • util: warn when adding paths ending with \

New in Mercurial 2.8 (Dec 2, 2013)

  • Core features:
  • hgweb: add revset syntax support to search
  • hgweb: always run search when a query is entered (BC)
  • hgweb (paper theme): add infinite scrolling to graph
  • hgweb: show full date in rfc822 format in tooltips at shortlog page
  • proxy: allow wildcards in the no proxy list (issue1821)
  • pull: for pull --update with failed update, print hint if any
  • rebase: preserve working directory parent (BC)
  • sslutil: add a config knob to support TLS (default) or SSLv23 (BC) (issue4038)
  • templatefilters: add short format for age formatting
  • templater: support using templates with non-standard names from map file
  • update: add error message for dirty non-linear update with no rev
  • addremove: don't do full walks
  • log: make file log slow path usable on huge repos
  • subrepo: let the user choose to merge, keep local or keep remote subrepo revisions
  • Extension features:
  • convert-internals: introduce hg.revs to replace hg.startrev and --rev with a revset
  • convert-internals: update source shamap when using filemap, just as when not using filemap
  • factotum: clean up keychain for multiple hg repository authentication
  • histedit: abort if there are multiple roots in "--outgoing" revisions
  • mq: extract strip function as its standalone extension (issue3824)
  • mq: look for modified subrepos when checking for local changes
  • rebase: remove bailifchanged check from pullrebase (BC)
  • shelve: add a shelve extension to save/restore working changes
  • Fixes:
  • pager: honour internal aliases
  • patch: ensure valid git diffs if source/destination file is missing (issue4046)
  • patch: Fix nullid for binary git diffs (issue4054)
  • progress: stop getting stuck in a nested topic during a long inner step
  • rebase: handle bookmarks matching revset function names (issue3950)
  • rebase: preserve active bookmark when not at head (issue3813)
  • rebase: preserve metadata from grafts of changes (issue4001)
  • rebase: fix selection of base used when rebasing merge (issue4041)
  • ui: send password prompts to stderr again (issue4056)

New in Mercurial 2.8 RC (Oct 22, 2013)

  • 9mail: new script to add support for Plan 9 upas/marshal email wrapper
  • addremove: don't do full walks
  • convert: introduce hg.revs to replace hg.startrev and --rev with a revset
  • convert: update source shamap when using filemap, just as when not using filemap
  • factotum: clean up keychain for multiple hg repository authentication
  • get-with-headers: don't block indefinitely if the server had an internal error
  • hgweb: add revset syntax support to search
  • hgweb: always run search when a query is entered (BC)
  • hgweb: show full date in rfc822 format in tooltips at shortlog page
  • histedit: abort if there are multiple roots in "--outgoing" revisions
  • httpconnection: properly inject ssl_wrap_socket into httpclient (issue4038)
  • log: make file log slow path usable on large repos
  • merge: let the user choose to merge, keep local or keep remote subrepo revisions
  • mq: extract strip function as its standalone extension (issue3824)
  • mq: look for modified subrepos when checking for local changes
  • paper: add infinite scrolling to graph by calling ajaxScrollInit at the page
  • paper: call ajaxScrollInit in shortlog
  • patch: Fix nullid for binary git diffs (issue4054)
  • plan9: update util.py for cpython 2.7 build
  • progress: stop getting stuck in a nested topic during a long inner step
  • proxy: allow wildcards in the no proxy list (issue1821)
  • pull: for pull --update with failed update, print hint if any
  • rebase: handle bookmarks matching revset function names (issue3950)
  • rebase: preserve active bookmark when not at head (issue3813)
  • rebase: preserve metadata from grafts of changes (issue4001)
  • rebase: preserve working directory parent (BC)
  • rebase: remove bailifchanged check from pullrebase (BC)
  • shelve: add a shelve extension to save/restore working changes
  • sslutil: add a config knob to support TLS (default) or SSLv23 (BC) (issue4038)
  • templatefilters: add short format for age formatting
  • templater: support using templates with non-standard names from map file
  • ui: send password prompts to stderr again (issue4056)
  • update: add error message for dirty non-linear update with no rev

New in Mercurial 2.7.2 (Oct 3, 2013)

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

New in Mercurial 2.7.1 (Sep 6, 2013)

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

New in Mercurial 2.7 RC (Aug 2, 2013)

  • This release contains an important fix for a merge ancestor calculation regression in the 2.6 series:
  • ancestor: decrement ninteresting correctly (issue3984)
  • bookmarks: allow bookmark command to take multiple arguments
  • bookmarks: pull --update updates to active bookmark if it moved (issue4007)
  • bookmarks: update only proper bookmarks on push -r/-B (issue 3973)
  • changegroup: fix fastpath during commit
  • checklink: work around sshfs brain-damage (issue3636)
  • churn: split email aliases from the right
  • commands: add checks for unfinished operations (issue3955)
  • commit: enable --secret option
  • convert: catch empty origpaths in svn gettags (issue3941)
  • convert: fix bad conversion of copies when hg.startrev is specified
  • convert: handle changeset sorting errors without traceback (issue3961)
  • hgweb: fix incorrect way to count revisions in log (issue3977)
  • hgweb: run search instead of showing wrong error for ambigious identifier
  • histedit: don't clobber working copy on --abort if not on histedit cset
  • histedit: refuse to edit history that contains merges (issue3962)
  • import: cut commit messages at --- unconditionally (issue2148)
  • largefiles: overridematch() should replace the file path instead of extending (issue3934)
  • log: add a log style that is default+phase (issue3436)
  • paper: add line wrapping switch to file source view
  • paper: code selection without line numbers in file source view
  • paper: highlight line which is linked to in source view
  • progress: respect HGPLAIN
  • rebase: allow aborting when descendants detected
  • rebase: continue abort without strip for immutable csets (issue3997)
  • rebase: don't clobber wd on --abort when we've updated away (issue4009)
  • revert: make backup when unforgetting a file (issue3423)
  • revlog: handle hidden revs in _partialmatch (issue3979)
  • rollback: mark as deprecated
  • splicemap: improve error handling when parsing (issue2084)
  • splicemap: support paths with spaces in splicemap (issue3844)
  • sslutil: force SSLv3 on Python 2.6 and later (issue3905)
  • summary: augment output with info from extensions
  • templater: add strip function with chars as an extra argument
  • log: show style list when unknown style specified
  • tip: deprecate the tip command
  • update: add tracking of interrupted updates (issue3113)
  • worker: check problem state correctly (issue3982)
  • worker: properly report errors from worker processes (issue3982)

New in Mercurial 2.6.3 (Jul 2, 2013)

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

New in Mercurial 2.6.2 (Jun 3, 2013)

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

New in Mercurial 2.6.1 (Jun 3, 2013)

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

New in Mercurial 2.6 RC (May 2, 2013)

  • addremove: improve performance
  • amend: support amending merge changesets (issue3778)
  • ancestor: a new algorithm that is faster for nodes near tip
  • annotate: increase refcount of each revision correctly (issue3841)
  • applyupdates: assign variable before we try to use it (issue3855)
  • archive: raise error.Abort if the file pattern matches no files
  • bash_completion: allow remove to complete normal files
  • blackbox: new extension
  • bookmarks: don't allow integers as bookmark/branch/tag names
  • bookmarks: allow (re-)activating a bookmark on the current changeset
  • bookmarks: allow moving a bookmark forward to a descendant
  • bookmarks: moving the active bookmark deactivates it
  • bookmarks: fix bug that activated a bookmark even with -r passed
  • bookmarks: resolve divergent bookmark when moving across a branch
  • bookmarks: resolve divergent bookmarks when moving active bookmark forward
  • commit: allow closing "non-head" changesets
  • commit: show active bookmark in commit editor helper text
  • config: discard "%unset" values defined in the other files read in previously
  • convert/git: catch errors from modern git-ls-remote (issue3428)
  • convert: add closesort algorithm to mercurial sources
  • dates: support 'today' and 'yesterday' in parsedate (issue3764)
  • destroyed: invalidate phraserevs cache in all case (issue3858)
  • diff: fix binary file removals in git mode
  • dirstate: performance improvements
  • dispatch: exit with status 1 for an InterventionRequired exception (BC)
  • dispatch: print 'abort:' when a pre-command hook fails (BC)
  • export: clobber files with -o (BC) (issue3652)
  • export: export working directory parent by default
  • export: show 'Date' header in a format that also is readable for humans
  • extensions: obsolete and remove interhg extension
  • filesets: add eol predicate
  • grep: use re2 if possible
  • hgk: add support for phases
  • hgk: don't use fixed format for dates
  • hgk: update backgroud colour when Ttk is available
  • hgweb: generate HTML documentation
  • hgweb: teach archive how to download a specific directory or file
  • histedit: allow "-" as a command file
  • histedit: handle multiple spaces between action and hash (issue3893)
  • histedit: make "hg histedit" sensitive to branch in URL
  • histedit: properly handle --continue on empty fold
  • histedit: support editing of the first commit (issue3767)
  • httppeer: avoid large dumps when we don't see an hgweb repo
  • icasefs: rewrite case-folding collision detection (issue3452)
  • import: don't rollback on failed import --exact (issue3616)
  • largefiles: don't cache largefiles for pulled heads by default
  • largefiles: improve reuse of HTTP connections
  • largefiles: introduce lfpull command for pulling missing largefiles
  • largefiles: introduce pull --lfrev option
  • largefiles: introduce pulled() revset expression for use in --lfrev
  • largefiles: quiet (and document) undefined name errors (issue3886)
  • largefiles: stat all largefiles in one batch before downloading
  • largefiles: use repo.wwrite for writing standins (issue3909)
  • log: fix behavior with empty repositories (issue3497)
  • merge: apply non-interactive working dir updates in parallel
  • mergetools: avoid losing the merged version with meld
  • mergetools: vimdiff issues a warning explaining how to abort
  • mq: comply with filtering when injecting fake tags (issue3812)
  • mq: do not inherit settings form base repo in mqrepo (Fixes issue2358)
  • outgoing: fix possible filtering crash in outgoing (issue3814)
  • pager: catch ctrl-c on exit (issue3834)
  • date: understand "now" as a shortcut for the current time
  • parsers: a C implementation of the new ancestors algorithm
  • pull: list bookmarks before pulling changesets (issue3873)
  • push: make locking of source optional (issue3684)
  • rebase: check no-op before checking phase (issue3891)
  • rebase: fix --collapse when a file was added then removed
  • record: abort on malformed patches instead of crashing
  • revset: change ancestor to accept 0 or more arguments (issue3750)
  • revset: don't abort when regex to tag() matches nothing (issue3850)
  • sadclown: another test failure eluded bos
  • scheme: don't crash on invalid URLs
  • scmutil: rewrite dirs in C, use if available
  • setup: make error message for missing Python headers more helpful
  • smtp: use 465 as default port for SMTPS
  • smtp: verify the certificate of the SMTP server for STARTTLS/SMTPS
  • sshpeer: store subprocess so it cleans up correctly
  • sslutil: abort if peer certificate is not verified for secure use
  • subrepo: clone of git sub-repository creates incorrect git branch (issue3870)
  • subrepo: do not push mercurial subrepos whose store is clean
  • subrepo: fix exception on revert when "all" option is omitted
  • summary: make "incoming" information sensitive to branch in URL (issue3830)
  • summary: make "outgoing" information sensitive to branch in URL (issue3829)
  • summary: show active bookmark even if not at current changeset
  • tags: update tag type only if tag node is updated (issue3911)
  • templatekw: add default styles for hybrid types (issue3887)
  • templater: add get() function to access dict element (e.g. extra)
  • unionrepo: read-only operations on a union of two localrepos
  • win32: use explicit path to "python.exe" only if it exists

New in Mercurial 2.5.4 (Apr 5, 2013)

  • This fixes an urgent regression in merging with subrepos introduced in 2.5.
  • applyupdates: assign variable before we try to use it
  • setup.py: properly discard trust warning

New in Mercurial 2.5.3 (Apr 3, 2013)

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

New in Mercurial 2.5.2 (Mar 7, 2013)

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

New in Mercurial 2.5.1 (Mar 7, 2013)

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

New in Mercurial 2.5 (Feb 2, 2013)

  • Core features:
  • branchmap: improved performances
  • bundle: add revset expression to show bundle contents (issue3487)
  • dirstate: implement unix statfiles in C
  • hgweb: add (Atom) subscribe links to the repository index
  • hgweb: add "URL breadcrumbs"
  • hgweb: add branches RSS and Atom feeds
  • hgweb: secret changeset are excluded from html view (3614 )
  • serve: use chunked encoding in hgweb responses
  • pathencode: implement both basic and hashed encoding in C
  • subrepo: append subrepo path to subrepo error messages
  • validate: check for spurious incoming filelog entries
  • hgweb: allow hgweb's archive to recurse into subrepos
  • Changeset Evolution:
  • Major progress toward ChangesetEvolution were done.
  • hidden changesets are now properly ignored by all commands
  • a global --hidden flag is added to give access to hidden changesets
  • rewriting a changeset but not its descendants is now allowed; this leaves unstable changeset behind
  • we now detect *divergent* changesets. The third and last kind of obsolescence related troubles. divergent() revset is added
  • a troubled() revset have been added
  • branchmap for of *visible* and *served* changeset are now cached on disk. This is a major performance improvements
  • performance improvements of most evolution related algorithm
  • Extension features:
  • color: add template label function
  • convert: add config option to use the local time zone
  • convert: add support for converting git submodule (issue3528)
  • hgk: use Ttk instead of plain Tk
  • inotify: don't fall over just because of a dangling symlink
  • largefiles: fix revert removing a largefile from a merge
  • largefiles: fix update from a merge with removed files
  • largefiles: make log match largefiles in the non-standin location too
  • largefiles: make update with backup files in .hglf slightly less broken
  • largefiles: rename 'admin' to more descriptive 'lfstoredir
  • rebase: performance improvements
  • rebase: rebase set with multiple roots are now handled by the --rev option
  • record: use patch.diffopts to account for user diffopts
  • share: always set default path to work with subrepos (issue3518)
  • zsh_completion: add completion of branch names
  • Fixes:
  • commands: 'hg bookmark NAME' should work even with ui.strict=True
  • copies: do not track backward copies, only renames (issue3739)
  • destroyed: keep the filecache in sync with __dict__ (issue3335, issue3693, issue3743)
  • grep: don't search past the end of the searched string
  • hgweb: properly returns 404 for unknown revision (instead of 500)
  • histedit: proper phase conservation (issue3724)
  • histedit: prevents obsolescence cycle (issue3681)
  • hook: disable demandimport before importing hooks
  • mq: don't fail when removing a patch without patch file from series file
  • mq: fix qpop of working directory parent patch when not at qtip
  • zeroconf: use port from server instead of picking port from config (issue3746)
  • update: update to current bookmark if it moved out from under us (issue3682)
  • bookmarks: show active bookmark even if not at working dir
  • largefiles: let wirestore._stat return stats as expected by remotestore verify
  • largefiles: adapt verify to batched remote statlfile (issue3780)
  • largefiles: don't allow corruption to propagate after detection
  • largefiles: don't verify largefile hashes on servers when processing statlfile
  • largefiles: allow use of urls with #revision
  • largefiles: fix commit when using relative paths from subdirectory
  • largefiles: fix cat when using relative paths from subdirectory
  • histedit: prevent parent guessed via --outgoing from being a revset (issue3770)
  • rebase: delete divergent bookmarks on destination (issue3685)
  • hgwebdir: use web.prefix when creating url breadcrumbs (issue3790)
  • subrepo: allow skipping courtesy phase sync (issue3781)
  • merge: .hgsubstate is special as merge destination, not as merge source
  • merge: improved handling of symlinks

New in Mercurial 2.4.2 (Jan 3, 2013)

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

New in Mercurial 2.4.1 (Dec 4, 2012)

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

New in Mercurial 2.4 (Nov 2, 2012)

  • Core features:
  • amend: support for ChangesetEvolution if enabled
  • bookmarks: deactivate current bookmark if no name is given
  • bookmarks: teach the -r option to use revsets
  • bookmarks: disallow bookmarks named 'tip', '.', or 'null'
  • clone: substantial speedup to clone on repo with a lots of heads (issue3378)
  • clone: activate bookmark specified with --updaterev
  • clone: update to @ bookmark if it exists
  • log: substantial speedup for untracked files (issue1340)
  • revsets: add branchpoint() function
  • resolve: commit the changes after each item resolve (issue3638)
  • subrepo, hghave: use "svn --version --quiet" to determine version number
  • subrepo: setting LC_MESSAGES only works if LC_ALL is empty or unset
  • templatefilters: add parameterized date method
  • templatefilters: add parameterized fill function
  • templatefilters: avoid traceback caused by bogus date input (issue3344)
  • templatekw: add p1rev, p1node, p2rev, p2node keywords
  • templatekw: add parent1, parent1node, parent2, parent2node keywords
  • templater: abort when a template filter raises an exception (issue2987)
  • templater: add if/ifeq conditionals
  • templater: add sub() function
  • templating: make new-style templating features work with command line lists
  • bookmarks: take ChangesetEvolution into account when updating (issue3561)
  • speedup various operation related to ChangesetEvolution
  • add detection of changeset bumped by ChangesetEvolution
  • Extension features:
  • color: add additional changeset.phase label to log.changeset and log.parent
  • color: enabled color support for export command (issue1507)
  • color: support for all grep fields
  • contrib: add a commit synthesizer for reproducing scaling problems
  • histedit: refuse to edit public changeset
  • histedit: replaces patching logic by merges
  • histedit: support for ChangesetEvolution if enabled
  • largefiles: always create the cache and standin directories when cloning
  • largefiles: distinguish "no remote repo" from "no files to upload" (issue3651)
  • largefiles: fix a traceback in lfconvert if a largefile is missing (issue3519)
  • mq: improve qqueue message with patches applied (issue3036)
  • mq: update bookmarks during qrefresh
  • notify: support revset selection for subscriptions
  • rebase: support for ChangesetEvolution if enabled
  • record: checks for valid username before starting recording process (issue3456)
  • record: fix display of non-ASCII names in chunk selection
  • Fixes:
  • amend: fix incompatibity between logfile and message option (issue3675)
  • amend: wrap all commit operations in a single transaction
  • bookmarks: abort when incompatible options are used (issue3663)
  • bookmarks: avoid redundant creation/assignment of "validdests" in "validdest()"
  • bookmarks: check bookmark format during rename (issue3662)
  • bookmarks: when @ bookmark diverges, don't double the @ sign (BC)
  • bookmark: prevent crashing when a successor is unknown locally (issue3680)
  • clone: activate @ bookmark if updating to it
  • clone: don't %-escape the default destination (issue3145)
  • clone: make sure to use "@" as bookmark and "default" as branch (issue3677) (BC)
  • clone: print bookmark name when clone activates a bookmark
  • commands: don't infer repo for commands like update (issue2748)
  • convert: normalize paths in filemaps (issue3612)
  • dirstate: handle large dates and times with masking (issue2608)
  • dirstate: handle dangling junctions on windows (issue2579)
  • filemerge: use util.shellquote when calling merge (issue3581)
  • hgweb: make the escape filter remove null characters (issue2567)
  • http2: make it possible to connect w/o ssl on port 443
  • icasefs: make case-folding collision detection as deletion aware (issue3648)
  • largefiles: don't copy largefiles from working dir to the store while converting
  • largefiles: respect the rev when reading standins in copytostore() (issue3630)
  • largefiles: use 'default' instead of 'default-push' when pulling (issue3584)
  • mq: fix qrefresh case sensitivity (issue3271)
  • patchbomb: respect --in-reply-to for all mails if no intro message is sent
  • remove: don't return error on directories with tracked files
  • revset: accept @ in unquoted symbols (issue3686)
  • scmutil: add mustaudit delegation to filtervfs (issue3673)
  • subrepo: only do clean update when overwrite is set (issue3276)
  • subrepo: subrepo isolation, pass baseui when cloning a new subrepo (issue2904)
  • update: check for missing files with --check (issue3595) (BC)
  • url: use open and not url.open for local files (issue3624)
  • verify: fix all doubled-slash sites (issue3665)
  • wireproto: fix pushkey hook failure and output on remote http repo

New in Mercurial 2.3.2 (Oct 3, 2012)

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

New in Mercurial 2.3.1 (Sep 5, 2012)

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

New in Mercurial 2.3 (Aug 7, 2012)

  • Core features:
  • help: add --keyword (-k) for searching help
  • hgweb: side-by-side comparison functionality
  • log: support --graph without graphlog extension
  • push: accept revset argument for --rev
  • merge: bookmarks will no longer automatically merge with unnamed heads or other bookmarks. Instead it picks heads with diverging bookmarks.
  • introduce ChangesetsObsolescence concept (experimental)
  • bookmarks: allow existing remote bookmarks to become heads when pushing
  • bookmarks: pull new bookmarks from remote by default (backward incompatible change)
  • bookmarks: delete divergent bookmarks on merge
  • bisect: set HG_NODE when runing a command
  • graft: allow -r to specify revisions
  • graft: implement --log (issue3438)
  • graft: remark on empty graft
  • hooks: print out more information when loading a python hook fails
  • identity: show trailing '+' for dirty subrepos (issue2839)
  • incoming/outgoing: handle --graph in core
  • merge: warn about file deleted in one branch and renamed in other (issue3074)
  • Mercurial can now identify third-party extensions as sources of tracebacks
  • outgoing: accept revset argument for --rev
  • performance improvement on branchy repo: incrementaly update branchcache
  • performance improvement on huge file tree: add a C function to pack the dirstate
  • performance improvement for huge .hgignore: process regex with re2 bindings if available
  • revset: add "diff" field to "matching" predicate
  • revset: add "converted" predicate to find converted changesets
  • revset: add "origin" and "destination" predicates, to get graft, transplant or rebase origins or destinations.
  • revset: add "extra" predicate to match changesets extra fields (issue2767)
  • revset: add pattern matching to "bookmarks/branch/extra/tag/user" predicated
  • Extension features:
  • acl: use of "!" prefix in user or group names
  • children: mark extension as deprecated
  • convert/svn: handle non-local svn destination paths (issue3142)
  • convert: accept Subversion 'file:///c:/svnrepo' syntax on Windows
  • fetch: mark extension as deprecated
  • graphlog: feature is now into core
  • histedit: new extension for interactive history editing
  • hg-ssh: add read-only flag
  • largefiles: add --all-largefiles flag to pull and clone (issue3188)
  • largefiles: improve performance by batching statlfile requests when pushing a
  • largefiles repo (issue3386)
  • largefiles: no longer attempt to clone all largefiles to non-local destinations
  • largefiles: optimize performance when updating (issue3440)
  • largefiles: support revsets for cat, outgoing --large and revert
  • mq: introduce qpush/qpop/qgoto --keep-changes
  • strip: introduce -B option to remove a bookmark
  • rebase: allow collapsing branches in place (issue3111)
  • rebase: make --dest understand revsets
  • rebase: drop the infamous --detach option: rebase now behave with --source and --rev as expectable. It may no longer add second parent to rebased changeset (backward compatible change)
  • transplant: handle non-empty patches doing nothing (issue2806)
  • transplant: manually transplant pullable changesets with --log
  • Fixes:
  • bisect: fix O(n**2) behaviour (issue3382)
  • bookmarks: fix push of moved bookmark when creating new branch heads
  • case insensitive file system can no longer be confused by -R on (issue2167)
  • copies: one fix related to directory rename detection (issue3511)
  • convert: check for failed svn import in debugsvnlog and abort cleanly
  • convert: ignore svn:executable for subversion targets without exec bit support
  • convert: keep branch switching merges with ancestors (issue3340)
  • convert: make filemap renames consistently override revision renames
  • debugrevlog: fix a bug with empty repository (issue3537)
  • graphlog: don't truncate template value at last \n
  • httprepo: ensure Content-Type header exists when pushing data
  • largefiles: fix a traceback when addremove follows a remove (issue3507)
  • largefiles: fix a traceback when archiving a subrepo in a subrepo
  • largefiles: fix addremove when largefile is missing (issue3227)
  • largefiles: fix addremove with -R option
  • largefiles: fix exception hack for i18n (issue3197)
  • largefiles: fix path handling for cp/mv (issue3516)
  • largefiles: archive -S now store largefiles instead of standins
  • largefiles: fix hg addremove when already removed largefile exists (issue3364)
  • merge: do not warn about copy and rename in the same transaction (issue2113)
  • mq: add ".hgsubstate" to patch target list only if it is not listed up yet
  • mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
  • pager: work around bug in python 2.4's subprocess module (issue3533):
  • revlog: zlib.error are no longer sent to the user (issue3424)
  • tag: don't allow tagging the null revision (issue1915)

New in Mercurial 2.2.3 (Jul 2, 2012)

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

New in Mercurial 2.2.2 (Jun 2, 2012)

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

New in Mercurial 2.2.1 (May 4, 2012)

  • This is an unscheduled bugfix release to fix a signficant memory leak in hgweb:
  • bookmarks: catch the proper exception for missing revisions
  • help: add reference to template help (issue3413)
  • help: added description for the web.collapse setting
  • largefiles: fix commit of both largefiles and non-largefiles (issue3354)
  • parsers: fix refcount leak, simplify init of index (issue3417)

New in Mercurial 2.2 (May 2, 2012)

  • Core features:
  • commit: add --amend option
  • fileset: add "subrepo" fileset symbol
  • graft: add --dry-run support (issue3362)
  • hgweb: add support for branch width and color settings
  • hgweb: add block numbers to diff regions and related links
  • hgweb: support multi-level repository indexes by enabling descend and collapse
  • merge: improve performance with lots of unknown files
  • parsers: incrementally parse the revlog index in C
  • plan9: add support for plan9
  • push/pull: improve performance for partial transfers
  • push: decompress in larger chunks for better performance on the server
  • clone: add server config option to prefer uncompressed clone
  • revert: add support for reverting subrepos
  • revset: add "matching" keyword
  • store: speed up read and write of large fncache files
  • ui: optionally quiesce ssl verification warnings on python 2.5
  • Extension features:
  • bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
  • bugzilla: allow change comment to mark bugs fixed
  • bugzilla: extract optional hours from commit message and update bug time
  • bugzilla: modify access interface to include new bug states
  • graphlog: add all log options to glog command
  • patchbomb: add --body flag to send patches as inline message body text
  • record: allow splitting of hunks by manually editing patches
  • transplant: permit merge changesets via --parent
  • Fixes:
  • alias: fix shell alias documentation (issue3374)
  • archive: make it work with svn subrepos (issue3308)
  • branchmap: server should not advertise secret changeset in branchmap (Issue3303)
  • clone: always close source repository (issue2491)
  • commit: abort on merge with missing files (BC)
  • config: discard UTF-8 BOM if found
  • convert/bzr: convert all branches (issue3229) (BC)
  • convert/bzr: expect unicode metadata, encode in UTF-8 (issue3232)
  • convert/bzr: handle empty bzr repositories (issue3233)
  • convert/bzr: ignore nested repos when listing branches (issue3254)
  • convert/svn: do not try converting empty head revisions (issue3347)
  • convert/svn: make svn sink work with svn 1.7
  • convert: support non-annotated tags in git backend
  • dirstate: preserve path components case on renames (issue3402)
  • export: catch exporting empty revsets (issue3353)
  • icasefs: make case-folding collision detection rename aware (issue3370)
  • inotify: catch SignalInterrupt during shutdown (issue3351)
  • journal: use tryread helper to backup files (issue3375)
  • largefiles: fix cat for largefiles (issue3352)
  • largefiles: fix status -S reporting of subrepos (issue3231)
  • largefiles: hide .hglf/ prefix for largefiles in hgweb
  • largefiles: notice dirty large files in a subrepo
  • largefiles: only update changed largefiles when transplanting
  • largefiles: optimize update speed by only updating changed largefiles
  • localrepo: add setparents() to adjust dirstate copies (issue3407)
  • mdiff: fix diff header generation for files with spaces (issue3357)
  • merge: check for untracked files more precisely (issue3400)
  • merge: fix unknown file merge detection for case-folding systems
  • patch: be more tolerant with "Parent" header (issue3356)
  • patch: be more tolerant with EOLs in binary diffs (issue2870)
  • patch: fix patch hunk/metdata synchronization (issue3384)
  • phase: when phase cannot be reduced, hint at --force and return 1 (BC)
  • posix: disable cygwin's symlink emulation (BC)
  • posix: ignore execution bit in cygwin (issue3301)
  • pure/osutil: use Python's msvcrt module (issue3380)
  • rebase: preserve mq series order, guarded patches (issue2849)
  • rebase: skip resolved but emptied revisions
  • revset: fix O(n**2) behaviour of bisect() (issue3381)
  • revset: fix adds/modifies/removes and patterns (issue3403)
  • revset: fix alias substitution recursion (issue3240)
  • subrepo/svn: abort on commit with missing file (issue3029)
  • subrepo/svn: fix checked out rev number retrieval (issue2968)
  • subrepo: fix default implementation of forget() (issue3404)
  • subrepo: rewrite handling of subrepo state at commit (issue2403)
  • templates/filters: extracting the user portion of an email address (BC)
  • transplant: do not rollback on patching error (issue3379)
  • update: fix case-collision with a clean wd and no --clean
  • update: make --check abort with dirty subrepos
  • update: use normal update path with --check (issue2450)
  • wireprotocol: use visibleheads as reference while unbundling (issue 3303)

New in Mercurial 2.1.2 (Apr 4, 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 3, 2012)

  • This is a regularly-scheduled bugfix release:
  • 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 3, 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.2 (Feb 3, 2012)

  • This is a regularly-scheduled bug-fix release
  • alias: shortcut command matching so shadowing works properly (issue3104)
  • branch: warn on branching
  • changelog: handle decoding of NULs in extra more carefully (issue3156)
  • convert: improve exception reporting for SVN logstream
  • diff: don't crash when diffing a revision with a deleted subrepo (issue3153)
  • fetch: fix unneeded commit when no merge attempted (issue2847)
  • fetch: patch cornercase in children calculation (issue2773)
  • largefiles: copy files in binary mode (issue3164)
  • largefiles: don't require a user cache (issue3088) (issue3155)
  • largefiles: fix 'hg status' abort after merge
  • largefiles: handle merges between normal files and largefiles (issue3084)
  • merge: check filename case collision between changesets for branch merging
  • pathauditor: switch normcase logic according to case sensitivity of filesystem
  • progress: check for ui.quiet and ui.debugflag before we write
  • rollback: always call destroyed() (regression from 1.9)
  • util: fix url.str() for windows file URLs
  • windows: use upper() instead of lower() or os.path.normcase()

New in Mercurial 2.0.1 (Feb 3, 2012)

  • This is a regularly-scheduled bug-fix release
  • alias: shortcut command matching show shadowing works properly (issue3104)
  • bundlerepo: don't write branch cache to disk
  • clone: don't save user's password in .hg/hgrc (issue3122)
  • convert/bzr: correctly handle divergent nested renames (issue3089)
  • convert/bzr: fix test of divergent nested renames for bzr 1.x
  • convert/svn: fix URL quoting issue with svn 1.7
  • convert: handle trailing slashes in filemap better (issue3124)
  • diff: '\ No newline at end of file' is also not part of the header
  • diff: --ignore-blank-lines was too enthusiastic
  • dirstate: fix case-folding identity for traditional Unix
  • graft: disallow grafting grafted csets in specific situations (issue3091)
  • graft: preserve original source in subsequent grafts
  • hook: flush stdout before redirecting to stderr
  • import: fix parent selection when importing merges
  • largefiles: ensure destination directory exists before findfile links to there
  • largefiles: file storage should be relative to repo, not relative to cwd
  • largefiles: fix 'hg clone . ../foo' OSError abort
  • largefiles: fix rename (issue3093)
  • largefiles: treat status of cache missed largefiles as "missing" correctly
  • largefiles: use "ui.configlist()" to get largefiles.patterns configuration
  • largefiles: write .hg/largefiles/ files atomically
  • makedate: wrong timezone offset if DST rules changed this year (issue2511)
  • mdiff/patch: fix bad hunk handling for unified diffs with zero context
  • posix: add extended support for OS X path folding
  • posix: fix findexe() to check for file type and access
  • rebase: ensure target is not taken as external (issue3085)
  • rebase: treat nullmerge as a special case in rebasestate (issue3046)
  • revset: balance %l or-expressions (issue3129)
  • revset: follow(nosuchfile) should give an empty set (issue3114)
  • subrepo: fix git status false positive (issue3109)
  • subrepo: use correct paths for subrepos with ..-relative paths on windows
  • update: don't clobber untracked files with wrong casing
  • url: handle file://localhost/c:/foo "correctly"

New in Mercurial 2.0 (Nov 2, 2011)

  • Major features:
  • New core graft command (similar to transplant extension)
  • New largefiles extension
  • Core changes:
  • commit: abort when there are uncommitted subrepos, use the -S option to recurse
  • help: most commands now have usage examples with help -v
  • import: add --edit switch
  • revset: add more keywords for bisection
  • revert: introduce short option -C for --no-backup
  • log: add new 'bisect' style that prints the bisection status
  • hgweb: add a "web/logoimg" setting to customize the web logo image
  • subrepo: pull revisions on demand when archiving hg subrepos
  • Extension changes:
  • color: add styles for tags
  • convert: added bookmarks support in filemap
  • eol: add new eol.fix-trailing-newline setting
  • eol: eol.only-consistent can now be specified in .hgeol
  • export: add %m to file format string (first line of the commit message)
  • mq: make qqueue print current queue name
  • rebase: add --edit switch
  • rebase: add --rev option to rebase
  • rebase: allow rebase on ancestor
  • share: introduce unshare command
  • transplant: add --edit option
  • Bug fixes:
  • alias: don't shadow commands that we only partially matched (issue2993) (BC)
  • commit: suppress spurious new head message for duplicate commit (issue2893)
  • contrib: some support for named branches in zsh_completion (issue2988)
  • progress: add a changedelay to prevent parallel topics from flapping (issue2698)
  • rebase: allow rebase to ancestor (issue3010)
  • rollback: avoid unsafe rollback when not at tip (issue2998)
  • subrepo: fix git branch tracking logic (issue2920)
  • subrepo: fix repo relative path calculation for root directories (issue3033)
  • summary: show bookmarks separate from tags and note active mark (issue2892)
  • util: wrap lines with multi-byte characters correctly (issue2943)
  • verify: filter messages about missing null manifests (issue2900)
  • wireproto: do not call pushkey module directly (issue3041)
  • auth: fix realm handling with Python < 2.4.3 (issue2739)
  • diffstat: be more picky when marking file as 'binary' (issue2816)
  • dirstate: don't fail when dropping a not-tracked file (issue3080)
  • grep: correct handling of matching lines without line ending (issue3050)
  • hgweb: fix dynamic date calculation not working under Safari
  • mq: avoid data loss upon qfold + qmv (issue3058)
  • setup: set whole env for running hg even if .hg doesn't exist (issue3073)
  • windows: recompute flags when committing a merge (issue1802)
  • windows: sanity-check symlink placeholders

New in Mercurial 1.9.3 (Oct 3, 2011)

  • setup: build inotify for sys.platform='linux*'
  • bundlerepo: add argument check before unlink
  • hgweb: properly check for bookmarks when drawing graph
  • http: handle push of bundles > 2 GB again
  • keyword: preserve file mode when overwriting
  • osutil: avoid accidentally destroying the True object in isgui
  • patch: correctly handle non-tabular Subject: line
  • patch: handle 'gitpatches' being empty, but not none
  • record: use command wrapper properly for qnew/qrefresh
  • setdiscovery: fix hang when #heads>200
  • ui: also swap sys.stdout with self.fout in _readline
  • ui: write traceback to self.ferr
  • url: Remove the proxy env variables only when needed
  • url: parse fragments first
  • util: fix crash converting an invalid future date to string
  • util: wrap lines with multi-byte characters correctly
  • win32: quietly ignore missing CreateHardLinkA for Wine

New in Mercurial 1.9.2 (Aug 27, 2011)

  • commands: clarify that 'hg heads foo' shows heads on branch foo
  • dispatch: don't rewrap aliases that have the same definition
  • graphlog: attempt to fix index overrun (issue2912)
  • http: pass user to readauthforuri() (fix 4a43e23b8c55)
  • http: strip credentials from urllib2 manager URIs (issue2885)
  • parsers: avoid pointer aliasing
  • subrepo: fix cloning of repos from urls without slash after host (issue2970)
  • ui: pass ' ' to raw_input when prompting
  • url: really handle urls of the form file:///c:/foo/bar/ correctly
  • win32: msvcr71.dll should be used for python 2.4 and 2.5

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.9.0 (Jul 2, 2011)

  • Major features:
  • New fileset file matching support
  • Improved remote changeset discovery
  • New command server mode to improve application integration
  • Experimental generaldelta storage scheme
  • Experimental new http client library
  • Command changes:
  • HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
  • manifest: add new option --all
  • aliases: add positional arguments to non-shell aliases
  • add: introduce a warning message for non-portable filenames (issue2756)
  • add: notify when adding a file that would cause a case-folding collision
  • bisect: new command to extend the bisect range (issue2690)
  • bookmarks: allow deactivating current bookmark with -i
  • bundle: update current bookmark to most recent revision on current branch
  • diff: make diff -c aware of revision sets
  • help: add -c/--command flag to only show command help (issue2799)
  • help: add -e/--extension switch to display extension help text
  • help: move hgignore man page into built-in help (issue2769)
  • http: correctly handle redirects from http to https
  • identify: list bookmarks for remote repositories
  • import: add --bypass option
  • paths: Add support for -q/--quiet
  • pushkey: add hooks for pushkey/listkeys
  • revset: add aliases
  • revset: add ^ and ~ operators from parentrevspec extension
  • revset: add a revset command to get bisect state
  • revset: add desc(string) to search in commit messages
  • revset: add follow(filename) to follow a filename's history across copies
  • revset: introduce filelog() to emulate log's fast path
  • revset: add a last() function
  • Web changes:
  • add bookmarks listing to raw style and summary pages
  • support alternate logo url
  • add base link to file log for paper and coal styles (issue2452)
  • paper, coal: display diffstat on the changeset page
  • elapsed time calculation dynamic (javascript)
  • provide diffstat and summary on the changeset page
  • Extension changes:
  • hgcia: handle URL like in notify (issue2406)
  • rebase: add -m/--message to rebase --collapse (issue2389)
  • Updating hgext.extdiff to use revsets
  • bash_completion: enable alias auto-complete
  • bugzilla: add XMLRPC interface
  • color: add support for terminfo-based attributes and color
  • convert/mtn: add support for using monotone's "automate stdio" when available
  • convert/svn: stop using svn bindings when pushing to svn
  • convert: add bookmark support for hg and git backends
  • convert: add svnrev, svnpath and svnuuid template keywords
  • extdiff: add repository root as a variable
  • graphlog: support more log command features with revsets
  • keyword: convert a verbatim block to a field list
  • keyword: offer additional datefilters when the extension is enabled
  • mq: add a 'mq()' revset predicate that returns applied mq csets
  • notify: send changesets on 'outgoing' hook, updated doc
  • progress: add speed format
  • rebase: add --tool argument for specifying merge tool
  • rebase: allow for rebasing descendants onto ancestors on different named branches
  • record: add an option to backup all wc modifications
  • record: add qrefresh -i/--interactive
  • record: add white space diff options
  • record: alias qrecord to qnew -i/--interactive
  • Bug fixes:
  • bookmarks: allow create/move bookmark without making it current (issue2788)
  • bookmarks: do not forward merged bookmark (issue1877)
  • changegroup: do not count closed new heads (issue2697)
  • config: handle comment lines in continuations (issue2854)
  • dispatch: propagate ui command options to the local ui (issue2523)
  • eol: make the hook check all new heads, not only tip (issue2666)
  • grep: don't print data from binary files for matches (issue2614)
  • http: report unexpected unparsable push responses (issue2777)
  • httprepo: handle large lengths by bypassing the len() operator
  • httprepo: long arguments support (issue2126)
  • 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)
  • merge: drop resolve state for mergers with identical contents (issue2680)
  • patch: do not patch unknown files (issue752)
  • path_auditor: check filenames for basic platform validity (issue2755)
  • rebase: don't mark file as removed if missing in parent's manifest (issue2725)
  • rebase: preserve mq series order after rebasing (issue2849)
  • rebase: restore mq guards after rebasing (issue2107)
  • revset: report a parse error if a revset is not parsed completely (issue2654)
  • scmutil: improve path calculation for install-relative RC files (issue2841)
  • set NOT_CONTENT_INDEXED on .hg dir (issue2694)
  • sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
  • subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
  • subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
  • subrepo: svn abort now depends on exit code (issue2833)
  • subrepo: be smarter about what's an absolute path (issue2808)
  • svn subrepo: attempt work around obstructed checkouts (issue2752)
  • svn subrepos: work around checkout obstructions (issue2752)
  • tags: catch more corruption during cache parsing (issue2779)
  • util: add Mac-specific check whether we're in a GUI session (issue2553)

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.3 (May 2, 2011)

  • convert: make filemap prune useless branch closing revs (issue2774)
  • encoding: avoid localstr when a string can be encoded losslessly (issue2763)
  • extdiff: fix broken symlinks handling (issue1909)
  • help config: explain that config files do not exist by default
  • hgweb: add bookmark labels to gitweb theme
  • hgweb: add missing bookmarks definition to coal/map
  • hgweb: add missing bookmarks templates to atom/rss styles
  • hgweb: add separate bookmarks listing to gitweb theme
  • hgweb: add separate bookmarks listing to monoblue theme
  • hgweb: detect change based on changelog size too
  • hgweb: fix inconsistant display of graphlog (issue1706)
  • hgweb: fix typo and inactive link in page_nav and page_header of gitweb's help
  • hgweb: fix typo in page-header of monoblue's help template
  • hgweb: format page_nav of gitweb/error.tmpl and add missing links
  • rebase: don't mark file as removed if missing in parent's manifest (issue2725)
  • subrepo: handle svn tracked/unknown directory collisions
  • subrepo: prevent url normalization from removing // in ssh paths (issue2556)
  • subrepo: tell Subversion when we are non-interactive (issue2759)
  • url: use a regex to hide unsupported ssh passwords (issue2754)
  • zeroconf: notify the Zeroconf threads when hg exits

New in Mercurial 1.8.2 (Apr 2, 2011)

  • bookmarks: discard current bookmark if absent from the bookmarks (issue2692)
  • bookmarks: fix update of the current bookmark during rename
  • color: port to using ctypes (issue2687)
  • convert/svn: fix _iterfiles() output in root dir case (issue2647)
  • eol: do not abort when win32text is found, only warn
  • eol: use dirstate methods to clear dirstate
  • fix compiling of extensions for OS X and XCode 4.0
  • hgweb: add display of bookmarks for changelog and changeset
  • hgweb: add separate page with bookmarks listing
  • merge: avoid unlinking destination of merge when case changes (issue2715)
  • mq: do not let qrefresh write bad patch
  • pager: don't page stderr if it's being redirected (issue2541)
  • push/outgoing: print remote target path even if there's an error (issue2561)
  • subrepo: recognize scp-style paths as git URLs
  • templates: widen the graph canvas (issue2683)

New in Mercurial 1.8.1 (Mar 11, 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

New in Mercurial 1.8.0 (Mar 2, 2011)

  • Core:
  • Bookmarks are now a core feature (see UpgradeNotes)
  • New listfile: pattern-matching (patterns)
  • Revset syntax supported by most commands
  • Performance improvements for reading large repository indexes
  • Certificate validation for HTTPS proxies
  • Subrepos:
  • New support for git subrepos
  • Various improvements to merge, update, and commit logic
  • Windows:
  • Numerous robustness improvements for quirks in Windows file handling
  • Now uses the native ctypes module rather than PyWin32
  • Extensions:
  • eol: filter aliases for compatibility with win32text
  • mq: --exact option for qpush
  • mq: various robustness improvements
  • progress: remaining time estimates

New in Mercurial 1.7.5 (Feb 2, 2011)

  • subrepo: fix update -C with svn subrepos when cwd != repo.root
  • subrepo: make update -C clean the working directory for svn subrepos
  • url: add --insecure option to bypass verification of ssl certificates
  • win32mbcs: Fix typo in documentation

New in Mercurial 1.7.4 (Feb 2, 2011)

  • bookmarks: always write undo file
  • bookmarks: respect rollbacks dryrun parameter
  • hgrc.5: mention that web.cacerts are run through util.expandpath
  • opener: force copy on 'a'ppend if nlinks() returns 0 (issue1922)
  • subrepo: compare svn subrepo state to last committed revision
  • subrepo: do not report known files inside repositories as unknown
  • url: 'ssh known host'-like checking of fingerprints of HTTPS certificates (see CACertificates)
  • url: check subjectAltName when verifying ssl certificate
  • url: expand path for web.cacerts
  • url: fix UnicodeDecodeError on certificate verification error
  • win32: add cacert.pem file to Inno Setup installer
  • win32: win32console.GetStdHandle() can return None

New in Mercurial 1.7.3 (Jan 3, 2011)

  • archive: don't set gzip filename header when there's no filename
  • checknlink: use two testfiles (issue2543)
  • churn: ignore trailing and leading spaces (issue2546)
  • date: fix matching of underspecified date ranges
  • eol: improve help on whether EOLs are changed in working copy or repository
  • fncachestore: copy dh directory before the manifest
  • hgweb: abort if config file isn't found
  • hook: assume relative path to hook is given from repo root
  • hook: fix import path handling for repo=None
  • https: use web.cacerts configuration from local repo to validate remote repo
  • https: warn when server certificate isn't verified
  • keyword: copy: when copied source is a symlink, follow it
  • patch: write .rej files without rewriting EOLs
  • strip: typo bugfix related to '--nobackup -> --no-backup' rename (issue2377)
  • tag: abort if not at a branch head (issue2552)
  • tag: don't check .hgtags status if --local passed
  • tag: fix uncommitted merge check and error message (issue2542)
  • util: fix ellipsis() not to break multi-byte sequence (issue2564)
  • util: work around behavior change in Python 2.7.1
  • windows.rename: eliminate temp name race (issue2571)
  • wix: add an ssl certificate file to the WiX installers

New in Mercurial 1.7.2 (Dec 2, 2010)

  • checknlink: return False if .hgtmp file preexists (issue2517)
  • commit: search both parents for missing copy revision (issue2484)
  • context: walk both parents for workingctx.ancestors()
  • convert/svn: fix changed files list upon directory replacements
  • hgwebdir: fix incorrect index generation for invalid paths (issue2023)
  • keyword: copy: when copied source is a symlink, follow it
  • mq: ignore subrepos (issue2499)
  • rebase: support --detach when null is common ancestor
  • subrepo: fix removing read-only svn files on Windows
  • subrepo: handle missing subrepo spec file as removed
  • subrepo: prune empty directories when removing svn subrepo
  • subrepo: use subprocess directly to avoid python 2.6 bug
  • util: do not crash on revisions with negative timestamp (issue2513)
  • util: do not recurse in makedirs if name is '' (issue2528)
  • win32mbcs: use extsetup() to wrap functions only once
  • wix: add support for x64 native MSI packages

New in Mercurial 1.7.1 (Nov 16, 2010)

  • alias: fall back to normal error handling for ambigious commands
  • bundlerepository: get rid of temporary bundle files
  • bundlerepository: test self.tempfile field, not tempfile module
  • eol: exclude .hgtags file from eol translation
  • log: fix log -rREV FILE when REV isnt the last filerev
  • opener: check hardlink count reporting
  • pushkey: force HTTP POST on push and add tests
  • revlog: fix descendants() if nullrev is in revs
  • subrepo: test & fix svn subrepo removal
  • win32: remove try-catch block of GetModuleFileNameEx

New in Mercurial 1.7.0 (Nov 2, 2010)

  • 1.1. Core:
  • filelog: improve cmp performances (issue2273)
  • patch: don't strip '#' lines from patch descriptions (issue2417)
  • patch: when native patching fails (ui.patch is not set), don't retry with an external tool
  • setup/hg: always load Mercurial from where it was installed.
  • setup: user-friendly error message if Python headers are missing
  • store: new unsupported and experimental parentdelta format (see UpgradeNotes)
  • store: encode first period or space in filenames (issue1713)
  • url: expand environment variables in [auth] settings (issue2328)
  • url: check validity (notBefore/notAfter) using OpenSSL (issue2407)
  • 1.2. Commands:
  • addremove: use similarity 100 by default
  • alias: add support for shell command aliases starting with '!' (see [alias] in hgrc(5))
  • backout: add --tool argument for specifying merge tool
  • backout: backout linearly by default instead of branching and merging (use --merge to get the former behaviour)
  • dispatch: properly handle relative path aliases used with -R (issue2376)
  • init: expand destination url as a configured paths
  • log: do not --follow file that is deleted and recreated later (issue732)
  • merge: don't detect copies as "divergent renames", make error message more helpful
  • merge: add --tool argument to merge and resolve
  • merge: handle no file parent in backwards merge (issue2364)
  • tags: do not fail if tags.cache is corrupted (issue2444)
  • templater: add "hex" filter and "children" keywords (see hg help templating)
  • 1.3. Subrepos:
  • support remapping of subrepository source paths (see [subpaths] in hgrc(5))
  • make add, diff, incoming, outgoing and status commands recurse into subrepos with --subrepos/-S
  • subrepo: add support for 'hg archive'
  • subrepo: fix status check on SVN subrepos (issue2445)
  • 1.4. Revsets:
  • add id() and rev() to allow explicit references to changes by hash or rev (see hg help revsets)
  • add min() function to complement max()
  • add present() function to avoid lookup errors on possibly missing changesets
  • rename tagged() to tag() and allow it to take an optional tag name
  • strip: add revsets support
  • add revsets support to bisect and update (issue1993)
  • bookmarks: add a bookmark([name]) revset for referencing bookmarks
  • transplant: add a transplanted(set) revset to get transplanted revisions
  • 1.5. hgweb:
  • add a help view for accessing the built-in documentation (see help link in hg serve)
  • let HTTPS serve use more compatible but less secure encryption
  • support very simple caching model (issue1845)
  • 1.6. Extensions:
  • color: better support for branches and mq guards
  • convert: handle closed branch heads in hg-hg conversion (issue2185)
  • convert: support darcs changelogs with bytes 0x7F-0xFF (issue2411)
  • convert: deprecate --authors in preference for --authormap
  • graphlog: support header and footer templates when using styles (issue2395)
  • keyword: do not expand at all during diff
  • keyword: support copy and rename
  • mq: extend support for the --mq argument to extension commands
  • mq: save qrefresh message for easy recovery in case it fails (issue2062)
  • mq: support hg qimport --existing --name renametothis thatexistingpatch, fix --force case on Windows
  • mq/qqueue: support renaming of active queue
  • mq/qqueue: add --purge option to delete a queue and its patches
  • pager: add global --pager= option
  • patchbomb: add --confirm option to show series details and ask for confirmation
  • patchbomb: let diffstat prompt only once with complete summary
  • progress: support rebase and patchbomb
  • rebase: re-add patches to mq repo after rebase
  • strip: add --keep flag to avoid modifying working directory during strip
  • strip: rename --nobackup option to --no-backup (issue2377)
  • strip: support stripping multiple revisions
  • 1.7. contrib:
  • mergetools.hgrc: add vimdiff
  • zsh completion: support bookmarks and patchbomb extensions
  • zsh completion: add qpush --move option
  • 1.8. Windows:
  • 64-bit Inno Setup installer
  • handle spaces in path to Python (issue2074)

New in Mercurial 1.6.4 (Oct 2, 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.3 (Oct 2, 2010)

  • alias: make shadowing behavior more consistent (issue2054)
  • bisect: better message for unrelated starting revisions
  • bookmarks: Check if the bookmark to delete exists on the remote
  • bookmarks: guard against listing bookmarks on unsupported repos
  • chunkbuffer: use += rather than cStringIO to reduce memory footprint
  • convert: Using --dest-type svn crashed, if the source repo used tags.
  • convert: properly set encoding for gnuarch converter
  • convert: use encoding.encoding instead of locale.getpreferredencoding()
  • encoding: improve handling of buggy getpreferredencoding() on Mac OS X
  • graphlog: mark --branch as incompatible with --graph
  • http basic auth: reset redirect counter on new requests (issue2255)
  • httprepo: decompress stream incrementally to reduce memory usage
  • log: fix the bug 'hg log --stat -p == hg log --stat'
  • mercurial.spec: gettext is a build requirement for getting proper localization
  • merge: drop reference to file contents after write
  • merge: move reverse-merge logic out of filemerge (issue2342)
  • merge: fix detection of conflict markers with checkconflicts enabled
  • mq: don't inherit default and default-push paths with --mq (issue2333)
  • resolve: updated help documentation for improved clarity
  • revlog: drop cache after use to save memory footprint
  • templatefilters: unnest uescape()
  • templates: add filenolink to raw style (issue2332)
  • url: expand vars in all [auth] settings (issue2328)
  • url: limit expansion to safe auth keys (Issue2328)
  • util: avoid using hashlib on Python < 2.5 (issue2278)
  • verify: initialize rp variable in case we hit out of memory
  • verify: reduce memory footprint when unpacking files
  • verify: report exceptions that don't have a str() method
  • win32: correctly break hardlinks on network drives (issue7

New in Mercurial 1.6.2 (Aug 3, 2010)

  • This release addresses a regression in the color extension.
  • color: pass write/write_err to win32print correctly (issue2312)
  • convert/progress: use plural and avoid retrieving
  • color: call correct superclass method in write_err

New in Mercurial 1.6.1 (Aug 3, 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.6.0 (Jul 2, 2010)

  • Core
  • addremove: optimize "addremove -s100" by matching files by their SHA1 hashes
  • archive: auto-detect archive type by extension (issue2058)
  • commit: more friendly handling of new and closed named branches
  • hooks: provide pre- and post- hooks with parsed command line arguments
  • log: add --branch for filtering on named branch
  • log: add --stat for diffstat output
  • push: add --new-branch option to allow initial push of new branches
  • push: break infinite http recursion bug with Python 2.6.5 (issue2179)
  • rollback: add -n/--dry-run flag, report what's being rolled back
  • subrepo: various fixes
  • summary: report copies and renames and add subrepo status
  • tag: add -e/--edit option for modifying the commit message
  • revset: introduce a powerful query language for specifying revisions
  • Hgweb
  • unify and simplify hgweb.cgi and hgwebdir.cgi scripts
  • fix race in refreshing repo list (issue2188)
  • simplify hgweb.cgi, add help pointer
  • deliver shell hook output to client
  • allow --port=0 to specify "choose free port number automatically"
  • improved templater performance
  • Help
  • add new hgweb, glossary, and revsets topics
  • numerous improvements to help text
  • Extensions
  • acl: support for access control base on branches and user-defined or OS-level groups
  • acl: added support for pretxncommit, so that one can call the ACL hook at (?)
  • bookmarks: add support for pushing and pulling bookmarks
  • churn: add possibility to include/exclude paths
  • color: add support for Windows consoles
  • color: colorize based on output labels instead of parsing output
  • extdiff: add labels, read diff arguments from [merge-tools]
  • keyword: offer svn-like default keywordmaps
  • keyword: support (q)record
  • mq: add a line to hg summary
  • mq: qpush --move, reorder patch series and apply only the patch
  • progress: progress support for many more commands
  • rebase: add option to not commit after a collapsing

New in Mercurial 1.5.4 (Jun 2, 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.5.3 (May 14, 2010)

  • This is an unscheduled bugfix release to fix Issue2181 (commit generates traceback on Nonetype). Also included:
  • various improvements to SVN conversion support
  • minor doc improvements

New in Mercurial 1.5.2 (May 3, 2010)

  • Core
  • clone: fix URL too long problem with many heads
  • commands: revised documentation of 'default' and 'default-push'
  • copies: properly visit file context ancestors on working file contexts
  • diffstat: use ui.plain() instead of ui.interactive()
  • dirstate: fix in memory dirstate entries for 1-second race
  • dispatch: don't mangle ImportError abort messages
  • filemerge: use working dir parent as ancestor for backward wdir merge
  • hgrc.5: describe form of config values and mention lists as well
  • hgweb: fix attribute error in error response (issue2060)
  • log: document the new xml style
  • merge: correctly compute the flag for noexec filesystems
  • patch: don't look for headers in diff lines
  • push: fix bug in warning message selection
  • revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
  • static-http: allow clone -r (issue2164)
  • subrepo: fix repo root path handling in svn subrepo
  • subrepo: propagate and catch push failures
  • templates: document missing template variables
  • util: fix default termwidth() under Windows
  • util: use an explicit prefix for checkexec/checklink temporary files
  • Extensions
  • convert/cvs: skip bad tags
  • convert/git: check status when reading output stream
  • convert/subversion: fix default URL checker prototype
  • mq: rewrite strip docstrings
  • mq: use util.unlink instead of os.unlink and os.removedirs
  • schemes: fix // breakage with Python 2.6.5 (issue2111)

New in Mercurial 1.5.1 (Apr 2, 2010)

  • Core
  • improve warning on adding large files
  • expand ~ in auth filenames and aliases
  • several improvements to patch parsing
  • warn about attempts to use hg branch to switch branches
  • push: fix bug in prepush logic and its tests
  • hgweb: fix broken URLs of RSS/Atom feeds
  • subrepo: several bug fixes
  • Extensions
  • acl: added support for '*' (everyone) in user list
  • progress: use stderr instead of stdout
  • schemes: add Kiln On Demand to default schemes

New in Mercurial 1.5 (Mar 6, 2010)

  • Core:
  • improved behavior for named branches with heads command
  • new XML output template for logs
  • import extract multiple patches from emails, mboxes, files, and URLs
  • new patch.eol=auto option to ignore patch line-endings while preserving target file endings.
  • new -b/--branch option for clone, bundle, incoming, outgoing, pull, and push
  • new server.validate option to validate completeness of pushed changesets
  • subrepos now has basic Subversion support
  • support for SSL server certificates and improved IPv6 support
  • the HGPLAIN environment variable makes output more stable for scripts
  • Extensions:
  • new progress bar extension
  • mq: new --mq option to make regular commands operate on queue repository
  • mq: automatically upgrade conventional patches to git format where needed
  • color: add support for bookmarks, resolve -l, and churn --diffstat
  • convert: two CVS history editing hooks
  • win32mbcs: add configuration to specify path encoding
  • zeroconf: many bug fixes
  • rebase: new --detach option for rebase
  • Web Interface:
  • improve navigation on log and graph pages
  • support for pluggable authorization
  • raw templates for tags/branches pages
  • add wsgi script for Microsoft IIS with isapi-wsgi
  • Windows:
  • add WiX installer scripts to contrib/wix
  • handle configuration files in \hgrc.d
  • expand environment variables specified in merge tools paths
  • Help and Documentation:
  • greatly improve error messages and command documentation
  • support extended documentation with --verbose
  • provide help for disabled extensions and commands

New in Mercurial 1.4.3 (Feb 2, 2010)

  • Mercurial license has changed from GPLv2 to GPLv2+
  • speed up copy detection in merge, status, and diff
  • templates: fix relative path expansion on style setting
  • merge: fix merging of already-merged subrepos
  • summary: fix i18n issue reporting clean working directories
  • hgweb: improve IIS PATH_INFO handling
  • relink: Windows support

New in Mercurial 1.4.2 (Jan 4, 2010)

  • core:
  • config: raise ConfigError on non-existing include files
  • alias: do not crash when aliased command has no usage help text
  • auth: allow specifying auth sections in .hg/hgrc
  • patch: fix handling of chunk offsets
  • subrepo: add default path to new clones
  • docs: Fix rst2html detection
  • extensions:
  • convert/svn: better handling of hg recursive call failure
  • convert/svn: make sink recover gracefully from empty changeset
  • keyword: fix interaction with transplant
  • mq: preserve --git flag when folding and merging patches
  • mq: qnew -f rejects merge working directories
  • mq: qpop: remove added files before re-adding removed files
  • patchbomb: handle repository#rev URLs correctly
  • share: use defaultdest to compute unspecified destination

New in Mercurial 1.4.1 (Jan 4, 2010)

  • regression fixes:
  • fix to prepush logic when it creates new heads
  • fix qseries truncation
  • other:
  • doc fixes: formatting, missing options
  • tests fixes (now less dependent on environment variables)
  • inotify fixes
  • keyword: allow RCSfile like CVS
  • share: fix a bad interaction with clone
  • show non-default branch names with summary -q
  • new schemes extension
  • i18n updates

New in Mercurial 1.4 (Jan 4, 2010)

  • core:
  • summary: new command summarizes current working state
  • tags: new tag cache greatly speeds up tag operations
  • diff: new --stat option to show diffstat
  • diff: add --reverse option to diff
  • subrepo: fix a bunch of issues with the experimental subrepo extension
  • status: fixes for behavior when working with clock skew
  • clone: new -u/--updaterev option
  • templater: new latesttag and latesttagdistance keywords
  • push/pull: handle some broken pipe errors during large transfers
  • config: environment variables and ~user constructs are expanded in pathnames
  • hgweb:
  • fix for showing header lines in raw changeset diffs
  • try to send better error messages to the client
  • use config-supplied ordering by default in hgwebdir index pages
  • add web.descend option to disable showing all nested repositories in hgwebdir
  • documentation and help:
  • new config help topic
  • help texts are now written in reStructuredText format
  • many translation updates including a new Swedish translation
  • many help text updates and improvements
  • extensions:
  • mq: add -1 options to qapplied/qunapplied
  • patchbomb: add a --flag option to set a flag value in the Subject header
  • patchbomb: correctly handle Unicode domains (using the IDNA encoding scheme)
  • color: improve colorization of the qseries command
  • inotify: cleaner code, fixed pattern handling
  • zeroconf: show repository descriptions
  • rebase: some performance and correctness fixes
  • extdiff: add 3-way diff for merge changesets
  • convert: handle directory renaming in Darcs, fixed file renaming
  • relink: new extension which helps people re-hardlink their clones
  • other:
  • contrib/shrink-revlog.py script that can significantly shrink some internal hg files

New in Mercurial 1.3.1 (Jan 4, 2010)

  • Regression fixes:
  • fixed excessive memory usage issues with diff and strip
  • fixed slow calculation of branch heads
  • fixed handling of port numbers in URLs
  • fixed transaction handling exception
  • fixed incoming with graphlog extension
  • fixed slow commit in fetch extension
  • fixed loading of win32mbcs extension
  • Other fixes:
  • fixed http username handling in acl extension
  • fixed subrepo path joining on Windows
  • allow update --check to cross branches
  • miscellaneous small doc and bug fixes

New in Mercurial 1.3 (Jan 4, 2010)

  • Major Changes:
  • experimental support for sub-repositories
  • Python 2.3 is no longer supported; now requires Python 2.4-2.6
  • Commands:
  • merge: add -P/--preview option
  • update: don't unlink added files when -C/--clean is specified
  • update: added -c/--check option to abort on local changes
  • update: allow merges going backwards
  • push: improved handling of named branches
  • branches/heads: add a -c/--closed option to show closed branches
  • help: new extensions topic
  • General:
  • add patch.eol config setting to work with cross-platform patches
  • fixed support for SSL through proxies
  • add ability to load hooks from arbitrary Python modules
  • hide passwords for HTTP repositories in error and log output
  • fix Python 2.6 support in the Windows installer
  • add mechanism for specifying HTTP authentication details in hgrc
  • prompts and choices are now shown even in non-interactive mode
  • performance improvements, especially on Windows
  • much improved zsh completion
  • improved Danish, Japanese, Italian and simplified Chinese translations
  • new German, French, Greek, Brazilian Portuguese and traditional Chinese translations
  • Web interface
  • read configuration: data from webdir configs
  • add branches page to hgweb
  • pluggable templater engine support
  • refresh hgwebdir configuration periodically
  • let web.encoding override ui.encoding setting
  • deal with dicts/lists like webdir config paths
  • Extensions:
  • experimental share extension
  • the alias extension has been moved into core
  • add -P/--push option to qimport
  • numerous bug fixes
  • convert
  • improved source detection
  • support for comments in author maps
  • add branch map support
  • add different ordering options
  • svn: support OS-specific authn providers
  • svn: improved tag support
  • git: add committer tag only when needed
  • bzr: fix renaming support
  • bzr: add support for filemaps
  • bzr: handle timestamps correctly
  • bzr: fix symlink handling
  • bzr: restore paths to source encoding
  • cvs: add support for CVS merge(point)s
  • cvs: add support for synthetic revisions
  • cvs: better support for branchpoints
  • cvs: deprecate use of external cvsps
  • mtn: improve renaming support
  • mtn: support mtn database files as source
  • mtn: improve date/time support
  • p4: better handling of keywords, binary files and symlinks
  • rebase
  • don't lose copy/rename info
  • keep original mq patch format
  • zeroconf
  • advertise repositories by hostname
  • try to guess IP address if necessary
  • patchbomb
  • option to set attachment name
  • support for In-Reply-To header
  • inotify
  • fix handling of untracked files moved out of repository
  • fix support for directory deletion
  • acl: now works with push over https

New in Mercurial 1.2.1 (Jul 2, 2009)

  • fixed version number build from tarball
  • fix allow_read logic for hgweb
  • improve handling of damaged revlogs in verify
  • keep .orig files when resolving
  • clear resolve state properly when rebasing
  • improve --command handling with bisect
  • fix diff against bundles
  • improve fetch logic for inactive branches
  • fix diffstat with notify
  • fix 'synthetic file adds' in CVS conversion

New in Mercurial 0.9.5 (Oct 24, 2007)

  • New features:
  • Handle symlinks on systems without symlink support
  • hg archive supports symlinks
  • Display executable/symlink bit with "hg manifest -v" Improved hg verify diagostics
  • Faster revlog handling
  • Faster handling of large directories
  • Greatly improved handling of large files
  • Atom syndication support in hgweb
  • Improved test suite with parallel execution