Opened 7 years ago

Closed 7 years ago

#7420 closed enhancement (fixed)


Reported by: Fernando de Oliveira Owned by: Fernando de Oliveira
Priority: normal Milestone: 7.9
Component: BOOK Version: SVN
Severity: normal Keywords:


overview of new features (full overview is available on WhatsNew, further below)

Mercurial 3.7 release


  • Generaldelta: the original Mercurial compression format had an
    inefficient way of storing history in very branchy repositories.
    Generaldelta addresses this weakness. As a result, depending on the
    repository, this can improve the size of the history up to a factor
    of 10. Mercurial 1.9 was the first release to support generaldelta
    (behind a feature flag), but Mercurial 3.7 also allows pulling a
    mixture of non-generaldelta and generaldelta history without having
    to recompute everything, which avoids overloading servers. As a
    result, generaldelta is now enabled by default. You can convert a
    repository to generaldelta using:

    hg clone -U --config format.generaldelta=1 --pull originalrepo \

  • Clonebundles: this is an server-side extension. It allows using a
    pre-generated bundle for an initial Mercurial clone. Clients will
    automatically use clonebundles if a server advertises them.
    Clonebundles allows much faster initial clones and reduces the load
    on a central server significantly. Mercurial 3.6 was the first
    version to include experimental clonebundles support, it's now been
    marked non-experimental. You can find out more using: hg help
  • Filesets now support 'missing()', to specify all files missing
    according to hg status.
  • Interactive committing (hg commit -i) and amending (hg commit
    --amend) can now be used together.
  • Merging can now handle collisions between untracked and tracked
    files, configurable according to the config option
  • Default 'histedit' destination: it's now possible to run hg histedit
    without specifying a base revision. Mercurial will try to determine
    an appropriate base automatically. The revset used for this is
    "reverse(only(.) and not public() and not ::merge())", which
    specifies the first ancestor of the current changeset that is not
    public and does not have any descendants that are merges.
  • The '*.orig' files created by revert can now be stored in a
    different location, specified by the config option
  • hg shelve now supports storing untracked files.
  • hg unshelve now supports using a custom merge tool.
  • hg backout now commits by default if no conflicts were encountered.
  • hgweb now supports rendering sub-topics.
  • Server operators can now limit interaction with legacy clients
    speaking an outdated wire protocol. This is useful for preventing
    excessive CPU use when the server is using generaldelta
    repositories.  See the various bundle1 options in hg help
  • Python wheel packages are now available for Windows on PyPI
  • [paths] entries can now define a separate URL for pushes. See hg
    help config.paths for more.


This release includes many improvements, including (but not limited to):
  • performance improvements (speedup for 'hg log <file/folder>')
  • many documentation improvements (clarification, additional examples
    (see hg help <command> --verbose), ...)
  • improved PyPy support
  • hg clone --uncompressed is now 3-4x faster on Windows. See the
    backgroundclose* options in hg help config.worker for more.

A full overview is available on WhatsNew.

Release Notes

Features and bugfixes in our latest releases. Please see the Download
page for links to source and binaries.

Note that Mercurial follows a time-based release plan with major
releases every three months and minor (bugfix) releases on the first of
every month (see TimeBasedReleasePlan).


1. Mercurial 3.7 (2016-2-1)

Release candidate and preliminary release notes for the upcoming 3.7
release. There's also an overview of new features available.

1.1. 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
  • 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
  • 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 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
  • commit: preserve extra when amending with commit --amend
  • fileset: add missing() predicate (issue4925)
  • fileset: use set instead of list to mark predicates for efficiency
  • 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 <file|folder>
  • 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)
  • 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
  • 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

1.2. core

  • context: don't use util.cachefunc due to cycle creation (issue5043)
  • context: use a the nofsauditor when matching file in history
  • 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

1.3. 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
  • 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
  • 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
  • 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
  • shelve: switch to
  • 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
  • unshelve: add -k as short form of --keep
  • unshelve: add support for custom merge tools
  • unshelve: shed spurious space

1.4. hgweb

  • hgweb: eliminate duck-typing to select hgweb or hgwebdir by command
  • 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

1.5. unsorted

  • addrevision: only use the incoming base if it is a good delta
  • 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
  • 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
  • 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'
  • filemerge: default change/delete conflicts to 'leave unresolved'
  • filemerge: default regular prompts to 'leave unresolved' (BC)
  • graphlog: make node symbol templatable by ui.graphnodetemplate
  • 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
  • posix: work around "posix" systems without available
  • 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
  • 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
  • webcommands: stop using ersatz if-else ternary operator for rename
  • webcommands: test that fctx is not None in filediff()
  • zeroconf: access repo on hgweb_mod properly (issue5036)

Change History (2)

comment:1 by Fernando de Oliveira, 7 years ago

Owner: changed from blfs-book@… to Fernando de Oliveira
Status: newassigned

comment:2 by Fernando de Oliveira, 7 years ago

Resolution: fixed
Status: assignedclosed

Fixed at r16899.

Note: See TracTickets for help on using tickets.