All of lore.kernel.org
 help / color / mirror / Atom feed
From: "John Passaro via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
	Patrick Steinhardt <ps@pks.im>,
	John Passaro <john.a.passaro@gmail.com>,
	John Passaro <john.a.passaro@gmail.com>
Subject: [PATCH v3 0/3] builtin/tag.c: add --trailer option
Date: Mon, 29 Apr 2024 18:54:20 +0000	[thread overview]
Message-ID: <pull.1723.v3.git.1714416863.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1723.v2.git.1714409638089.gitgitgadget@gmail.com>

Follow-up patch taking welcome feedback from Patrick and JCH.

Since git-tag --list --format="%(trailers)" can interpret trailers from
annotated tag messages, it seems natural to support --trailer when writing a
new tag message.

git-commit accomplishes this by taking --trailer arguments and passing them
to git interpret-trailer. This patch series refactors that logic and uses it
to implement --trailer on git-tag.

Also Included are updates to the i18n files, since the git-tag patch changes
some strings that are subject to translation. If I am out of my lane here,
please feel free to separate or leave out the i18n patch.

John Passaro (3):
  builtin/commit.c: refactor --trailer logic
  builtin/tag.c: add --trailer arg
  po: update git-tag translations

 Documentation/git-tag.txt |  18 +++++-
 builtin/commit.c          |  20 +------
 builtin/tag.c             |  41 +++++++++++---
 po/bg.po                  |   2 +
 po/ca.po                  |   4 +-
 po/de.po                  |   2 +
 po/el.po                  |   9 ++-
 po/es.po                  |  14 +++--
 po/fr.po                  |   2 +
 po/id.po                  |   2 +
 po/it.po                  |   6 +-
 po/ko.po                  |  10 ++--
 po/pl.po                  |   6 +-
 po/ru.po                  |   1 +
 po/sv.po                  |   2 +
 po/tr.po                  |   2 +
 po/uk.po                  |   2 +
 po/vi.po                  |   2 +
 po/zh_CN.po               |   2 +
 po/zh_TW.po               |   2 +
 t/t7004-tag.sh            | 114 ++++++++++++++++++++++++++++++++++++++
 trailer.c                 |  12 ++++
 trailer.h                 |   8 +++
 23 files changed, 237 insertions(+), 46 deletions(-)


base-commit: 786a3e4b8d754d2b14b1208b98eeb0a554ef19a8
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1723%2Fjpassaro%2Fjp%2Ftag-trailer-arg-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1723/jpassaro/jp/tag-trailer-arg-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1723

Range-diff vs v2:

 -:  ----------- > 1:  0c9517f434a builtin/commit.c: refactor --trailer logic
 1:  d4beb7cd67e ! 2:  5b6239167b8 builtin/tag.c: add --trailer arg
     @@ Metadata
       ## Commit message ##
          builtin/tag.c: add --trailer arg
      
     -    Teach git-tag to accept --trailer option to add trailers to annotated
     -    tag messages, like git-commit. Move the code that git-commit uses for
     -    trailers to the trailer.h API, so it can be re-used for git-tag.
     +    git-tag currently supports interpreting trailers from an annotated tag
     +    message, using --list --format="%(trailers)". There is no ergonomic way
     +    to add trailers to an annotated tag message.
     +
     +    In a previous patch, we refactored git-commit's implementation of its
     +    --trailer arg to the trailer.h API. Let's use that new function to teach
     +    git-tag the same --trailer argument, emulating as much of git-commit's
     +    behavior as much as possible.
      
          Signed-off-by: John Passaro <john.a.passaro@gmail.com>
     +    Helped-by: Patrick Steinhardt <ps@pks.im>
      
       ## Documentation/git-tag.txt ##
      @@ Documentation/git-tag.txt: SYNOPSIS
     @@ Documentation/git-tag.txt: This option is only applicable when listing tags with
       --edit::
       	The message taken from file with `-F` and command line with
      
     - ## builtin/commit.c ##
     -@@
     - #include "commit-reach.h"
     - #include "commit-graph.h"
     - #include "pretty.h"
     -+#include "trailer.h"
     - 
     - static const char * const builtin_commit_usage[] = {
     - 	N_("git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]\n"
     -@@ builtin/commit.c: static int prepare_to_commit(const char *index_file, const char *prefix,
     - 	fclose(s->fp);
     - 
     - 	if (trailer_args.nr) {
     --		struct child_process run_trailer = CHILD_PROCESS_INIT;
     --
     --		strvec_pushl(&run_trailer.args, "interpret-trailers",
     --			     "--in-place", "--no-divider",
     --			     git_path_commit_editmsg(), NULL);
     --		strvec_pushv(&run_trailer.args, trailer_args.v);
     --		run_trailer.git_cmd = 1;
     --		if (run_command(&run_trailer))
     -+		if (amend_file_with_trailers(git_path_commit_editmsg(), &trailer_args))
     - 			die(_("unable to pass trailers to --trailers"));
     - 		strvec_clear(&trailer_args);
     - 	}
     -
       ## builtin/tag.c ##
      @@
       #include "date.h"
     @@ builtin/tag.c: static void create_tag(const struct object_id *object, const char
       		}
       	}
       
     -@@ builtin/tag.c: struct msg_arg {
     - 	struct strbuf buf;
     - };
     - 
     -+static int opt_pass_trailer(const struct option *opt, const char *arg, int unset)
     -+{
     -+	BUG_ON_OPT_NEG(unset);
     -+
     -+	strvec_pushl(opt->value, "--trailer", arg, NULL);
     -+	return 0;
     -+}
     -+
     - static int parse_msg_arg(const struct option *opt, const char *arg, int unset)
     - {
     - 	struct msg_arg *msg = opt->value;
      @@ builtin/tag.c: int cmd_tag(int argc, const char **argv, const char *prefix)
       	struct ref_sorting *sorting;
       	struct string_list sorting_options = STRING_LIST_INIT_DUP;
     @@ builtin/tag.c: int cmd_tag(int argc, const char **argv, const char *prefix)
       		OPT_CALLBACK_F('m', "message", &msg, N_("message"),
       			       N_("tag message"), PARSE_OPT_NONEG, parse_msg_arg),
       		OPT_FILENAME('F', "file", &msgfile, N_("read message from file")),
     -+		OPT_CALLBACK_F(0, "trailer", &trailer_args, N_("trailer"), N_("add custom trailer(s)"),
     -+				PARSE_OPT_NONEG, opt_pass_trailer),
     ++		OPT_PASSTHRU_ARGV(0, "trailer", &trailer_args, N_("trailer"),
     ++				  N_("add custom trailer(s)"), PARSE_OPT_NONEG),
       		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_CLEANUP(&cleanup_arg),
     @@ t/t7004-tag.sh: test_expect_success 'git tag --format with ahead-behind' '
       	refs/tags/tag-zero-lines 0 1 !
       	EOF
       	git tag -l --format="%(refname) %(ahead-behind:HEAD) !" >actual 2>err &&
     -
     - ## trailer.c ##
     -@@
     - #include "commit.h"
     - #include "trailer.h"
     - #include "list.h"
     -+#include "run-command.h"
     - /*
     -  * Copyright (c) 2013, 2014 Christian Couder <chriscool@tuxfamily.org>
     -  */
     -@@ trailer.c: void trailer_iterator_release(struct trailer_iterator *iter)
     - 	strbuf_release(&iter->val);
     - 	strbuf_release(&iter->key);
     - }
     -+
     -+int amend_file_with_trailers(const char *path, struct strvec const* trailer_args) {
     -+	struct child_process run_trailer = CHILD_PROCESS_INIT;
     -+
     -+	run_trailer.git_cmd = 1;
     -+	strvec_pushl(&run_trailer.args, "interpret-trailers",
     -+		     "--in-place", "--no-divider",
     -+		     path, NULL);
     -+	strvec_pushv(&run_trailer.args, trailer_args->v);
     -+	return run_command(&run_trailer);
     -+}
     -
     - ## trailer.h ##
     -@@
     - 
     - #include "list.h"
     - #include "strbuf.h"
     -+#include "strvec.h"
     - 
     - enum trailer_where {
     - 	WHERE_DEFAULT,
     -@@ trailer.h: int trailer_iterator_advance(struct trailer_iterator *iter);
     -  */
     - void trailer_iterator_release(struct trailer_iterator *iter);
     - 
     -+/*
     -+ * Augment a file to add trailers to it by running git-interpret-trailers.
     -+ * This calls run_command() and its return value is the same (i.e. 0 for
     -+ * success, various non-zero for other errors). See run-command.h.
     -+ */
     -+int amend_file_with_trailers(const char *path, struct strvec const* trailer_args);
     -+
     - #endif /* TRAILER_H */
 -:  ----------- > 3:  d5335e30b0b po: update git-tag translations

-- 
gitgitgadget

  reply	other threads:[~2024-04-29 18:54 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-29  4:31 [PATCH] builtin/tag.c: add --trailer arg John Passaro via GitGitGadget
2024-04-29  6:50 ` Patrick Steinhardt
2024-04-29 14:50   ` John Passaro
2024-04-29 15:05   ` John Passaro
2024-04-29 17:07     ` Junio C Hamano
2024-04-29 15:29   ` Junio C Hamano
2024-04-29 16:38     ` John Passaro
2024-04-29 17:04       ` Junio C Hamano
2024-04-29 16:53 ` [PATCH v2] " John Passaro via GitGitGadget
2024-04-29 18:54   ` John Passaro via GitGitGadget [this message]
2024-04-29 18:54     ` [PATCH v3 1/3] builtin/commit.c: refactor --trailer logic John Passaro via GitGitGadget
2024-04-30  5:54       ` Patrick Steinhardt
2024-04-30 16:38         ` Junio C Hamano
2024-04-29 18:54     ` [PATCH v3 2/3] builtin/tag.c: add --trailer arg John Passaro via GitGitGadget
2024-04-30  5:54       ` Patrick Steinhardt
2024-04-30 16:53       ` Junio C Hamano
2024-04-30 21:48         ` John Passaro
2024-04-30 22:23           ` Junio C Hamano
2024-05-05 18:59             ` John Passaro
2024-04-29 18:54     ` [PATCH v3 3/3] po: update git-tag translations John Passaro via GitGitGadget
2024-04-29 19:22       ` Junio C Hamano
2024-04-29 19:28         ` John Passaro
2024-04-30 14:41     ` [PATCH v4 0/3] builtin/tag.c: add --trailer option John Passaro via GitGitGadget
2024-04-30 14:41       ` [PATCH v4 1/3] builtin/commit.c: remove bespoke option callback John Passaro via GitGitGadget
2024-05-02  6:27         ` Patrick Steinhardt
2024-04-30 14:41       ` [PATCH v4 2/3] builtin/commit.c: refactor --trailer logic John Passaro via GitGitGadget
2024-05-02  6:27         ` Patrick Steinhardt
2024-04-30 14:41       ` [PATCH v4 3/3] builtin/tag.c: add --trailer option John Passaro via GitGitGadget
2024-05-02  6:27       ` [PATCH v4 0/3] " Patrick Steinhardt
2024-05-05 18:49       ` [PATCH v5 " John Passaro via GitGitGadget
2024-05-05 18:49         ` [PATCH v5 1/3] builtin/commit: use ARGV macro to collect trailers John Passaro via GitGitGadget
2024-05-07 15:38           ` John Passaro
2024-05-07 17:06             ` Junio C Hamano
2024-05-05 18:49         ` [PATCH v5 2/3] builtin/commit: refactor --trailer logic John Passaro via GitGitGadget
2024-05-05 18:49         ` [PATCH v5 3/3] builtin/tag: add --trailer option John Passaro via GitGitGadget
2024-05-06  5:40         ` [PATCH v5 0/3] builtin/tag.c: " Patrick Steinhardt
2024-05-06 17:52           ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.1723.v3.git.1714416863.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=john.a.passaro@gmail.com \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.