diff options
author | Jeff King <peff@peff.net> | 2016-06-01 03:04:26 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-06-01 08:04:08 -0700 |
commit | d2554c7207896136ad2033776efd29578592a3fb (patch) | |
tree | faa6f8982fe08b87b0833f135a799c822d29e037 /t/test-lib-functions.sh | |
parent | 4b0891ffe4ec3aef081cf48c5f9a747586076f7a (diff) | |
download | git-d2554c7207896136ad2033776efd29578592a3fb.tar.gz git-d2554c7207896136ad2033776efd29578592a3fb.tar.xz |
test-lib: add in-shell "env" replacement
The one-shot environment variable syntax:
FOO=BAR some-program
is unportable when some-program is actually a shell
function, like test_must_fail (on some shells FOO remains
set after the function returns, and on others it does not).
We sometimes get around this by using env, like:
test_must_fail env FOO=BAR some-program
But that only works because test_must_fail's arguments are
themselves a command which can be run. You can't run:
env FOO=BAR test_must_fail some-program
because env does not know about our shell functions. So
there is no equivalent for test_commit, for example, and one
must resort to:
(
FOO=BAR
export FOO
test_commit
)
which is a bit verbose. Let's add a version of "env" that
works _inside_ the shell, by creating a subshell, exporting
variables from its argument list, and running the command.
Its use is demonstrated on a currently-unportable case in
t4014.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/test-lib-functions.sh')
-rw-r--r-- | t/test-lib-functions.sh | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 3978fc0b4..48884d520 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -939,3 +939,25 @@ mingw_read_file_strip_cr_ () { eval "$1=\$$1\$line" done } + +# Like "env FOO=BAR some-program", but run inside a subshell, which means +# it also works for shell functions (though those functions cannot impact +# the environment outside of the test_env invocation). +test_env () { + ( + while test $# -gt 0 + do + case "$1" in + *=*) + eval "${1%%=*}=\${1#*=}" + eval "export ${1%%=*}" + shift + ;; + *) + "$@" + exit + ;; + esac + done + ) +} |