Mercurial 5.4 (2020-04-16)#

Mercurial 5.4 release#

This is an overview of the 5.4 release.

New Features#

  • hg purge/hg clean can now delete ignored files instead of untracked files, with the new -i flag.

  • hg pull now has a --confirm flag to prompt before applying changes. Config option pull.confirm is also added for that.

  • hg log now defaults to using an ‘%’ symbol for commits involved in unresolved merge conflicts. That includes unresolved conflicts caused by e.g. hg update --merge and hg graft. ‘@’ still takes precedence, so what used to be marked ‘@’ still is.

  • New conflictlocal() and conflictother() revsets return the commits that are being merged, when there are conflicts. Also works for conflicts caused by e.g. hg graft.

  • hg copy --forget can be used to unmark a file as copied.

  • The format.revlog-compression configuration entry now accept a list. The first available option will be used. for example setting: {{{ [format] revlog-compression=zstd, zlib }}}

Will use zstd compression for new repositories if available, and will simply fall back to zlib if not.

  • hg debugmergestate output is now templated, which may be useful e.g. for IDEs that want to help the user resolve merge conflicts.

New Experimental Features#

  • hg copy now supports a --at-rev argument to mark files as copied in the specified commit. It only works with --after for now (i.e., it’s only useful for marking files copied using non-hg cp as copied).

  • Use hg copy --forget --at-rev REV to unmark already committed copies.

Bug Fixes#

  • Fix server exception when concurrent pushes delete the same bookmark

  • Prevent pushes of divergent bookmarks (foo@remote)

  • The push error “remote repository changed while pushing - please try again” now only happens when a concurrent push changed related heads (instead of when a concurrent pushed any revision).

Backwards Compatibility Changes#

  • When hg rebase pauses for merge conflict resolution, the working copy will no longer have the rebased node as a second parent. You can use the new conflictparents() revset for finding the other parent during a conflict.

  • hg rebase now accepts repeated --source and --base arguments. For example, hg rebase --source 'A + B' is equivalent to hg rebase --source A --source B.

This is a backwards-incompatible change because it will break overriding an alias myrebase = rebase --source A by hg myrebase --source B (it will now rebase (A + B):: instead of B::).

  • hg recover does not verify the validity of the whole repository anymore. You can pass --verify or call hg verify if necessary.

  • hg debugmergestate output format changed. Let us know if that is causing you problems and we’ll roll it back.

  • Resolved merge conflicts are now cleared by hg commit even if the working copy has no changes.

Internal API Changes#

  • The deprecated ui.progress() has now been deleted. Please use ui.makeprogress() instead.

  • hg.merge() now takes a ctx instead of the previous repo and node arguments.

  • hg.merge() has lost its abort argument. Please call hg.abortmerge() directly instead.

  • hg.merge() has lost its mergeforce argument. It should have only ever been called with the same value as the force argument.

  • The *others argument of cmdutil.check_incompatible_arguments() changed from being varargs argument to being a single collection.