Differences between revisions 8 and 11 (spanning 3 versions)
Revision 8 as of 2017-12-07 17:30:21
Size: 2641
Editor: KevinBullock
Comment: fix link to 4.4sprint
Revision 11 as of 2018-02-21 05:27:07
Size: 4324
Editor: GregorySzorc
Comment: remote server support for `hg bundle`
Deletions are marked like this. Additions are marked like this.
Line 39: Line 39:
== Sensible merge diffs ==

Mercurial shows diffs against the first parent for all changesets, including merges, unless explicitly instructed to show the diff against the second parent. It would be better if we could show only the changes which were made to resolve conflicts. Unified diff by definition can only show the differences between a parent and a child revision, but both Git's merge diff and the now-unmaintained [[MergediffExtension]] extend this by adding a second column of +/- annotations on each line.

It's possible we could even do better, by showing only the changes that were made to resolve conflicts (something like a diff between the mechanical merge output and the actual committed code). This would save users from needing to learn to read an even more complicated format than unified diff.

== .mailmap support ==

Git supports a .mailmap file that can be used to map author names and email addresses to new values. For more info, see https://github.com/git/git/blob/5be1f00a9a701532232f57958efab4be8c959a29
/Documentation/mailmap.txt.

Mercurial could likely support mailmap files relatively easily. Implementing it at the templating layer to rewrite author fields would be relatively easy. Implementing it in revsets is also pretty reasonable. Wiring it in to the changeset level is a bit more complicated since that could influence e.g. history rewriting. It probably lives in the revset and templating layer.

== `hg bundle` remote server support ==

It should be possible to use `hg bundle` against a remote server. This would convert the arguments into a `getbundle` wire protocol call and stream the emitted bundle to a local file.

Note:

This page is primarily intended for developers of Mercurial.

Good Ideas for Enhancements

Ideas that the community has discussed and largely approved of, but no one has yet implemented. This is somewhat distinct from Plan pages, although the two lists may overlap.

Projects listed here may be a good starting point for new contributors wanting to take on a more significant contribution than fixing "easy" bugs, without having to take on an up-front design discussion.

1. Expect Revset

expect(<set>, <int>) revset: fails if <set> isn’t exactly <int> elements

expect(<set>, <min>, <max>) revset: fails if <set> isn’t exactly between <min> and <max> inclusive

one(<set>) alias for expect(<set>, 1)

This then allows an alias for hg next to be update -r one(children(.)) with sane failure behavior, and also makes some other scripting tasks a little less difficult.

2. hg shellprompt

hg shellprompt bash "{branch} {node|shortest}": emits string for eval in bash to efficiently produce the specified template. Opens the door to first-part native prompt helpers that don’t have to start a Python. Prior art in docker’s command line tools?

Notes from the 4.4sprint on this topic:

  • FB has scm-prompt.sh in fb-hgext/scripts/ (demoed by Ryan)

  • Commonly requested feature: status. Too slow to include though
  • Possible solutions: async zsh prompts; watchman-push updated prompt simple dict file in .hg (could also be cronned or only updated when hg commands are run)
  • Kevin likes the template language for "hgprompt" (author: sjl on bitbucket). Idea: have extension print out some shell code that could be evaled. Since it's owned by mercurial, it can do things the "best" way given the current mercurial release (eg, in a future with minimal startup time, could be an hg command, but for how could be something more similar to scm-prompt.sh)

3. Make `hg grep` do what people expect

See GrepPlan for details. Not a small project, but would be greatly appreciated by many users.

4. Make -S/--subrepos flags unnecessary

It has always been the intention to make commands like hg status, hg add, hg remove, etc. handle subrepos transparently. The way to go about that is outlined here; status of this work was being tracked on SubrepoWork.

5. Sensible merge diffs

Mercurial shows diffs against the first parent for all changesets, including merges, unless explicitly instructed to show the diff against the second parent. It would be better if we could show only the changes which were made to resolve conflicts. Unified diff by definition can only show the differences between a parent and a child revision, but both Git's merge diff and the now-unmaintained MergediffExtension extend this by adding a second column of +/- annotations on each line.

It's possible we could even do better, by showing only the changes that were made to resolve conflicts (something like a diff between the mechanical merge output and the actual committed code). This would save users from needing to learn to read an even more complicated format than unified diff.

6. .mailmap support

Git supports a .mailmap file that can be used to map author names and email addresses to new values. For more info, see https://github.com/git/git/blob/5be1f00a9a701532232f57958efab4be8c959a29 /Documentation/mailmap.txt.

Mercurial could likely support mailmap files relatively easily. Implementing it at the templating layer to rewrite author fields would be relatively easy. Implementing it in revsets is also pretty reasonable. Wiring it in to the changeset level is a bit more complicated since that could influence e.g. history rewriting. It probably lives in the revset and templating layer.

7. `hg bundle` remote server support

It should be possible to use hg bundle against a remote server. This would convert the arguments into a getbundle wire protocol call and stream the emitted bundle to a local file.

8. See Also


CategoryDeveloper CategoryNewFeatures

WeShouldDoThat (last edited 2020-09-25 04:26:54 by MattHarbison)