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>

Kevin Lyles committed Sep 3, 2024 at 22:06 UTC 68c57590d36a47eee57d9d2e73de213f74c044c9
1 file changed +9 -5
t/t1092-sparse-checkout-compatibility.sh
+9 -5
@@ -179,22 +179,26 @@ init_repos_as_submodules () {
179 }
180
181 run_on_sparse () {
182 + cat >run-on-sparse-input &&
183 +
184 (
185 cd sparse-checkout &&
186 GIT_PROGRESS_DELAY=100000 "$@" >../sparse-checkout-out 2>../sparse-checkout-err
185 - ) &&
187 + ) <run-on-sparse-input &&
188 (
189 cd sparse-index &&
190 GIT_PROGRESS_DELAY=100000 "$@" >../sparse-index-out 2>../sparse-index-err
189 - )
191 + ) <run-on-sparse-input
192 }
193
194 run_on_all () {
195 + cat >run-on-all-input &&
196 +
197 (
198 cd full-checkout &&
199 GIT_PROGRESS_DELAY=100000 "$@" >../full-checkout-out 2>../full-checkout-err
196 - ) &&
197 - run_on_sparse "$@"
200 + ) <run-on-all-input &&
201 + run_on_sparse "$@" <run-on-all-input
202 }
203
204 test_all_match () {
@@ -221,7 +225,7 @@ test_sparse_unstaged () {
225 done
226 }
227
224 -# Usage: test_sprase_checkout_set "<c1> ... <cN>" "<s1> ... <sM>"
228 +# Usage: test_sparse_checkout_set "<c1> ... <cN>" "<s1> ... <sM>"
229 # Verifies that "git sparse-checkout set <c1> ... <cN>" succeeds and
230 # leaves the sparse index in a state where <s1> ... <sM> are sparse
231 # directories (and <c1> ... <cN> are not).