view relnotes/5.1 @ 45064:41b32cbc53f8

commitctx: document _filecommit input and output This is the beginning of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8699
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 06 Jul 2020 18:52:19 +0200
parents cba59b338976
children
line wrap: on
line source

== New Features ==

 * New config `commands.commit.post-status` shows status after successful
 commit.

 * `hg root` now has templating support, including support for showing
   where a repo share's source is. See `hg help -v root` for details.

 * New `--force-close-branch` flag for `hg commit` to forcibly close
   branch from a non-head changeset.

 * The curses-based interface for commands like `hg commit -i` now supports
   a range-select mechanism. Select the first line using space like before,
   navigate to the last line, and press X (capital x) to set all items in
   the range at once. Lowercase x has been added as a synonym for space to
   help reinforce the mechanism, and pressing enter/return continues to be a
   synonym for "toggle the current line and move down to the next item in
   this section."

== New Experimental Features ==

 * New config `experimental.log.topo` makes `hg log -G` use
   topological sorting. This is especially useful for aliases since it
   lets the alias accept an `-r` option while still using topological
   sorting with or without the `-r` (unlike if you use the `sort(...,
   topo)` revset).


== Bug Fixes  ==

 * issue4292: "hg log and {files} {file_adds} {file_mods} {file_dels}
   in template show wrong files on merged revision". See details in
   "Backwards Compatibility Changes".


== Backwards Compatibility Changes ==

 * Removed (experimental) support for log graph lines mixing
   parent/grandparent styles. Setting
   e.g. `experimental.graphstyle.parent = !` and
   `experimental.graphstyle.grandparent = 3.` would use `!` for the
   first three lines of the graph and then `.`. This is no longer
   supported.

 * If `ui.origbackuppath` had been (incorrectly) configured to point
   to a file, we will now replace that file by a directory and put
   backups in that directory. This is similar to how we would
   previously replace files *in* the configured directory by
   subdirectories.

* Template keyword `{file_mods}`, `{file_adds}`, and `{file_dels}`
   have changed behavior on merge commits. They used to be relative to
   the first parent, but they now consider both parents. `{file_adds}`
   shows files that exists in the commit but did not exist in either
   parent. `{file_dels}` shows files that do not exist in the commit
   but existed in either parent. `{file_mods}` show the remaining
   files from `{files}` that were not in the other two
   sets.


== Internal API Changes ==

 * Matchers are no longer iterable. Use `match.files()` instead.

 * `match.visitdir()` and `match.visitchildrenset()` now expect the
   empty string instead of '.' to indicate the root directory.

 * `util.dirs()` and `util.finddirs()` now include an entry for the
   root directory (empty string).

 * shelve is no longer an extension now. it will be turned on by default.

 * New API to manage unfinished operations: Earlier there were distinct APIs
   which dealt with unfinished states and separate lists maintaining them
   that are `cmdutil.afterresolvestates`, `cmdutil.unfinishedstates` and
   `cmdutil.STATES`. Now these have been unified to a single
   API which handles the various states and their utilities. This API
   has been added to `state.py`. Now instead of adding to these 3 lists
   independently a state for a new operation can be registered using
   `addunfinished()` in `state` module.

 * `cmdutil.checkunfinished()` now includes detection for merge too.

 * merge abort has been disallowed in case an operation of higher
   precedence is in progress to avoid cases of partial abort of
   operations.

 * We used to automatically attempt to make extensions compatible with
   Python 3 (by translating their source code while loading it). We no
   longer do that.