• J
    test-lib: some shells do not let $? propagate into an eval · b6b0afdc
    Jonathan Nieder 提交于
    In 3bf78867 (test-lib: Let tests specify commands to be run at end of
    test, 2010-05-02), the git test harness learned to run cleanup
    commands unconditionally at the end of a test.  During each test,
    the intended cleanup actions are collected in the test_cleanup variable
    and evaluated.  That variable looks something like this:
    
    	eval_ret=$?; clean_something && (exit "$eval_ret")
    	eval_ret=$?; clean_something_else && (exit "$eval_ret")
    	eval_ret=$?; final_cleanup && (exit "$eval_ret")
    	eval_ret=$?
    
    All cleanup actions are run unconditionally but if one of them fails
    it is properly reported through $eval_ret.
    
    On FreeBSD, unfortunately, $? is set at the beginning of an ‘eval’
    to 0 instead of the exit status of the previous command.  This results
    in tests using test_expect_code appearing to fail and all others
    appearing to pass, unless their cleanup fails.  Avoid the problem by
    setting eval_ret before the ‘eval’ begins.
    
    Thanks to Jeff King for the explanation.
    
    Cc: Jeff King <peff@peff.net>
    Cc: Johannes Sixt <j6t@kdbg.org>
    Acked-by: NJeff King <peff@peff.net>
    Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    b6b0afdc
test-lib.sh 19.1 KB