On Mon, Sep 3, 2018 at 5:10 PM Johannes Schindelin via GitGitGadget
<[email protected]> wrote:
> So let's do something different in VSTS: let's run all the tests with
> `--quiet` first, and only if a failure is encountered, try to trace the
> commands as they are executed. [...]
>
> Signed-off-by: Johannes Schindelin <[email protected]>
> ---
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> @@ -445,10 +452,37 @@ test_ok_ () {
> test_failure_ () {
> if test -n "$write_junit_xml"
> then
> + if test -z "$GIT_TEST_TEE_OUTPUT_FILE"
> + then
> + case "$(type kill_p4d 2>/dev/null | head -n 1)" in
> + *function*) kill_p4d;;
> + esac
> +
> + case "$(type stop_git_daemon 2>/dev/null |
> + head -n 1)" in
> + *function*) stop_git_daemon;;
> + esac
In the long run, it might make more sense, and be more scalable, to
have those scripts define a "prepare_for_rerun" variable or function
which this code then runs generically rather than having special
knowledge of those facilities.
I could imagine, for instance, test-lib.sh defining a no-op:
test_failure_prepare_rerun () {}
and then each of those scripts overriding the function:
# in lib-git-p4.sh
test_failure_prepare_rerun () {
kill_p4d
}
# in lib-git-daemon.sh
test_failure_prepare_rerun () {
stop_git_daemon
}
> + # re-run with --verbose-log
> + echo "# Re-running: $junit_rerun_options_sq" >&2
> +
> + cd "$TEST_DIRECTORY" &&
> + eval "${TEST_SHELL_PATH}" "$junit_rerun_options_sq" \
> + >/dev/null 2>&1
> + status=$?
> +
> + say_color "" "$(test 0 = $status ||
> + echo "not ")ok $test_count - (re-ran with
> trace)"
> + say "1..$test_count"
> + GIT_EXIT_OK=t
> + exit $status
> + fi
> +
> junit_insert="<failure message=\"not ok $test_count -"
> junit_insert="$junit_insert $(xml_attr_encode "$1")\">"
> junit_insert="$junit_insert $(xml_attr_encode \
> - "$(printf '%s\n' "$@" | sed 1d)")"
> + "$(cat "$GIT_TEST_TEE_OUTPUT_FILE")")"
> + >"$GIT_TEST_TEE_OUTPUT_FILE"
> junit_insert="$junit_insert</failure>"
> write_junit_xml_testcase "$1" " $junit_insert"
> fi
This junit-related stuff is getting pretty lengthy. I wonder if it
would make sense to pull it out to its own function at some point
(again, in the long run).