Mercurial 4.6 release

1. New Features

1.1. pullbundles

Pullbundles allow the server to answer client requests using pre-built bundles. This is different from the existing clonebundle feature:

Pullbundles are only used for clients running Mercurial 4.6 as well.

1.2. notify extension

The 'maxdiffstat' option can be used to truncate long file lists similar to 'maxdiff' for the patch part of the email.

2. Backwards Compatibility Changes

3. Performance Improvements

4. API Changes

More notes to sort into the above

0.1. commands

0.2. core

0.3. extensions

  • convert: avoid closing ui.fout in subversion code (issue5807)

  • histedit: make histedit's commands accept revsets (issue5746)

  • largefiles: give some **opts some strkwargs love
  • largefiles: headers and values need to be sysstrs, add r prefixes
  • largefiles: make scheme regex a bytes regex
  • largefiles: mark headre as bytes regex
  • largefiles: opts appears to already be bytes in this instance
  • largefiles: register wire protocol commands with modern APIs
  • largefiles: use command executor for batch operation
  • largefiles: wrap heads command handler more directly
  • mq: avoid a silly conversion from binary nodeid to hex
  • mq: don't reimplement any()
  • mq: don't reimplement any()
  • mq: fix up statusentry to be both repr()-able and bytes()-able
  • mq: open status file et al in bytes mode
  • rebase: add a test case for issue5782
  • rebase: allow in-memory merge of the working copy parent
  • rebase: also include commit of collapsed commits in single transaction
  • rebase: also restore "ui.allowemptycommit" value
  • rebase: collapse two nested if-conditions
  • rebase: convert "oldrev" to revnum earlier
  • rebase: delete obsolete internal "keepopen" option
  • rebase: do not consider extincts for divergence detection (issue5782)

  • rebase: fix issue 5494 also with --collapse
  • rebase: get "inmemory" state directly from rebase runtime
  • rebase: introduce support for automatically rebasing orphan changes
  • rebase: look up commit message to reuse outside of conclude[memory]node()
  • rebase: look up default date outside of conclude[memory]node()
  • rebase: make "destnode" consistently a revnum and rename it to "destrev"
  • rebase: move config override out of conclude[memory]node()
  • rebase: move constant expressions out of inner loop in _performrebase()
  • rebase: only store collapse message once
  • rebase: pass "inmemory" directly to _definedestmap()
  • rebase: pass in "extra" itself into conclude[memory]node()
  • rebase: pass in "keepbranch" to conclude[memory]node()
  • rebase: pass in "user" instead of "ctx" to conclude[memory]node()
  • rebase: pass in ctx, not rev, to conclude[memory]node()
  • rebase: pass in entire "overrides" dict to conclude[memory]node()
  • rebase: reduce scope of "dsguard" variables a bit
  • rebase: register status file generator only once when using single transaction
  • rebase: rename conclude[memory]node() to commit[memory]node()
  • rebase: sort roots by revision
  • rebase: store rebase state after each commit
  • rebase: use configoverride context manager for ui.forcemerge
  • rebase: use single transaction when running in memory

0.4. hgweb

  • hgweb: don't responsd to api requests unless feature is enabled
  • hgweb: port archive command to modern response API
  • hgweb: port most @webcommand to use modern response type
  • hgweb: support constructing URLs from an alternate base URL
  • hgweb: support using new response object for web commands

0.5. unsorted

  • addbranchrevs: no longer accept revset as "revs" (API)
  • addremove: remove dry_run, similarity from scmutil.addremove (API)
  • bundle2: make source a mandatory argument for bundle2.applybundle() (API)
  • bundle: updates the help text for hg bundle (issue5744)

  • bundlerepo: use command executor for wire protocol commands
  • bundlespec: add support for some variants
  • changelog: add the missing 'closed' property on 'appender' object
  • changelog: implement context manager method for 'appender' object
  • children: support specifying revision by revset
  • discovery: use command executor interface
  • dispatch: don't clamp the range of the exit code twice
  • dumprevlog: handle being passed a mode parameter
  • exchange: use command executor for getbundle
  • exchange: use command executor for pushkey
  • exchange: use command executor interface for calling listkeys
  • fancyopts: add support for custom multi-arg opts in fancyopts.py
  • filemerge: support passing labels to external merge tools
  • fix: use templater to substitute values in command string
  • forget: add --confirm option
  • fsmonitor: layer on another hack in bser.c for os.stat() compat (issue5811)

  • graphlog: deduplicate preprocessing of log command
  • graphlog: unblock --line-range option
  • grep: fixes erroneous output of grep in forward order (issue3885)

  • heads: add support for specifying branches by revset
  • hg: pass command intents to repo/peer creation (API)
  • hg: use command executor for wire protocol commands
  • httppeer: remove support for connecting to <0.9.1 servers (BC)

  • httppeer: support protocol upgrade
  • infinitepush: delete infinitepush.fillmetadatabranchpattern config option
  • infinitepush: delete infinitepushcommands.py and related tests
  • infinitepush: delete the hack to load the extension after remotenames
  • infinitepush: delete the non-forward-move flag for hg push
  • infinitepush: don't force ipv6 while connecting to mysql server
  • infinitepush: drop '--list-remote', '--remote-path' flags to bookmark cmd
  • infinitepush: drop error handling while pushing to svn server
  • infinitepush: drop hack related to --to, --create flags of remotenames-ext
  • infinitepush: drop logic related to treemanifest extension
  • infinitepush: drop the '--create' flag to push command
  • infinitepush: drop the '--to' flag to push and use '-B' instead
  • infinitepush: drop the default value of config options which are registered
  • infinitepush: drop the logic related to inhibit extension
  • infinitepush: drop the wrapping of update command on client side
  • infinitepush: introduce server option to route every push to bundlestore
  • infinitepush: look up bookmarks only among bookmarks
  • infinitepush: remove backupcommands.py
  • lfcommands: use %d on known-int in format string
  • lfs: add server side support for the Batch API
  • lfs: add support for serving blob files
  • lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)

  • localrepo: drop "remote" argument from lookupbranch() (API)
  • manifest: add support for including directories outside narrowspec
  • mdiff: add a config option to use xdiff algorithm
  • mpatch: allow clang-format oversight
  • narrowcommands: add some missing strkwargs calls for py3
  • narrowrevlog: add a TODO around remotefilelog moving to core
  • narrowrevlog: add what little I can remember about rename filtering
  • peer-request: include more details about batch commands
  • peer: scatter module to the wind (API)
  • perfbranchmap: allow to select the filter to benchmark
  • perfbranchmap: display 'unfiltered' for unfiltered performance
  • procutil: drop unused 'newlines' option from popen*() (API)
  • procutil: make explainexit() simply return a message (API)
  • py3: make regex bytes in hgweb/webcommands.py
  • registrar: replace "cmdtype" with an intent-based mechanism (API)
  • releasenotes: replace abort with warning while parsing (issue5775)

  • rev-branch-cache: add a function to generate a part
  • revbranchcache: add a public function to update the data
  • revbranchcache: advertise and use 'rbc' exchange capability
  • revbranchcache: disable the new part for narrow hg bundle
  • revsymbol: stop delegating to repo.getitem for unhandled symbols (API)

  • scmutil: deprecate revpairnodes()
  • scmutil: make revpair() return context objects (API)
  • setdiscovery: back out changeset 5cfdf6137af8 (issue5809)

  • setdiscovery: don't call "heads" wire command when heads specified
  • showconfig: allow multiple section.name selectors (issue5797)

  • sshpeer: support not reading and forwarding stderr
  • stack: add a new module for stack-related commands
  • streamclone: use command executor for wire protocol commands
  • streamclonebundle: add a test for stream clone bundle v2
  • streamclonebundle: make sure we accept new stream clone bundle spec
  • stringutil: make b prefixes on string output optional
  • stringutil: support more types with pprint()
  • templatekw: fix return type of {succsandmarkers} (BC)
  • templatekw: switch most of showlist template keywords to new API (issue5779)

  • treediscovery: switch to command executor interface
  • uncommit: leave empty commit if all files are uncommitted
  • uncommit: simplify condition for keeping commit
  • url: support suppressing Accept header
  • webcommands: unpack contents of length-1 dict portably
  • webcommands: use explicit integer division for Python 3 compat

=========

  • httppeer: remove support for connecting to <0.9.1 servers (BC)

  • templatekw: fix return type of {succsandmarkers} (BC)
  • templater: complain about invalid application of '%' operator (BC)

=========