Thread (47 messages) 47 messages, 4 authors, 2021-12-11

Re: [PATCH 11/19] tests: fix broken &&-chains in `$(...)` command substitutions

From: Eric Sunshine <hidden>
Date: 2021-12-09 16:54:06

On Thu, Dec 9, 2021 at 11:44 AM Elijah Newren [off-list ref] wrote:
On Wed, Dec 8, 2021 at 11:39 PM Eric Sunshine [off-list ref] wrote:
quoted
 test_expect_success !MINGW 'a constipated git dies with SIGPIPE even if parent ignores it' '
-       OUT=$( ((trap "" PIPE; large_git; echo $? 1>&3) | :) 3>&1 ) &&
+       OUT=$( ((trap "" PIPE && large_git; echo $? 1>&3) | :) 3>&1 ) &&
Shouldn't the second ';' be replaced with '&&' as well?
Thanks for reading so carefully. In this case, the answer is "no", the
semicolon is correct. This code legitimately wants to capture in the
OUT variable the numeric exit status of the command preceding `echo
$?`. If the semicolon is replaced with `&&`, then the echo won't be
executed if the exit status is non-zero, but we want `echo` to be
executed regardless of the exit status. So, the code is correct with
the semicolon, and would be incorrect with `&&`. (I hope I'm
explaining this well enough to make sense.)

It's this sort of special case which accounts for why the new linter
(as mentioned in the cover letter) has special understanding that a
broken &&-chain can be legitimate in certain circumstances, such as
explicit handling of `$?`.
quoted
-       OUT=$( ((trap "" PIPE; git rm -n "some-file-*"; echo $? 1>&3) | :) 3>&1 ) &&
+       OUT=$( ((trap "" PIPE && git rm -n "some-file-*"; echo $? 1>&3) | :) 3>&1 ) &&
Same here; shouldn't the second ';' be replaced with '&&' as well?
Same answer as above.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help