On 01/02/18 09:49, Nicolas Morey-Chaisemartin wrote: > Add a --edit option whichs allows modifying the messages provided by -m or -F, > the same way git commit --edit does. > > Signed-off-by: Nicolas Morey-Chaisemartin <NMoreyChaisemartin@xxxxxxxx> > --- > Documentation/git-tag.txt | 6 ++++++ > builtin/tag.c | 11 +++++++++-- > t/t7004-tag.sh | 34 ++++++++++++++++++++++++++++++++++ > 3 files changed, 49 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt > index 956fc019f984..b9e5a993bea0 100644 > --- a/Documentation/git-tag.txt > +++ b/Documentation/git-tag.txt > @@ -167,6 +167,12 @@ This option is only applicable when listing tags without annotation lines. > Implies `-a` if none of `-a`, `-s`, or `-u <keyid>` > is given. > > +-e:: > +--edit:: > + The message taken from file with `-F` and command line with > + `-m` are usually used as the tag message unmodified. > + This option lets you further edit the message taken from these sources. > + > --cleanup=<mode>:: > This option sets how the tag message is cleaned up. > The '<mode>' can be one of 'verbatim', 'whitespace' and 'strip'. The > diff --git a/builtin/tag.c b/builtin/tag.c > index a7e6a5b0f234..91c60829d5f9 100644 > --- a/builtin/tag.c > +++ b/builtin/tag.c > @@ -194,6 +194,7 @@ static int build_tag_object(struct strbuf *buf, int sign, struct object_id *resu > > struct create_tag_options { > unsigned int message_given:1; > + unsigned int use_editor:1; > unsigned int sign; > enum { > CLEANUP_NONE, > @@ -224,7 +225,7 @@ static void create_tag(const struct object_id *object, const char *tag, > tag, > git_committer_info(IDENT_STRICT)); > > - if (!opt->message_given) { > + if (!opt->message_given || opt->use_editor) { > int fd; > > /* write the template message before editing: */ > @@ -233,7 +234,10 @@ static void create_tag(const struct object_id *object, const char *tag, > if (fd < 0) > die_errno(_("could not create file '%s'"), path); > > - if (!is_null_oid(prev)) { > + if (opt->message_given) { > + write_or_die(fd, buf->buf, buf->len); > + strbuf_reset(buf); > + } else if (!is_null_oid(prev)) { > write_tag_body(fd, prev); > } else { > struct strbuf buf = STRBUF_INIT; > @@ -372,6 +376,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) > static struct ref_sorting *sorting = NULL, **sorting_tail = &sorting; > struct ref_format format = REF_FORMAT_INIT; > int icase = 0; > + int edit_flag = 0; > struct option options[] = { > OPT_CMDMODE('l', "list", &cmdmode, N_("list tag names"), 'l'), > { OPTION_INTEGER, 'n', NULL, &filter.lines, N_("n"), > @@ -386,6 +391,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) > OPT_CALLBACK('m', "message", &msg, N_("message"), > N_("tag message"), parse_msg_arg), > OPT_FILENAME('F', "file", &msgfile, N_("read message from file")), > + OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")), s/commit/tag message/ ? ATB, Ramsay Jones