Differences between revisions 13 and 14
Revision 13 as of 2016-10-28 13:36:26
Size: 7524
Comment: say formatter is still experimental
Revision 14 as of 2016-11-03 15:53:00
Size: 7934
Editor: GregorySzorc
Comment: add perf improvements
Deletions are marked like this. Additions are marked like this.
Line 17: Line 17:
 * Performance of client-side application of bundle data for generaldelta repos has been significantly improved. This makes 'hg clone', 'hg pull', and 'hg unbundle' operations faster. Cloning the Firefox repository now consumes 70+s less CPU time and completes over a minute faster (when not network or I/O bound).
 * The storage and transfer of changeset data has been optimized to improve read performance

Mercurial 4.0 release

/!\ This is a draft and may not accurately reflect what lands in the 4.0 release.

1. Features

  • The following commands now also have experimental formatter support: 'hg version', 'hg grep' and 'hg config'

  • New template keywords and functions: termwidth, mod(a, b), relpath(path)

  • Basic arithmetic operations in template such as termwidth - 10

  • follow() revset takes new startrev parameter

  • Bash completion now allows skipping potentially expensive status call for completing 'hg status' arguments, using $HGCOMPLETE_NOSTATUS environment variable

2. Improvements

  • A number of changes were made to move and copy tracking, to make sure move and copy information is not lost during commands like 'hg graft'
  • Compound revset expression is now properly ordered
  • Performance of client-side application of bundle data for generaldelta repos has been significantly improved. This makes 'hg clone', 'hg pull', and 'hg unbundle' operations faster. Cloning the Firefox repository now consumes 70+s less CPU time and completes over a minute faster (when not network or I/O bound).
  • The storage and transfer of changeset data has been optimized to improve read performance
  • Python 3 support has received a lot of improvements (but will take a lot of additional work)
  • zlib performance in hgweb is improved, and it's possible to control zlib compression level using server.zliblevel option


3. Raw draft changelog

3.1. commands

  • annotate: calculate line count correctly
  • branchmap: acquires lock before writting the rev branch cache
  • branchmap: simplify error handlind when writing rev branch cache
  • commit: return 1 for interactive commit with no changes (issue5397)

  • config: add template support
  • copy: distinguish "file exists" cases and add a hint (BC)
  • debugextension: change "testedwith" to a list (BC)
  • debugextensions: hide "ships-with-hg-core" magic string (BC)
  • debugobsolete: add formatter support (issue5134)

  • debugrevspec: deprecate --optimize option
  • files: change documentation to match its behaviour (issue5276)

  • flags: allow specifying --no-boolean-flag on the command line (BC)
  • graphlog: preserve topo sort even if additional filter options specified
  • grep: add formatter support
  • grep: build list of all columns regardless of display options
  • 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: drop hack to fix order of revset (issue5100)

  • log: drop outdated optimization to walk revisions in reverse order
  • log: unroll loop that populates file paths for --patch --follow matcher
  • merge: add conflict labels to merge command
  • pull: grab wlock during pull
  • update: warn if cwd was deleted

3.2. core

  • auditvfs: forward options property from nested vfs
  • bundle2: remove 'experimental.bundle2-exp' boolean config (BC)
  • bundlerepo: add support for treemanifests in cg3 bundles
  • changelog: disable delta chains
  • changelog: specify checkambig=True to avoid ambiguity around truncation
  • copies: make _checkcopies handle copy sequences spanning the TCA (issue4028)

  • demandimport: add 'nt' to ignore list (issue5373)

  • demandimport: error out early on missing attribute of non package (issue5373)

  • demandimport: import sub-module relatively as expected (issue5208)

  • demandimport: omit default value of "level" at construction of _demandmod
  • deprecation: enforce thew 'tr' argument of 'dirstate.write' (API)
  • dispatch: explicitly pass fancyopts optional arg as a keyword
  • dispatch: set profiling.enabled when profiling is enabled
  • exchange: refactor APIs to obtain bundle data (API)
  • extdiff: isolate path variable of saved command to independent paragraph
  • formatter: add function to convert list to appropriate format (issue5217)

  • formatter: introduce isplain() to replace (the inverse of) nonzero() (API)

  • getchangegroup: take an 'outgoing' object as argument (API)
  • hg: set default path correctly when doing a clone+share (issue5378)

  • localrepo: make invalidate avoid invalidating store inside transaction (API)
  • lock: show more detail for new-style locks in lock waiting message (issue4752)

  • match: remove matchessubrepo method (API)
  • mpatch: change Py_ssize_t to ssize_t in places that will be later copied
  • mpatch: change lalloc() to local function
  • mpatch: provide things that will be exported later with a prefixed name
  • mpatch: raise MemoryError instead of mpatchError if lalloc() failed

  • mpatch: remove dependency on Python.h in mpatch.c
  • mpatch: silence warning about maybe-uninitialized variable
  • mpatch: write a cffi version of mpatch.patches
  • profiling: make profiling functions context managers (API)
  • profiling: move profiling code from dispatch.py (API)
  • py3: test to check which commands run
  • revlog: add instance variable controlling delta chain use
  • revlog: make code in builddelta() slightly easier to read
  • revlog: specify checkambig at writing to avoid file stat ambiguity
  • revlog: use an LRU cache for delta chain bases
  • revset: add option to make matcher takes the ordering of the input set
  • 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() noop depending on ordering requirement (BC)
  • revset: make sort() noop depending on ordering requirement (BC)
  • revset: support "follow(renamed.py, e22f4f3f06c3)" (issue5334)

  • ssl: handle a difference in SSLError with pypy (issue5348)

  • streamclone: clear caches after writing changes into files for visibility
  • streamclone: force @filecache properties to be reloaded from file
  • template: 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)
  • util: rename checkcase() to fscasesensitive() (API)
  • version: add formatter support
  • wireproto: remove gboptslist (API)
  • wireproto: unescape argument names in batch command (BC)

3.3. 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: always use filechunkiter when iterating files
  • largefiles: fix 'deleted' files sometimes persistently appearing with R status
  • largefiles: more safe handling of interruptions while updating modifications
  • largefiles: test coverage of fatal interruption of update
  • largefiles: use context for file closing
  • 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: make debug logging more consistent
  • rebase: properly calculate total commits to rebase (issue5347)

  • rebase: rebase changesets in topo order (issue5370) (BC)

  • strip: report both bundle files in case of exception (issue5368)

3.4. hgweb

  • hgweb: avoid line wrap between revision and annotate-info (issue5398)

  • hgweb: config option to control zlib compression level

Release4.0 (last edited 2016-11-10 08:28:56 by AntonShestakov)