Re: [PATCH v3] parallel-checkout: avoid dash local bug in tests
From: Junio C Hamano <hidden>
Date: 2021-06-06 01:41:44
René Scharfe [off-list ref] writes:
Dash bug https://bugs.launchpad.net/ubuntu/+source/dash/+bug/139097 lets the shell erroneously perform field splitting on the expansion of a command substitution during declaration of a local variable. It causes the parallel-checkout tests to fail e.g. when running them with /bin/dash on MacOS 11.4, where they error out like this: ./t2080-parallel-checkout-basics.sh: 33: local: 0: bad variable name That's because the output of wc -l contains leading spaces and the returned number of lines is treated as another variable to declare, i.e. as in "local workers= 0". Work around it by enclosing the command substitution in quotes. Helped-by: Matheus Tavares Bernardino [off-list ref] Helped-by: SZEDER Gábor [off-list ref] Helped-by: Ævar Arnfjörð Bjarmason [off-list ref] Signed-off-by: René Scharfe <redacted> --- Changes since v2: - Use minimal fix. - New commit message.
Thanks. As I said, I do not necessarily think this is conceptually "minimal", but we use workers only once and without surrounding dq so it is easy to see that this also is correct. Will queue.
quoted hunk
t/lib-parallel-checkout.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/t/lib-parallel-checkout.sh b/t/lib-parallel-checkout.sh index 21f5759732..83b279a846 100644 --- a/t/lib-parallel-checkout.sh +++ b/t/lib-parallel-checkout.sh@@ -27,7 +27,7 @@ test_checkout_workers () { rm -f "$trace_file" && GIT_TRACE2="$(pwd)/$trace_file" "$@" 2>&8 && - local workers=$(grep "child_start\[..*\] git checkout--worker" "$trace_file" | wc -l) && + local workers="$(grep "child_start\[..*\] git checkout--worker" "$trace_file" | wc -l)" && test $workers -eq $expected_workers && rm "$trace_file" } 8>&2 2>&4 --2.31.1