t3701: stop using `env` in force_color()

In a future patch, we plan on making the test_must_fail()-family of
functions accept only git commands. Even though force_color() wraps an
invocation of `env git`, test_must_fail() will not be able to figure
this out since it will assume that force_color() is just some random
function which is disallowed.

Instead of using `env` in force_color() (which does not support shell
functions), export the environment variables in a subshell. Write the
invocation as `force_color test_must_fail git ...` since shell functions
are now supported.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Denton Liu 2020-07-07 02:04:34 -04:00 коммит произвёл Junio C Hamano
Родитель 4a0fcf9f76
Коммит 4d9e7c153d
1 изменённых файлов: 11 добавлений и 2 удалений

Просмотреть файл

@ -31,7 +31,16 @@ diff_cmp () {
# indicates a dumb terminal, so we set that variable, too.
force_color () {
env GIT_PAGER_IN_USE=true TERM=vt100 "$@"
# The first element of $@ may be a shell function, as a result POSIX
# does not guarantee that "one-shot assignment" will not persist after
# the function call. Thus, we prevent these variables from escaping
# this function's context with this subshell.
(
GIT_PAGER_IN_USE=true &&
TERM=vt100 &&
export GIT_PAGER_IN_USE TERM &&
"$@"
)
}
test_expect_success 'setup (initial)' '
@ -604,7 +613,7 @@ test_expect_success 'detect bogus diffFilter output' '
echo content >test &&
test_config interactive.diffFilter "sed 1d" &&
printf y >y &&
test_must_fail force_color git add -p <y
force_color test_must_fail git add -p <y
'
test_expect_success 'diff.algorithm is passed to `git diff-files`' '