#pragma section-numbers 2 = Mercurial 4.7 release = == New Features == * 'hg graft' now has a '--stop' flag to stop interrupted graft. * 'hg graft' now has an '--abort' flag which aborts the interrupted graft and rollbacks to state before the graft. * 'hg graft' now has a '--no-commit' mode (Bts:issue5631) * 'hg rebase' now supports '--confirm' and '--dry-run' flags. * 'hg export' now has a '-B/--bookmark' option to select a bookmarked branch. * The 'acl' extension now has support for bookmarks as well as branches. * 'word-diff' option is now officially supported, and enabled by ui.tweakdefaults or can be enabled by setting `diff.word-diff=True`. * The 'optimize-delta-parent-choice' is now enabled by default. It makes storing merge changesets more efficient by checking against which parent to make a delta. * 'sparse-revlog' option is now available. This option allows for a better storage and compression of the manifest for very big repositories at a minimal cost on day-to-day commands. == Backwards Compatibility Changes == * The fileset expression may include untracked files by default. Use "tracked()" to explicitly filter out files not existing at the context revision. * graft: reuse --user, --date, a --log values in 'hg graft --continue' (BC) * revset: fix heads() order to always follow the input set (BC) * revset: make id() an empty set for ambiguous nodeid (BC) * revset: make id() to resolve node id prefix in unfiltered repo (BC) * templater: consistently join() string-like object per character (BC) == Bug Fixes == * dispatch: fix exit code of unhandled exception recorded in blackbox log * merge: mark file gets as not thread safe (Bts:issue5933) * patch: don't separate \r and \n when colorizing diff output * sparse-revlog: implement algorithm to write sparse delta chains (Bts:issue5480) * obsolete: store user name and note in UTF-8 (Bts:issue5754) (BC) * phases: remove excessive optimization from newheads() (Bts:issue5939) * unlinkpath: make empty directory removal optional (Bts:issue5901) (Bts:issue5826) * revlog: suggest other parent when a parent was refused for a delta (Bts:issue5481) * templatefuncs: show hint if extdata source is evaluated to empty (Bts:issue5843) * bookmarks: cache reverse mapping (Bts:issue5868) * hgweb: strip trailing '/' in apppath before appending '/static/' (Bts:issue5943) == Performance improvements == * fncache: avoid loading the filename cache when not actually modifying it. This makes commits to existing files faster. == New experimental features == * grep: '--all-files -r "wdir()"' to search working-directory files, which is the default if tweakdefaults is on. == Other notable features == * annotate, files: automatically populate fields referenced from template * bookmarks, files, status, tags: add support for log-like template keywords and functions * grep: deprecates '--all' flag in favor of '--diff' * serve: add --print-url option * shelve: pick the most recent shelve if none specified for --patch/--stat * status: add a config knob for setting default of --terse == API Changes == * repo[x] is now more strict about its input, see https://www.mercurial-scm.org/repo/hg/file/4.6/mercurial/context.py#l380 * "sshserver()" no longer sets stdin and stdout to binary mode. * New context manager "ui.uninterruptable()" to mark portions of a command as potentially unsafe places to interrupt Mercurial with Control-C or similar. * New ui.makeprogress() that makes it easier to update progress. * changegroup: use progress helper in apply() (API) * cmdutil: drop deprecated log helper methods (API) * cmdutil: drop deprecated precursor of registrar.command (API) * cmdutil: remove deprecated _revertprefetch code (API) * context: drop support for looking up context by ambiguous changeid (API) * context: explicitly take diffopts in 'context.diff' (API) * context: make workingctx.matches() filter our removed files (API) * demandimport: make module ignores a set (API) * fileset: remove callexisting flag and mctx.existing() (API) * fileset: restrict getfileset() to not return a computed set (API) * merge: drop support for using updateresults as tuples (API) * obsolete: explode if metadata contains invalid UTF-8 sequence (API) * pycompat: export queue module instead of symbols in module (API) * revlog: do inclusive descendant testing (API) * revlog: replace descendant(b, a) by isdescendantrev(a, b) (API) * scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API) * scmutil: remove deprecated revpairnodes method (API) * shortest: don't keep checking for longer prefix if node doesn't exist (API) * templatekw: drop deprecated showlist() and showdict() (API) * templater: drop extension point of engine classes (API) * update: use context manager for config override (API) * util: drop deprecated forwarding to dateutil, procutil, and stringutil (API) == More notes to sort into the above == === commands === === core === * cmdutil: drop deprecated log helper methods (API) * cmdutil: drop deprecated precursor of registrar.command (API) * cmdutil: remove deprecated _revertprefetch code (API) * context: also accept diff option directly * context: drop support for looking up context by ambiguous changeid (API) * context: explicitly take diffopts in 'context.diff' (API) * context: make workingctx.matches() filter our removed files (API) * context: no longer accept diff options as dictionnary * dispatch: mask negative exit code recorded in blackbox log * dispatch: unify handling of None returned by a command function * filelog: don't crash on invalid copy metadata (Bts:issue5748) * hook: add support for disabling the shell to native command translation * hook: disable the shell to native command translation by default * revlog: _segmentspan computes the byte span of a segment * revlog: add function to slice chunk down to a given size * revlog: delete isdescendantrev() in favor of isancestorrev() * revlog: disallow setting uncompressed length to None * revlog: do inclusive descendant testing (API) * revlog: don't say "not found" on internal error * revlog: early return in _slicechunk when density is already good * revlog: early return in _slicechunk when span is already small enough * revlog: efficient implementation of 'descendant' * revlog: enforce chunk slicing down to a certain size * revlog: handle error from node lookup * revlog: handle errors from index_node() in nt_insert() and index_slice_del() * revlog: introduce a tiny mock of a revlog class * revlog: isgooddeltainfo takes the whole revinfo object * revlog: make chainbase cache its result for the correct revision * revlog: make getcandidaterevs more consistent about updating tested revs set * revlog: make isdescendantrev(a, b) check if a < b * revlog: make variable name 'd' more explicit in _isgooddeltainfo * revlog: postprocess chunk to slice them down to a certain size * revlog: replace descendant(b, a) by isdescendantrev(a, b) (API) * revlog: reuse 'descendant' implemention in 'isancestor' * revlog: use node tree (native code) for shortest() calculation * revlog: use radix tree also for matching keys shorter than 4 hex digits * revset: add partial support for ancestor(wdir()) * revset: fix heads() order to always follow the input set (BC) * revset: make id() an empty set for ambiguous nodeid (BC) * revset: pass in lookup function to matchany() (Bts:issue5879) * revset: use resolvehexnodeidprefix() in id() predicate (BC) * templater: make date wrapper support dot/map operations * transaction-summary: show phase changes statistics in pull/unbundle * worker: support more return types in posix worker === extensions === * convert: don't pass --no-files to "darcs show repo" command * histedit: add history-editing-backup config option * shelve: use more accurate description in conflict marker === hgweb === * hgweb: propagate http headers from ErrorResponse for web interface commands === unsorted === * aggressivemergedeltas: enabled the option by default * filemerge: support specifying a python function to custom merge-tools * fuzzutil: make it possible to use absl when C++17 isn't supported * mpatch: introduce a safeadd() helper to work around UB int overflow * mpatch: introduce a safesub() helper as well * phase: clarify the message about movement on command changeset * remotenames: enable the storage config option if extension is enabled * sparse-revlog: new requirement enabled with format.sparse-revlog * zstandard: pull in bug fixes from upstream 0.9.1 release (Bts:issue5884)