git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCHv3] tag: add --edit option
@ 2018-02-06  8:36 Nicolas Morey-Chaisemartin
  2018-02-07 10:00 ` Eric Sunshine
  0 siblings, 1 reply; 3+ messages in thread
From: Nicolas Morey-Chaisemartin @ 2018-02-06  8:36 UTC (permalink / raw)
  To: git; +Cc: sunshine

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@suse.com>
---

Changes since v2 ( https://public-inbox.org/git/e99947cf-93ba-9376-f059-7f6a369d3ad5@suse.com ):
 * Add [-e] to git tag summary


 Documentation/git-tag.txt |  8 +++++++-
 builtin/tag.c             | 11 +++++++++--
 t/t7004-tag.sh            | 30 ++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index 956fc019f984..1d17101bac39 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -9,7 +9,7 @@ git-tag - Create, list, delete or verify a tag object signed with GPG
 SYNOPSIS
 --------
 [verse]
-'git tag' [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>]
+'git tag' [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>] [-e]
 	<tagname> [<commit> | <object>]
 'git tag' -d <tagname>...
 'git tag' [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
@@ -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..ce5cac3dd23f 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 tag message")),
 		OPT_BOOL('s', "sign", &opt.sign, N_("annotated and GPG-signed tag")),
 		OPT_STRING(0, "cleanup", &cleanup_arg, N_("mode"),
 			N_("how to strip spaces and #comments from message")),
@@ -524,6 +530,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		die(_("tag '%s' already exists"), tag);
 
 	opt.message_given = msg.given || msgfile;
+	opt.use_editor = edit_flag;
 
 	if (!cleanup_arg || !strcmp(cleanup_arg, "strip"))
 		opt.cleanup_mode = CLEANUP_ALL;
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index a9af2de9960b..063996ddc05c 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -452,6 +452,21 @@ test_expect_success \
 	test_cmp expect actual
 '
 
+get_tag_header annotated-tag-edit $commit commit $time >expect
+echo "An edited message" >>expect
+test_expect_success 'set up editor' '
+	write_script fakeeditor <<-\EOF
+	sed -e "s/A message/An edited message/g" <"$1" >"$1-"
+	mv "$1-" "$1"
+	EOF
+'
+test_expect_success \
+	'creating an annotated tag with -m message --edit should succeed' '
+	EDITOR=./fakeeditor	git tag -m "A message" --edit annotated-tag-edit &&
+	get_tag_msg annotated-tag-edit >actual &&
+	test_cmp expect actual
+'
+
 cat >msgfile <<EOF
 Another message
 in a file.
@@ -465,6 +480,21 @@ test_expect_success \
 	test_cmp expect actual
 '
 
+get_tag_header file-annotated-tag-edit $commit commit $time >expect
+sed -e "s/Another message/Another edited message/g" msgfile >>expect
+test_expect_success 'set up editor' '
+	write_script fakeeditor <<-\EOF
+	sed -e "s/Another message/Another edited message/g" <"$1" >"$1-"
+	mv "$1-" "$1"
+	EOF
+'
+test_expect_success \
+	'creating an annotated tag with -F messagefile --edit should succeed' '
+	EDITOR=./fakeeditor	git tag -F msgfile --edit file-annotated-tag-edit &&
+	get_tag_msg file-annotated-tag-edit >actual &&
+	test_cmp expect actual
+'
+
 cat >inputmsg <<EOF
 A message from the
 standard input
-- 
2.16.1.73.g3702124ca069


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCHv3] tag: add --edit option
  2018-02-06  8:36 [PATCHv3] tag: add --edit option Nicolas Morey-Chaisemartin
@ 2018-02-07 10:00 ` Eric Sunshine
  2018-02-07 20:47   ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Sunshine @ 2018-02-07 10:00 UTC (permalink / raw)
  To: Nicolas Morey-Chaisemartin; +Cc: Git List

On Tue, Feb 6, 2018 at 3:36 AM, Nicolas Morey-Chaisemartin
<nmoreychaisemartin@suse.com> 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@suse.com>
> ---
> Changes since v2 ( https://public-inbox.org/git/e99947cf-93ba-9376-f059-7f6a369d3ad5@suse.com ):
>  * Add [-e] to git tag summary

Thanks, I think this addresses all my comments from previous rounds.
Just a couple minor style issues below...

> diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
> @@ -452,6 +452,21 @@ test_expect_success \
> +> +test_expect_success \
> +       'creating an annotated tag with -m message --edit should succeed' '
> +       EDITOR=./fakeeditor     git tag -m "A message" --edit annotated-tag-edit &&

Whitespace between 'fakeeditor' and 'git' is a tab but should be a space.

> +       get_tag_msg annotated-tag-edit >actual &&
> +       test_cmp expect actual
> +'
> @@ -465,6 +480,21 @@ test_expect_success \
> +test_expect_success \
> +       'creating an annotated tag with -F messagefile --edit should succeed' '
> +       EDITOR=./fakeeditor     git tag -F msgfile --edit file-annotated-tag-edit &&

Ditto.

> +       get_tag_msg file-annotated-tag-edit >actual &&
> +       test_cmp expect actual
> +'

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCHv3] tag: add --edit option
  2018-02-07 10:00 ` Eric Sunshine
@ 2018-02-07 20:47   ` Junio C Hamano
  0 siblings, 0 replies; 3+ messages in thread
From: Junio C Hamano @ 2018-02-07 20:47 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: Nicolas Morey-Chaisemartin, Git List

Eric Sunshine <sunshine@sunshineco.com> writes:

> On Tue, Feb 6, 2018 at 3:36 AM, Nicolas Morey-Chaisemartin
> <nmoreychaisemartin@suse.com> 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@suse.com>
>> ---
>> Changes since v2 ( https://public-inbox.org/git/e99947cf-93ba-9376-f059-7f6a369d3ad5@suse.com ):
>>  * Add [-e] to git tag summary
>
> Thanks, I think this addresses all my comments from previous rounds.
> Just a couple minor style issues below...
>
>> diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
>> @@ -452,6 +452,21 @@ test_expect_success \
>> +> +test_expect_success \
>> +       'creating an annotated tag with -m message --edit should succeed' '
>> +       EDITOR=./fakeeditor     git tag -m "A message" --edit annotated-tag-edit &&
>
> Whitespace between 'fakeeditor' and 'git' is a tab but should be a space.
>
>> +       get_tag_msg annotated-tag-edit >actual &&
>> +       test_cmp expect actual
>> +'
>> @@ -465,6 +480,21 @@ test_expect_success \
>> +test_expect_success \
>> +       'creating an annotated tag with -F messagefile --edit should succeed' '
>> +       EDITOR=./fakeeditor     git tag -F msgfile --edit file-annotated-tag-edit &&
>
> Ditto.
>
>> +       get_tag_msg file-annotated-tag-edit >actual &&
>> +       test_cmp expect actual
>> +'

Also, GIT_EDITOR takes precedence over EDITOR, so these two new
tests should use it instead, just like other existing tests do.

Will try to amend locally before queuing, so unless I botch that (or
others find other things to tweak), no need to re-send.

Thanks, both.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-02-07 20:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-06  8:36 [PATCHv3] tag: add --edit option Nicolas Morey-Chaisemartin
2018-02-07 10:00 ` Eric Sunshine
2018-02-07 20:47   ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).