Mercurial 4.6 release

1. Backwards Compatibility Changes

2. Performance Improvements

3. 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
  • notify: add maxdiffstat option to truncate long file lists
  • 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)

=========