Subject: Re: [RFC PATCH] t5500-fetch-pack.sh: fix suppression of Git exit code in tests

From: Junio C Hamano <[email-masked]>
Date: Sun, 11 Jan 2026 14:50:37 -0800

Shreyansh Paliwal <[email-masked]> writes:

> +	test_oid algo >oid_algo &&
> +	git rev-parse other >oid_other &&
> +	git rev-parse main >oid_main &&

It is unusual to take these to temporary files.  If you want to
reuse the value more than once, it is more common to take them in
variables.

>  	GIT_PROTOCOL=version=2 git upload-pack . <<-EOF >/dev/null
>  	0012command=fetch
> -	$(echo "object-format=$(test_oid algo)" | packetize)
> +	$(echo "object-format=$(<oid_algo)" | packetize)

The construct $(<file) is bashism, that does not work if your shell
is not bash, isn't it?  If you used a variable, e.g.,

	$(echo "object-format=$oid_algo" | packetize)

that would make the result more portable.

In any case, since the output of "echo" is sent to "| packetize",
the exit code of $(test_oid algo) would not affect the bigger
picture, and so would a failure from $(<oid_algo).  I am not sure if
this conversion has any value wrt to "suppression of exit code".  If
$(<oid_algo) construct fails to read the oid_algo file, the upstream
of "| packetize" may exit with non-zero code, but the downstream of
the pipe would hide it.

THe same comment applies to other two uses of $(<file) construct.