editor: use an unambiguous path suffix for editor files

Authored by mbolin.


editor: use an unambiguous path suffix for editor files

Changes the API of ui.edit() to take an optional action argument,
which is used when constructing the suffix of the temp file.
Previously, it was possible to set the suffix by specifying a suffix to the
optional extra dict that was passed to ui.edit(), but the goal is to
drop support for extra.suffix and make action a required argument.
To this end, ui.edit() now yields a develwarn() if action is not set
or if extra.suffix is set.

I updated all calls to ui.edit() I could find in hg-crew to specify the
appropriate action. This means that when creating a commit, instead
of the path to the editor file being something like:


it is now something like:


Some editors (such as Atom) make it possible to statically define a [TextMate]
grammar for files with a particular suffix. For example, because Git reliably
uses .git/COMMIT_EDITMSG and .git/MERGE_MSG as the paths for commit-type
messages, it is trivial to define a grammar that is applied when files of
either name are opened in Atom:


Because Hg historically used a generic .txt suffix, it was much harder to
disambiguate whether a file was an arbitrary text file as opposed to one
created for the specific purpose of authoring an Hg commit message.

This also makes it easier to add special support for histedit, as it has its own
suffix that is distinct from a commit:


Test Plan:
Added an integration test: test-editor-filename.t.

Manually tested: ran hg ci --amend for this change and saw that it
used /tmp/hg-editor-ZZjcz0.commit.hg.txt as the path instead of
/tmp/hg-editor-ZZjcz0.txt as the path.

Verified make tests passes.

Differential Revision: https://phab.mercurial-scm.org/D464


mbolinAug 30 2017, 4:25 PM
Differential Revision
D464: editor: use an unambiguous path suffix for editor files
rHGbfb38c5cebf4: revlog: move check for wdir from changelog to revlog