Merge branch 'jt/trace2-BUG'

Even though invocations of "die()" were logged to the trace2
system, "BUG()"s were not, which has been corrected.

* jt/trace2-BUG:
  usage: trace2 BUG() invocations
This commit is contained in:
Junio C Hamano 2021-02-17 17:21:41 -08:00
commit aa2d3dbdf5
3 changed files with 39 additions and 0 deletions

View File

@ -198,6 +198,14 @@ static int ut_006data(int argc, const char **argv)
return 0;
}
static int ut_007bug(int argc, const char **argv)
{
/*
* Exercise BUG() to ensure that the message is printed to trace2.
*/
BUG("the bug message");
}
/*
* Usage:
* test-tool trace2 <ut_name_1> <ut_usage_1>
@ -214,6 +222,7 @@ static struct unit_test ut_table[] = {
{ ut_004child, "004child", "[<child_command_line>]" },
{ ut_005exec, "005exec", "<git_command_args>" },
{ ut_006data, "006data", "[<category> <key> <value>]+" },
{ ut_007bug, "007bug", "" },
};
/* clang-format on */

View File

@ -147,6 +147,25 @@ test_expect_success 'normal stream, error event' '
test_cmp expect actual
'
# Verb 007bug
#
# Check that BUG writes to trace2
test_expect_success 'BUG messages are written to trace2' '
test_when_finished "rm trace.normal actual expect" &&
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 007bug &&
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
cat >expect <<-EOF &&
version $V
start _EXE_ trace2 007bug
cmd_name trace2 (trace2)
error the bug message
exit elapsed:_TIME_ code:99
atexit elapsed:_TIME_ code:99
EOF
test_cmp expect actual
'
sane_unset GIT_TRACE2_BRIEF
# Now test without environment variables and get all Trace2 settings

11
usage.c
View File

@ -266,6 +266,10 @@ int BUG_exit_code;
static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_list params)
{
char prefix[256];
va_list params_copy;
static int in_bug;
va_copy(params_copy, params);
/* truncation via snprintf is OK here */
if (file)
@ -274,6 +278,13 @@ static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_lis
snprintf(prefix, sizeof(prefix), "BUG: ");
vreportf(prefix, fmt, params);
if (in_bug)
abort();
in_bug = 1;
trace2_cmd_error_va(fmt, params_copy);
if (BUG_exit_code)
exit(BUG_exit_code);
abort();