Quoting Jeff King <p...@peff.net>:

The confirmation tests in t9001 all save the value of
sendemail.confirm, do something to it, then restore it at
the end, in a way that breaks the &&-chain (they are not
wrong, because they save the $? value, but it fools
--chain-lint).

Instead, they can all use test_when_finished, and we can
even make the code simpler by factoring out the shared
lines.

I think that saving the value of 'sendemail.confirm' is not necessary.

There are two blocks of confirmation tests, this patch concerns only tests
of the second block.  The first block of confirmation tests is nearly at
the beginning of the file in order to check the "no confirm" cases early.
If any of those fails the remainig tests in the file are skipped because
they might hang.  The last of those tests sets 'sendemail.confirm' to
'never' and leaves it so to avoid unintentional prompting in the remaining
tests and then its value is not modified until that second block of
confirm tests are reached.  This means that when those tests save the
value of 'sendemail.confirm' they always save 'never'.  Then why save it,
just use test_when_finished to restore it to 'never' and all is well.


Note that we can _almost_ use test_config here, except that:

 1. We do not restore the config with test_unconfig, but by
    setting it back to some prior value.

 2. We are not always setting a config variable. Sometimes
    the change to be undone is unsetting it entirely.

We could teach test_config to handle these cases, but it's
not worth the complexity for a single call-site.

Signed-off-by: Jeff King <p...@peff.net>
---
t/t9001-send-email.sh | 30 ++++++++++--------------------
1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 37caa18..c9f54d5 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -817,26 +817,25 @@ test_expect_success $PREREQ '--confirm=compose' '
        test_confirm --confirm=compose --compose
'

-test_expect_success $PREREQ 'confirm by default (due to cc)' '
+save_confirm () {
        CONFIRM=$(git config --get sendemail.confirm) &&
+       test_when_finished "git config sendemail.confirm ${CONFIRM:-never}"
+}
+
+test_expect_success $PREREQ 'confirm by default (due to cc)' '
+       save_confirm &&
        git config --unset sendemail.confirm &&
        test_confirm
-       ret="$?"
-       git config sendemail.confirm ${CONFIRM:-never}
-       test $ret = "0"
'

test_expect_success $PREREQ 'confirm by default (due to --compose)' '
-       CONFIRM=$(git config --get sendemail.confirm) &&
+       save_confirm &&
        git config --unset sendemail.confirm &&
        test_confirm --suppress-cc=all --compose
-       ret="$?"
-       git config sendemail.confirm ${CONFIRM:-never}
-       test $ret = "0"
'

test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' '
-       CONFIRM=$(git config --get sendemail.confirm) &&
+       save_confirm &&
        git config --unset sendemail.confirm &&
        rm -fr outdir &&
        git format-patch -2 -o outdir &&
@@ -846,13 +845,10 @@ test_expect_success $PREREQ 'confirm detects EOF
(inform assumes y)' '
                        --to=nob...@example.com \
                        --smtp-server="$(pwd)/fake.sendmail" \
                        outdir/*.patch </dev/null
-       ret="$?"
-       git config sendemail.confirm ${CONFIRM:-never}
-       test $ret = "0"
'

test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' '
-       CONFIRM=$(git config --get sendemail.confirm) &&
+       save_confirm &&
        git config sendemail.confirm auto &&
        GIT_SEND_EMAIL_NOTTY=1 &&
        export GIT_SEND_EMAIL_NOTTY &&
@@ -861,13 +857,10 @@ test_expect_success $PREREQ 'confirm detects EOF
(auto causes failure)' '
                        --to=nob...@example.com \
                        --smtp-server="$(pwd)/fake.sendmail" \
                        $patches </dev/null
-       ret="$?"
-       git config sendemail.confirm ${CONFIRM:-never}
-       test $ret = "0"
'

test_expect_success $PREREQ 'confirm does not loop forever' '
-       CONFIRM=$(git config --get sendemail.confirm) &&
+       save_confirm &&
        git config sendemail.confirm auto &&
        GIT_SEND_EMAIL_NOTTY=1 &&
        export GIT_SEND_EMAIL_NOTTY &&
@@ -876,9 +869,6 @@ test_expect_success $PREREQ 'confirm does not loop
forever' '
                        --to=nob...@example.com \
                        --smtp-server="$(pwd)/fake.sendmail" \
                        $patches
-       ret="$?"
-       git config sendemail.confirm ${CONFIRM:-never}
-       test $ret = "0"
'

test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' '
--
2.3.3.520.g3cfbb5d

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to