"Eric N. Vander Weele" <[email protected]> writes:
> "git filter-branch --tag-name-filter" fails when the user-provided
> command attempts to trivially append text to the originally tag name,
> passed via stdin, due to an unexpected newline ('\n'). The newline is
> introduced due to "echo" piping the original tag name to the
> user-provided tag name filter command.
Is there any other place where we feed such an incomplete line
(i.e. a line without the terminating LF) to the filters in this
command?
I am guessing that the answer to that question would be no, and all
existing scripts by users expect the newline at the end of each
line. So I would have to say that "due to an unexpected newline" is
a misleading statement--isn't it a bug in your filter that it did
not expect one?
> The only portable usage of "echo" is without any options and escape
> sequences. Therefore, replacing "echo" with "printf" is a suitable,
> POSIX compliant alternative.
Yes, if we wanted to emit an incomplete line, we would be using
printf "%s" "$var"
instead of
echo -n "$var"
for portability. But that would not belong to the log message for
this patch. If the patch were to correct a script that originally
used "echo -n" to produce an incomplete line to instead use "printf",
these three lines would have been a perfect log message.
Thanks.
> Signed-off-by: Eric N. Vander Weele <[email protected]>
> ---
> git-filter-branch.sh | 2 +-
> t/t7003-filter-branch.sh | 5 +++++
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/git-filter-branch.sh b/git-filter-branch.sh
> index 98f1779..949cd30 100755
> --- a/git-filter-branch.sh
> +++ b/git-filter-branch.sh
> @@ -503,7 +503,7 @@ if [ "$filter_tag_name" ]; then
> new_sha1="$(cat "../map/$sha1")"
> GIT_COMMIT="$sha1"
> export GIT_COMMIT
> - new_ref="$(echo "$ref" | eval "$filter_tag_name")" ||
> + new_ref="$(printf "$ref" | eval "$filter_tag_name")" ||
> die "tag name filter failed: $filter_tag_name"
>
> echo "$ref -> $new_ref ($sha1 -> $new_sha1)"
> diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
> index 869e0bf..0db6808 100755
> --- a/t/t7003-filter-branch.sh
> +++ b/t/t7003-filter-branch.sh
> @@ -269,6 +269,11 @@ test_expect_success 'Tag name filtering retains tag
> message' '
> test_cmp expect actual
> '
>
> +test_expect_success 'Tag name filter does not pass tag ref with newline' '
> + git filter-branch -f --tag-name-filter "cat && printf "_append"" -- A &&
> + git rev-parse A_append > /dev/null 2>&1
> +'
> +
> faux_gpg_tag='object XXXXXX
> type commit
> tag S
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html