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 v8 0/2] [GSOC] trailer: add new .cmd config option Date: Fri, 09 Apr 2021 13:37:40 +0000 [thread overview] Message-ID: <pull.913.v8.git.1617975462.gitgitgadget@gmail.com> (raw) In-Reply-To: <pull.913.v7.git.1617541912381.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: 1. if the user's script has more than one $ARG, only the first one will be replaced, which is incorrected. 2. $ARG is textually replaced without shell syntax, which may result a broken command when $ARG include some unmatching single quote, very unsafe. Now pass trailer value as $1 to the trailer command with another trailer.<token>.cmd config, to solve these above two problems, We are now writing documents that are more readable and correct than before. ZheNing Hu (2): [GSOC] docs: correct descript of trailer.<token>.command [GSOC] trailer: add new .cmd config option Documentation/git-interpret-trailers.txt | 90 ++++++++++++++++++++---- t/t7513-interpret-trailers.sh | 84 ++++++++++++++++++++++ trailer.c | 37 +++++++--- 3 files changed, 187 insertions(+), 24 deletions(-) base-commit: 142430338477d9d1bb25be66267225fb58498d92 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-913%2Fadlternative%2Ftrailer-pass-ARG-env-v8 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-913/adlternative/trailer-pass-ARG-env-v8 Pull-Request: https://github.com/gitgitgadget/git/pull/913 Range-diff vs v7: -: ------------ > 1: 505903811df8 [GSOC] docs: correct descript of trailer.<token>.command 1: 1e9a6572ac6f ! 2: 3dc8983a4702 [GSOC] trailer: add new trailer.<token>.cmd config option @@ Metadata Author: ZheNing Hu <adlternative@gmail.com> ## Commit message ## - [GSOC] trailer: add new trailer.<token>.cmd config option + [GSOC] trailer: add new .cmd config option The `trailer.<token>.command` configuration variable specifies a command (run via the shell, so it does not have @@ Commit message * Because $ARG is textually replaced without regard to the shell language syntax, even '$ARG' (inside a single-quote pair), which a user would expect to stay intact, would be - replaced, and worse, if the value had an unmatching single + replaced, and worse, if the value had an unmatched single quote (imagine a name like "O'Connor", substituted into NAME='$ARG' to make it NAME='O'Connor'), it would result in a broken command that is not syntactically correct (or @@ Commit message Introduce a new `trailer.<token>.cmd` configuration that takes higher precedence to deprecate and eventually remove - `trailer.<token>.command`, which passes the value as a - parameter to the command. Instead of "$ARG", the users will + `trailer.<token>.command`, which passes the value as an + argument to the command. Instead of "$ARG", users can refer to the value as positional argument, $1, in their scripts. @@ Documentation/git-interpret-trailers.txt: trailer.<token>.command:: 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. +-'--trailer <token>=<value>' argument was added at the beginning of +-the "git interpret-trailers" command, 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. This option behaves in a similar way as ".cmd", however, it -+passes the value through $ARG. - + --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. ++same token. It passes the value through `$ARG`, otherwise this option behaves ++in the same way as 'trailer.<token>.cmd'. ++ -+When both .cmd and .command are given for the same <token>, -+.cmd is used and .command is ignored. ++The 'trailer.<token>.command' option has been deprecated due to the fact ++that $ARG in the user's command can only be replaced once and that the ++original way of replacing $ARG was not safe. Now the preferred option is ++'trailer.<token>.cmd', which uses a positional argument to pass the value. + + +-The first occurrence of substring `$ARG` will be replaced with the +-<value> part of an existing trailer with the same <token>, if any, +-before the command is launched. ++When both 'trailer.<token>.cmd' and 'trailer.<token>.command' are given ++for the same <token>, 'trailer.<token>.cmd' is used and ++'trailer.<token>.command' is ignored. + +trailer.<token>.cmd:: + The command specified by this configuration variable is run @@ Documentation/git-interpret-trailers.txt: trailer.<token>.command:: + from the command is then used as the value for the <token> + in the resulting trailer. ++ -+When this option is specified, the behavior is as if a '<token>=<value>' -+argument were added at the beginning of the "git interpret-trailers" -+command, the command specified by this configuration variable will be -+called with an empty string as the argument. ++When this option is specified, the behavior is as if a ++'--trailer <token>=<value>' argument was added at the beginning of ++the "git interpret-trailers" command, the command specified by this ++configuration variable will be called with an empty string as the ++argument. + - 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. -+line, when a 'trailer.<token>.cmd' is configured, the command is run -+once for each `--trailer <token>=<value>` on the command line with the -+same <token>. And the <value> part of these arguments, if any, will be -+passed to the command as its first argument. +-If some '<token>=<value>' arguments are also passed on the command +-line, when a 'trailer.<token>.command' is configured, the command is run +-once for each these arguments with the same <token>. And the <value> +-part of these arguments, if any, will be used to replace the first `$ARG` +-string in the command. ++If some '--trailer <token>=<value>' arguments are also passed on the ++command line, when a 'trailer.<token>.cmd' is configured, the command ++is run once for each `--trailer <token>=<value>` on the command line ++with the same <token>. And the <value> part of these arguments, if any, ++will be passed to the command as its first argument. EXAMPLES -------- @@ t/t7513-interpret-trailers.sh: test_expect_success 'setup a commit' ' + test_when_finished "git config --unset trailer.fix.cmd" && + git config trailer.fix.ifExists "replace" && + git config trailer.fix.cmd "test -n \"\$1\" && git log -1 --oneline --format=\"%h (%aN)\" \ -+ --abbrev-commit --abbrev=14 \"\$1\" || true" && ++ --abbrev-commit --abbrev=14 \"\$1\" || true" && + git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" \ + --abbrev-commit --abbrev=14 \$ARG" && + FIXED=$(git log -1 --oneline --format="%h (%aN)" --abbrev-commit --abbrev=14 HEAD) && @@ t/t7513-interpret-trailers.sh: test_expect_success 'setup a commit' ' + test_expect_success 'with command using $ARG' ' git config trailer.fix.ifExists "replace" && -- git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" && -+ git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" \ -+ --abbrev-commit --abbrev=14 \$ARG" && - FIXED=$(git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 HEAD) && - cat complex_message_body >expected && - sed -e "s/ Z\$/ /" >>expected <<-EOF && + git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" && ## trailer.c ## @@ trailer.c: struct conf_info { -- gitgitgadget
next prev parent reply other threads:[~2021-04-09 13:37 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 ` [PATCH v5 0/2] " ZheNing Hu via GitGitGadget 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 ` ZheNing Hu via GitGitGadget [this message] 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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=pull.913.v8.git.1617975462.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 \ --subject='Re: [PATCH v8 0/2] [GSOC] trailer: add new .cmd config option' \ /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
Code repositories for project(s) associated with this 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).