t1092: allow run_on_* functions to use standard input

The 'run_on_sparse' and 'run_on_all' functions do not work correctly for
commands accepting standard input, because they run the same command
multiple times and the first instance consumes it. This also indirectly
affects 'test_all_match' and 'test_sparse_match'.

To allow these functions to work with commands accepting standard input,
first slurp standard input to a temporary file, and then run the command
with its standard input redirected from the temporary file. This ensures
that each command sees the same contents from its standard input.

Note that this does not impact commands that do not read from standard
input; they continue to ignore it. Additionally, existing uses of the
run_on_* functions do not need to do anything differently, as the
standard input of the test environment is already connected to
/dev/null.

We do not explicitly clean up the input files because they are cleaned
up with the rest of the test repositories and their contents may be
useful for figuring out which command failed when a test case fails.

Signed-off-by: Kevin Lyles <klyles@epic.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Kevin Lyles 2024-09-03 22:06:46 +00:00 committed by Junio C Hamano
parent 2e7b89e038
commit 68c57590d3
1 changed files with 9 additions and 5 deletions

View File

@ -179,22 +179,26 @@ init_repos_as_submodules () {
}

run_on_sparse () {
cat >run-on-sparse-input &&

(
cd sparse-checkout &&
GIT_PROGRESS_DELAY=100000 "$@" >../sparse-checkout-out 2>../sparse-checkout-err
) &&
) <run-on-sparse-input &&
(
cd sparse-index &&
GIT_PROGRESS_DELAY=100000 "$@" >../sparse-index-out 2>../sparse-index-err
)
) <run-on-sparse-input
}

run_on_all () {
cat >run-on-all-input &&

(
cd full-checkout &&
GIT_PROGRESS_DELAY=100000 "$@" >../full-checkout-out 2>../full-checkout-err
) &&
run_on_sparse "$@"
) <run-on-all-input &&
run_on_sparse "$@" <run-on-all-input
}

test_all_match () {
@ -221,7 +225,7 @@ test_sparse_unstaged () {
done
}

# Usage: test_sprase_checkout_set "<c1> ... <cN>" "<s1> ... <sM>"
# Usage: test_sparse_checkout_set "<c1> ... <cN>" "<s1> ... <sM>"
# Verifies that "git sparse-checkout set <c1> ... <cN>" succeeds and
# leaves the sparse index in a state where <s1> ... <sM> are sparse
# directories (and <c1> ... <cN> are not).