Skip to content

Commit 9be795f

Browse files
peffgitster
authored andcommitted
t5615: avoid re-using descriptor 4
File descriptors 3 and 4 are special in our test suite, as they link back to the test script's original stdout and stderr. Normally this isn't something tests need to worry about: they are free to clobber these descriptors for sub-commands without affecting the overall script. But there's one very special thing about descriptor 4: since d88785e (test-lib: set BASH_XTRACEFD automatically, 2016-05-11), we ask bash to output "set -x" output to it by number. This goes to _any_ descriptor 4, even if it no longer points to the place it did when we set BASH_XTRACEFD. But in t5615, we run a shell loop with descriptor 4 redirected. As a result, t5615 works with non-bash shells even with "-x". And it works with bash without "-x". But the combination of "bash t5615-alternate-env.sh -x" gets a test failure (because our "set -x" output pollutes one of the files). We can fix this by using any descriptor _except_ the magical 4. So let's switch arbitrarily to using 5/6 in this loop, not 3/4. Another alternative is to use a different descriptor for BASH_XTRACEFD. But picking an unused one turns out to be hard. Most shells limit us to 9 numbered descriptors. Bash can handle more, but: - while the BASH_XTRACEFD is specific to bash, GIT_TRACE=4 has a similar problem, and would affect all shells - constructs like "999>/dev/null" are synticatically invalid to non-bash shells. So we have to actually bury it inside an eval, which creates more complications. Of the numbers 1-9, you might think that "9" would be less used than "4". But it's not; many of our scripts use descriptors 8 and 9 (probably under the assumption that they are high and therefore unused). The least-used descriptor is currently "7". We could switch to that, but we're just trading one magic number for another. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 90c8a1d commit 9be795f

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

t/t5615-alternate-env.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ check_obj () {
77
alt=$1; shift
88
while read obj expect
99
do
10-
echo "$obj" >&3 &&
11-
echo "$obj $expect" >&4
12-
done 3>input 4>expect &&
10+
echo "$obj" >&5 &&
11+
echo "$obj $expect" >&6
12+
done 5>input 6>expect &&
1313
GIT_ALTERNATE_OBJECT_DIRECTORIES=$alt \
1414
git "$@" cat-file --batch-check='%(objectname) %(objecttype)' \
1515
<input >actual &&

0 commit comments

Comments
 (0)