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