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

1.3. remotenames extension

Shows remotebookmarks and remotebranches in the UI. This extension is now distributed with Mercurial.

1.4. notify extension

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

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

1.6. templates

A new template keyword 'reporoot' which shows the root directory of the current repository.

2. Backwards Compatibility Changes

3. Performance Improvements

4. Bug Fixes

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

5.1. narrow extension

Allows to create clones which fetch history data for only a subset of files. This experimental extension is now distributed with Mercurial.

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

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

6. Other notable features

7. API Changes

More notes to sort into the above

0.1. commands

0.2. core

0.3. extensions

  • 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
  • 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: 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)
  • 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
  • graphlog: deduplicate preprocessing of log command
  • graphlog: unblock --line-range option
  • 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
  • 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
  • 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)
  • registrar: replace "cmdtype" with an intent-based mechanism (API)
  • 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: don't call "heads" wire command when heads specified
  • 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)
  • treediscovery: switch to command executor interface
  • uncommit: leave empty commit if all files are uncommitted
  • url: support suppressing Accept header
  • webcommands: unpack contents of length-1 dict portably

=========

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

=========