The command printf "body\n\ntest: foo\ntest: froz\n" | git -c trailer.test.key=tested -c trailer.test.command="echo by \$ARG" interpret-trailers gives: body tested: foo tested: froz tested: by froz I expected the command to be run on each "test" key, resulting in the output: body: tested: by foo tested: by froz (In a real life scenario, I would use ifexists replace.)[*] Maybe my expectation is wrong? The code breaks out of the loop after the first matching in_tok, apparently intentionally so. But I'm not sure - the key is replaced for both instances. Simply replacing that "return 1" by a "ret = 1" etc. runs into problems with the way the freeing of in_tok and arg_tok is arranged there :| Basically, I expected the trailer command to work "grep/sed-like" on all key value pairs that have matching keys, passing the value to the command, and using the (each) command's output as the new value for each of these pairs. Michael [*] My prime use case: fill in reported-by etc. with short author names, completed the same way we complete --author=jun using a trailer command (interpret-trailers in the commit-msg hook): $ git help author `git author' is aliased to `!f() { a=$(git log -1 --all -i --format="%aN <%aE>" --author "$1"); echo ${a:-$1}; }; f' $ cat .git/hooks/commit-msg #!/bin/sh git interpret-trailers --in-place "$1" $ git config --get-regexp trailer trailer.report.key Reported-by trailer.report.command git author '$ARG' trailer.report.ifexists replace trailer.report.ifmissing doNothing -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html