test-lib: add in-shell "env" replacement
authorJeff King <peff@peff.net>
Wed, 1 Jun 2016 07:04:26 +0000 (03:04 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 1 Jun 2016 15:04:08 +0000 (08:04 -0700)
commitd2554c7207896136ad2033776efd29578592a3fb
treefaa6f8982fe08b87b0833f135a799c822d29e037
parent4b0891ffe4ec3aef081cf48c5f9a747586076f7a
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>
t/t4014-format-patch.sh
t/test-lib-functions.sh