All of lore.kernel.org
 help / color / mirror / Atom feed
From: "ZheNing Hu via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Christian Couder <christian.couder@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	ZheNing Hu <adlternative@gmail.com>
Subject: [PATCH v5 0/2] [GSOC]trailer: pass arg as positional parameter
Date: Wed, 31 Mar 2021 10:05:45 +0000	[thread overview]
Message-ID: <pull.913.v5.git.1617185147.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.913.v4.git.1616775185562.gitgitgadget@gmail.com>

In https://lore.kernel.org/git/xmqqv99i4ck2.fsf@gitster.g/ Junio and
Christian talked about the problem of using strbuf_replace() to replace
$ARG.

Now pass trailer value as $1 to the trailer command with another
trailer.<token>.cmd config.

ZheNing Hu (2):
  [GSOC] run-command: add shell_no_implicit_args option
  [GSOC]trailer: pass arg as positional parameter

 Documentation/git-interpret-trailers.txt | 75 ++++++++++++++++++++----
 run-command.c                            |  8 +--
 run-command.h                            |  1 +
 t/t7513-interpret-trailers.sh            | 61 ++++++++++++++++++-
 trailer.c                                | 38 ++++++++----
 5 files changed, 157 insertions(+), 26 deletions(-)


base-commit: 142430338477d9d1bb25be66267225fb58498d92
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-913%2Fadlternative%2Ftrailer-pass-ARG-env-v5
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-913/adlternative/trailer-pass-ARG-env-v5
Pull-Request: https://github.com/gitgitgadget/git/pull/913

Range-diff vs v4:

 -:  ------------ > 1:  4c59cab53a0d [GSOC] run-command: add shell_no_implicit_args option
 1:  e2bbdcb943c2 ! 2:  5894d8c4b364 [GSOC]trailer: pass arg as positional parameter
     @@ Commit message
          scripts.
      
          Helped-by: Junio C Hamano <gitster@pobox.com>
     +    Helped-by: Christian Couder <christian.couder@gmail.com>
          Signed-off-by: ZheNing Hu <adlternative@gmail.com>
      
       ## Documentation/git-interpret-trailers.txt ##
     -@@ Documentation/git-interpret-trailers.txt: also be executed for each of these arguments. And the <value> part of
     - these arguments, if any, will be used to replace the `$ARG` string in
     - the command.
     - 
     +@@ Documentation/git-interpret-trailers.txt: trailer.<token>.command::
     + 	be called to automatically add or modify a trailer with the
     + 	specified <token>.
     + +
     +-When this option is specified, the behavior is as if a special
     +-'<token>=<value>' argument were added at the beginning of the command
     +-line, where <value> is taken to be the standard output of the
     +-specified command with any leading and trailing whitespace trimmed
     +-off.
     ++When this option is specified, the first occurrence of substring $ARG is
     ++replaced with the value given to the `interpret-trailer` command for the
     ++same token.
     + +
     +-If the command contains the `$ARG` string, this string will be
     +-replaced with the <value> part of an existing trailer with the same
     +-<token>, if any, before the command is launched.
     ++".command" has been deprecated due to the $ARG in the user's command can
     ++only be replaced once and the original way of replacing $ARG was not safe.
     ++Now the preferred option is using "trailer.<token>.cmd", which use position
     ++argument to pass the value.
     +++
     ++When both .cmd and .command are given for the same <token>,
     ++.cmd is used and .command is ignored.
     ++
      +trailer.<token>.cmd::
      +	The command specified by this configuration variable is run
      +	with a single parameter, which is the <value> part of an
      +	existing trailer with the same <token>.  The output from the
      +	command is then used as the value for the <token> in the
      +	resulting trailer.
     -+	The command is expected to replace `trailer.<token>.cmd`.
     -+	When both .cmd and .command are given for the same <token>,
     -+        .cmd is used and .command is ignored.
     -+
     - EXAMPLES
     - --------
     - 
     -@@ Documentation/git-interpret-trailers.txt: $ git format-patch -1
     - $ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Reviewed-by: Bob <bob@example.com>' 0001-foo.patch >0001-bar.patch
     - ------------
     - 
     --* Configure a 'sign' trailer with a command to automatically add a
     -+* Configure a 'sign' trailer with a cmd to automatically add a
     -   'Signed-off-by: ' with the author information only if there is no
     -   'Signed-off-by: ' already, and show how it works:
     +++
     ++When this option is specified, If there is no trailer with same <token>,
     ++the behavior is as if a special '<token>=<value>' argument were added at
     ++the beginning of the command, <value> will be passed to the user's
     ++command as an empty value.
       +
     -@@ Documentation/git-interpret-trailers.txt: $ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Re
     - $ git config trailer.sign.key "Signed-off-by: "
     - $ git config trailer.sign.ifmissing add
     - $ git config trailer.sign.ifexists doNothing
     --$ git config trailer.sign.command 'echo "$(git config user.name) <$(git config user.email)>"'
     -+$ git config trailer.sign.cmd 'echo "$(git config user.name) <$(git config user.email)>"'
     - $ git interpret-trailers <<EOF
     - > EOF
     + If some '<token>=<value>' arguments are also passed on the command
     + line, when a 'trailer.<token>.command' is configured, the command will
     + also be executed for each of these arguments. And the <value> part of
     +-these arguments, if any, will be used to replace the `$ARG` string in
     +-the command.
     ++these arguments, if any, will be passed to the command as first parameter.
       
     + EXAMPLES
     + --------
      @@ Documentation/git-interpret-trailers.txt: subject
       Fix #42
       ------------
       
     --* Configure a 'see' trailer with a command to show the subject of a
      +* Configure a 'see' trailer with a cmd to show the subject of a
     ++  commit that is related, and show how it works:
     +++
     ++------------
     ++$ git config trailer.see.key "See-also: "
     ++$ git config trailer.see.ifExists "replace"
     ++$ git config trailer.see.ifMissing "doNothing"
     ++$ git config trailer.see.cmd "git show -s --pretty=reference \"\$1\""
     ++$ git interpret-trailers <<EOF
     ++> subject
     ++> 
     ++> message
     ++> 
     ++> see: HEAD~2
     ++> EOF
     ++subject
     ++
     ++message
     ++
     ++See-also: fe3187489d69c4 (subject of related commit, 2021-3-20)
     ++------------
     ++
     ++* Configure a 'bug' trailer with a cmd to show when and where
     ++  was the bug introduced, and show how it works:
     +++
     ++------------
     ++$ git config trailer.bug.key "Bug-from: "
     ++$ git config trailer.bug.ifExists "replace"
     ++$ git config trailer.bug.cmd "git log --grep \"\$1\" -1 --pretty=\"%h %aD\""
     ++$ git interpret-trailers --trailer="bug:the information manager from hell" <<EOF
     ++> subject
     ++> 
     ++> message
     ++> 
     ++> EOF
     ++subject
     ++
     ++message
     ++
     ++Bug-from: 57d84f8d93 Mon, 6 Aug 2012 18:27:09 +0700
     ++------------
     ++
     + * Configure a 'see' trailer with a command to show the subject of a
         commit that is related, and show how it works:
       +
     - ------------
     - $ git config trailer.see.key "See-also: "
     - $ git config trailer.see.ifExists "replace"
     - $ git config trailer.see.ifMissing "doNothing"
     --$ git config trailer.see.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG"
     -+$ git config trailer.see.cmd "test -n \"\$1\" && git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \"\$1\"|| true "
     - $ git interpret-trailers <<EOF
     - > subject
     - > 
      
       ## t/t7513-interpret-trailers.sh ##
     +@@ t/t7513-interpret-trailers.sh: test_expect_success 'setup' '
     + 	EOF
     + '
     + 
     ++test_expect_success 'with cmd' '
     ++	test_when_finished "git config --unset trailer.bug.key && \
     ++	git config --unset trailer.bug.ifExists && \
     ++	git config --unset trailer.bug.cmd" &&
     ++	git config trailer.bug.key "Bug-maker: " &&
     ++	git config trailer.bug.ifExists "add" &&
     ++	git config trailer.bug.cmd "echo \"\$@\"" &&
     ++	cat >>expected2 <<-EOF &&
     ++
     ++	Bug-maker: 
     ++	Bug-maker: jocker
     ++	Bug-maker: batman
     ++	EOF
     ++	git interpret-trailers --trailer "bug: jocker" --trailer "bug:batman" \
     ++		>actual2 &&
     ++	test_cmp expected2 actual2
     ++'
     ++
     + test_expect_success 'without config' '
     + 	sed -e "s/ Z\$/ /" >expected <<-\EOF &&
     + 
      @@ t/t7513-interpret-trailers.sh: test_expect_success 'setup a commit' '
       	git commit -m "Add file a.txt"
       '
     @@ trailer.c: static int check_if_different(struct trailer_item *in_tok,
      -
      -	strvec_push(&cp.args, cmd.buf);
      +	if (conf->cmd) {
     ++		cp.shell_no_implicit_args = 1;
      +		strbuf_addstr(&cmd, conf->cmd);
      +		strvec_push(&cp.args, cmd.buf);
      +		if (arg)
     @@ trailer.c: static int check_if_different(struct trailer_item *in_tok,
       	cp.env = local_repo_env;
       	cp.no_stdin = 1;
       	cp.use_shell = 1;
     +-	cp.shell_no_implicit_args = 1;
     + 
     + 	if (capture_command(&cp, &buf, 1024)) {
     + 		error(_("running trailer command '%s' failed"), cmd.buf);
      @@ trailer.c: static char *apply_command(const char *command, const char *arg)
       
       static void apply_item_command(struct trailer_item *in_tok, struct arg_item *arg_tok)

-- 
gitgitgadget

  parent reply	other threads:[~2021-03-31 10:06 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23 14:53 [PATCH] [GSOC]trailer: change $ARG to environment variable ZheNing Hu via GitGitGadget
2021-03-24 15:42 ` [PATCH v2] [GSOC]trailer: pass arg as positional parameter ZheNing Hu via GitGitGadget
2021-03-24 20:18   ` Junio C Hamano
2021-03-25  1:43     ` ZheNing Hu
2021-03-25 11:53   ` [PATCH v3] " ZheNing Hu via GitGitGadget
2021-03-25 22:28     ` Junio C Hamano
2021-03-26 13:29       ` ZheNing Hu
2021-03-26 16:13     ` [PATCH v4] " ZheNing Hu via GitGitGadget
2021-03-27 18:04       ` Junio C Hamano
2021-03-27 19:53         ` Christian Couder
2021-03-28 10:46           ` ZheNing Hu
2021-03-29  9:04             ` Christian Couder
2021-03-29 13:43               ` ZheNing Hu
2021-03-30  8:45                 ` Christian Couder
2021-03-30 11:22                   ` ZheNing Hu
2021-03-30 15:07                     ` ZheNing Hu
2021-03-30 17:14                       ` Junio C Hamano
2021-03-31  5:14                         ` ZheNing Hu
2021-03-31 18:19                           ` Junio C Hamano
2021-03-31 18:29                             ` Junio C Hamano
2021-04-01  3:56                               ` ZheNing Hu
2021-04-01 19:49                                 ` Junio C Hamano
2021-04-02  2:08                                   ` ZheNing Hu
2021-04-01  3:39                             ` ZheNing Hu
2021-03-31 10:05       ` ZheNing Hu via GitGitGadget [this message]
2021-03-31 10:05         ` [PATCH v5 1/2] [GSOC] run-command: add shell_no_implicit_args option ZheNing Hu via GitGitGadget
2021-04-01  7:22           ` Christian Couder
2021-04-01  9:58             ` ZheNing Hu
2021-03-31 10:05         ` [PATCH v5 2/2] [GSOC]trailer: pass arg as positional parameter ZheNing Hu via GitGitGadget
2021-04-01  7:28         ` [PATCH v5 0/2] " Christian Couder
2021-04-01 10:02           ` ZheNing Hu
2021-04-02 13:26         ` [PATCH v6] [GSOC] trailer: add new trailer.<token>.cmd config option ZheNing Hu via GitGitGadget
2021-04-02 20:48           ` Junio C Hamano
2021-04-03  5:08             ` ZheNing Hu
2021-04-04  5:34               ` Junio C Hamano
2021-04-03  5:51             ` Christian Couder
2021-04-04 23:26               ` Junio C Hamano
2021-04-06  3:47                 ` Christian Couder
2021-04-06  3:52                   ` Christian Couder
2021-04-06  5:16                     ` ZheNing Hu
2021-04-06  5:34                       ` Junio C Hamano
2021-04-06  5:37                       ` Junio C Hamano
2021-04-04  5:43             ` ZheNing Hu
2021-04-04  8:52               ` Christian Couder
2021-04-04  9:53                 ` ZheNing Hu
2021-04-02 23:44           ` Junio C Hamano
2021-04-03  3:22             ` ZheNing Hu
2021-04-03  4:31               ` Junio C Hamano
2021-04-03  5:15                 ` ZheNing Hu
2021-04-04 13:11           ` [PATCH v7] " ZheNing Hu via GitGitGadget
2021-04-06 16:23             ` Christian Couder
2021-04-07  4:51               ` ZheNing Hu
2021-04-09 13:37             ` [PATCH v8 0/2] [GSOC] trailer: add new .cmd " ZheNing Hu via GitGitGadget
2021-04-09 13:37               ` [PATCH v8 1/2] [GSOC] docs: correct descript of trailer.<token>.command ZheNing Hu via GitGitGadget
2021-04-09 19:02                 ` Christian Couder
2021-04-10 13:40                   ` ZheNing Hu
2021-04-09 13:37               ` [PATCH v8 2/2] [GSOC] trailer: add new .cmd config option ZheNing Hu via GitGitGadget
2021-04-09 20:18                 ` Christian Couder
2021-04-10 14:09                   ` ZheNing Hu
2021-04-09 19:59               ` [PATCH v8 0/2] " Christian Couder
2021-04-12 16:39               ` [PATCH v9 " ZheNing Hu via GitGitGadget
2021-04-12 16:39                 ` [PATCH v9 1/2] [GSOC] docs: correct descript of trailer.<token>.command ZheNing Hu via GitGitGadget
2021-04-12 20:42                   ` Junio C Hamano
2021-04-16 12:03                     ` Christian Couder
2021-04-17  1:54                       ` Junio C Hamano
2021-04-12 16:39                 ` [PATCH v9 2/2] [GSOC] trailer: add new .cmd config option ZheNing Hu via GitGitGadget
2021-04-12 20:51                   ` Junio C Hamano
2021-04-13  7:33                     ` Christian Couder
2021-04-13 12:02                       ` ZheNing Hu
2021-04-13 19:18                         ` Junio C Hamano
2021-04-14 13:27                           ` ZheNing Hu
2021-04-14 20:33                             ` Junio C Hamano
2021-04-15 15:32                               ` ZheNing Hu
2021-04-15 17:41                                 ` Junio C Hamano
2021-04-16 12:54                               ` Christian Couder
2021-04-13 18:14                       ` Junio C Hamano
2021-04-16  8:47                 ` [PATCH v10 0/2] " ZheNing Hu via GitGitGadget
2021-04-16  8:47                   ` [PATCH v10 1/2] [GSOC] docs: correct descript of trailer.<token>.command ZheNing Hu via GitGitGadget
2021-04-16 19:11                     ` Junio C Hamano
2021-04-16  8:47                   ` [PATCH v10 2/2] [GSOC] trailer: add new .cmd config option ZheNing Hu via GitGitGadget
2021-04-16 19:13                     ` Junio C Hamano
2021-04-16 19:21                     ` Junio C Hamano
2021-04-16 19:25                       ` Junio C Hamano
2021-04-17  2:58                         ` Junio C Hamano
2021-04-17  3:36                           ` Junio C Hamano
2021-04-17  7:41                             ` ZheNing Hu
2021-04-17  8:11                               ` Junio C Hamano
2021-04-17 15:13                   ` [PATCH v11 0/2] " ZheNing Hu via GitGitGadget
2021-04-17 15:13                     ` [PATCH v11 1/2] [GSOC] docs: correct description of .command ZheNing Hu via GitGitGadget
2021-04-17 15:13                     ` [PATCH v11 2/2] [GSOC] trailer: add new .cmd config option ZheNing Hu via GitGitGadget
2021-04-17 22:26                     ` [PATCH v11 0/2] " Junio C Hamano
2021-04-18  7:47                       ` ZheNing Hu
2021-04-21  0:09                         ` Junio C Hamano
2021-04-21  5:47                           ` ZheNing Hu
2021-04-21 23:40                             ` Junio C Hamano
2021-04-22  9:20                               ` ZheNing Hu
2021-04-27  6:49                                 ` Junio C Hamano
2021-04-27 12:24                                   ` ZheNing Hu
2021-05-03 15:41                     ` [PATCH v12 " ZheNing Hu via GitGitGadget
2021-05-03 15:41                       ` [PATCH v12 1/2] [GSOC] docs: correct descript of trailer.<token>.command ZheNing Hu via GitGitGadget
2021-05-03 15:41                       ` [PATCH v12 2/2] [GSOC] trailer: add new .cmd config option ZheNing Hu via GitGitGadget

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.913.v5.git.1617185147.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=adlternative@gmail.com \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.