v4-0002-Reduce-noise-in-pg_regress-default-output.patch
application/octet-stream
Filename: v4-0002-Reduce-noise-in-pg_regress-default-output.patch
Type: application/octet-stream
Part: 0
Message:
Re: TAP output format in pg_regress
Patch
Format: format-patch
Series: patch v4-0002
Subject: Reduce noise in pg_regress default output
| File | + | − |
|---|---|---|
| src/test/regress/pg_regress.c | 69 | 37 |
From a208d3f8d7ccd6dd7a012019ab13f41e61cb3ab0 Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <daniel@yesql.se>
Date: Fri, 4 Mar 2022 11:54:00 +0100
Subject: [PATCH v4 2/2] Reduce noise in pg_regress default output
A first stab at adding a --verbose flag to pg_regress to reduce the
amount of noise printed during a test run.
---
src/test/regress/pg_regress.c | 106 ++++++++++++++++++++++------------
1 file changed, 69 insertions(+), 37 deletions(-)
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index dbf646d5ec..82109fed84 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -74,6 +74,7 @@ const char *pretty_diff_opts = "-w -U3";
/* options settable from command line */
_stringlist *dblist = NULL;
bool debug = false;
+bool verbose = false;
char *inputdir = ".";
char *outputdir = ".";
char *bindir = PGBINDIR;
@@ -122,11 +123,17 @@ static int fail_ignore_count = 0;
static bool directory_exists(const char *dir);
static void make_directory(const char *dir);
+typedef enum
+{
+ COMMENT_DIAGNOSTIC,
+ COMMENT_VERBOSE
+} CommentLevel;
+
struct output_func
{
void (*header)(const char *line);
void (*footer)(const char *difffilename, const char *logfilename);
- void (*comment)(bool diagnostic, const char *comment);
+ void (*comment)(CommentLevel level, const char *comment);
void (*test_status_preamble)(const char *testname);
@@ -141,7 +148,7 @@ void (*test_runtime)(const char *testname, double runtime);
/* Text output format */
static void header_text(const char *line);
static void footer_text(const char *difffilename, const char *logfilename);
-static void comment_text(bool diagnostic, const char *comment);
+static void comment_text(CommentLevel level, const char *comment);
static void test_status_preamble_text(const char *testname);
static void test_status_ok_text(const char *testname);
static void test_status_failed_text(const char *testname, bool ignore, char *tags);
@@ -160,7 +167,7 @@ struct output_func output_func_text =
/* TAP output format */
static void footer_tap(const char *difffilename, const char *logfilename);
-static void comment_tap(bool diagnostic, const char *comment);
+static void comment_tap(CommentLevel level, const char *comment);
static void test_status_ok_tap(const char *testname);
static void test_status_failed_tap(const char *testname, bool ignore, char *tags);
@@ -270,6 +277,9 @@ split_to_stringlist(const char *s, const char *delim, _stringlist **listhead)
static void
header_text(const char *line)
{
+ if (!verbose)
+ return;
+
fprintf(stdout, "============== %-38s ==============\n", line);
fflush(stdout);
}
@@ -305,22 +315,25 @@ footer(const char *difffilename, const char *logfilename)
}
static void
-comment_text(bool diagnostic, const char *comment)
+comment_text(CommentLevel level, const char *comment)
{
+ if (level == COMMENT_VERBOSE && !verbose)
+ return;
+
status("%s", comment);
}
static void
-comment_tap(bool diagnostic, const char *comment)
+comment_tap(CommentLevel level, const char *comment)
{
- if (!diagnostic)
+ if (level != COMMENT_DIAGNOSTIC)
return;
status("# %s", comment);
}
static void
-comment(bool diagnostic, const char *fmt,...)
+comment(CommentLevel level, const char *fmt,...)
{
char tmp[256];
va_list ap;
@@ -332,7 +345,7 @@ comment(bool diagnostic, const char *fmt,...)
vsnprintf(tmp, sizeof(tmp), fmt, ap);
va_end(ap);
- output->comment(diagnostic, tmp);
+ output->comment(level, tmp);
}
static void
@@ -380,7 +393,7 @@ test_status_failed_tap(const char *testname, bool ignore, char *tags)
status("ok %i - %s ",
(fail_count + fail_ignore_count + success_count),
testname);
- comment(true, "SKIP (ignored)");
+ comment(COMMENT_DIAGNOSTIC, "SKIP (ignored)");
}
else
status("not ok %i - %s",
@@ -390,7 +403,7 @@ test_status_failed_tap(const char *testname, bool ignore, char *tags)
if (tags && strlen(tags) > 0)
{
fprintf(stdout, "\n");
- comment(true, tags);
+ comment(COMMENT_DIAGNOSTIC, tags);
}
}
@@ -440,42 +453,52 @@ footer_text(const char *difffilename, const char *logfilename)
*/
if (fail_count == 0 && fail_ignore_count == 0)
snprintf(buf, sizeof(buf),
- _(" All %d tests passed. "),
+ _("All %d tests passed. "),
success_count);
else if (fail_count == 0) /* fail_count=0, fail_ignore_count>0 */
snprintf(buf, sizeof(buf),
- _(" %d of %d tests passed, %d failed test(s) ignored. "),
+ _("%d of %d tests passed, %d failed test(s) ignored. "),
success_count,
success_count + fail_ignore_count,
fail_ignore_count);
else if (fail_ignore_count == 0) /* fail_count>0 && fail_ignore_count=0 */
snprintf(buf, sizeof(buf),
- _(" %d of %d tests failed. "),
+ _("%d of %d tests failed. "),
fail_count,
success_count + fail_count);
else
/* fail_count>0 && fail_ignore_count>0 */
snprintf(buf, sizeof(buf),
- _(" %d of %d tests failed, %d of these failures ignored. "),
+ _("%d of %d tests failed, %d of these failures ignored. "),
fail_count + fail_ignore_count,
success_count + fail_count + fail_ignore_count,
fail_ignore_count);
- putchar('\n');
- for (int i = strlen(buf); i > 0; i--)
- putchar('=');
- printf("\n%s\n", buf);
- for (int i = strlen(buf); i > 0; i--)
- putchar('=');
- putchar('\n');
- putchar('\n');
+ if (verbose)
+ {
+ putchar('\n');
+ for (int i = strlen(buf); i > 0; i--)
+ putchar('=');
+ printf("\n %s\n", buf);
+ for (int i = strlen(buf); i > 0; i--)
+ putchar('=');
+ putchar('\n');
+ putchar('\n');
- if (difffilename && logfilename)
+ if (difffilename && logfilename)
+ {
+ printf(_("The differences that caused some tests to fail can be viewed in the\n"
+ "file \"%s\". A copy of the test summary that you see\n"
+ "above is saved in the file \"%s\".\n\n"),
+ difffilename, logfilename);
+ }
+ }
+ else
{
- printf(_("The differences that caused some tests to fail can be viewed in the\n"
- "file \"%s\". A copy of the test summary that you see\n"
- "above is saved in the file \"%s\".\n\n"),
- difffilename, logfilename);
+ printf("\n%s\n", buf);
+ if (difffilename && logfilename)
+ printf(_("Failing diffs: \"%s\"\nTest summary: \"%s\"\n"),
+ difffilename, logfilename);
}
}
@@ -1015,13 +1038,13 @@ initialize_environment(void)
}
if (pghost && pgport)
- comment(false, _("(using postmaster on %s, port %s)\n"), pghost, pgport);
+ comment(COMMENT_VERBOSE, _("(using postmaster on %s, port %s)\n"), pghost, pgport);
if (pghost && !pgport)
- comment(false, _("(using postmaster on %s, default port)\n"), pghost);
+ comment(COMMENT_VERBOSE, _("(using postmaster on %s, default port)\n"), pghost);
if (!pghost && pgport)
- comment(false, _("(using postmaster on Unix socket, port %s)\n"), pgport);
+ comment(COMMENT_VERBOSE, _("(using postmaster on Unix socket, port %s)\n"), pgport);
if (!pghost && !pgport)
- comment(false, _("(using postmaster on Unix socket, default port)\n"));
+ comment(COMMENT_VERBOSE, _("(using postmaster on Unix socket, default port)\n"));
}
load_resultmap();
@@ -1753,7 +1776,7 @@ wait_for_tests(PID_TYPE * pids, int *statuses, instr_time *stoptimes,
statuses[i] = (int) exit_status;
INSTR_TIME_SET_CURRENT(stoptimes[i]);
if (names)
- comment(false, " %s", names[i]);
+ comment(COMMENT_VERBOSE, " %s", names[i]);
tests_left--;
break;
}
@@ -1926,7 +1949,7 @@ run_schedule(const char *schedule, test_start_function startfunc,
{
int oldest = 0;
- comment(false, _("parallel group (%d tests, in groups of %d): "),
+ comment(COMMENT_VERBOSE, _("parallel group (%d tests, in groups of %d): "),
num_tests, max_connections);
for (i = 0; i < num_tests; i++)
{
@@ -1947,7 +1970,7 @@ run_schedule(const char *schedule, test_start_function startfunc,
}
else
{
- comment(false, _("parallel group (%d tests): "), num_tests);
+ comment(COMMENT_VERBOSE, _("parallel group (%d tests): "), num_tests);
for (i = 0; i < num_tests; i++)
{
pids[i] = (startfunc) (tests[i], &resultfiles[i], &expectfiles[i], &tags[i]);
@@ -2255,6 +2278,7 @@ help(void)
printf(_(" (can be used multiple times to concatenate)\n"));
printf(_(" --temp-instance=DIR create a temporary instance in DIR\n"));
printf(_(" --use-existing use an existing installation\n"));
+ printf(_(" -v, --verbose verbose output, only applies to regress output format\n"));
printf(_(" -V, --version output version information, then exit\n"));
printf(_("\n"));
printf(_("Options for \"temp-instance\" mode:\n"));
@@ -2283,6 +2307,7 @@ regression_main(int argc, char *argv[],
static struct option long_options[] = {
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'V'},
+ {"verbose", no_argument, NULL, 'v'},
{"dbname", required_argument, NULL, 1},
{"debug", no_argument, NULL, 2},
{"inputdir", required_argument, NULL, 3},
@@ -2350,7 +2375,7 @@ regression_main(int argc, char *argv[],
if (getenv("PG_REGRESS_DIFF_OPTS"))
pretty_diff_opts = getenv("PG_REGRESS_DIFF_OPTS");
- while ((c = getopt_long(argc, argv, "hV", long_options, &option_index)) != -1)
+ while ((c = getopt_long(argc, argv, "hVv", long_options, &option_index)) != -1)
{
switch (c)
{
@@ -2360,6 +2385,9 @@ regression_main(int argc, char *argv[],
case 'V':
puts("pg_regress (PostgreSQL) " PG_VERSION);
exit(0);
+ case 'v':
+ verbose = true;
+ break;
case 1:
/*
@@ -2463,6 +2491,9 @@ regression_main(int argc, char *argv[],
exit(0);
}
+ if (!verbose)
+ psql_formatting = pg_strdup("-q");
+
/*
* text (regress) is the default so we don't need to set any variables in
* that case.
@@ -2472,7 +2503,8 @@ regression_main(int argc, char *argv[],
if (strcmp(format, "tap") == 0)
{
output = &output_func_tap;
- psql_formatting = pg_strdup("-q");
+ if (!psql_formatting)
+ psql_formatting = pg_strdup("-q");
}
else if (strcmp(format, "regress") != 0)
{
@@ -2735,7 +2767,7 @@ regression_main(int argc, char *argv[],
#else
#define ULONGPID(x) (unsigned long) (x)
#endif
- comment(false, _("running on port %d with PID %lu\n"),
+ comment(COMMENT_VERBOSE, _("running on port %d with PID %lu\n"),
port, ULONGPID(postmaster_pid));
}
else
--
2.24.3 (Apple Git-128)