1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Rework option set of vacuumlo

Like oid2name, vacuumlo has been lacking consistency with other
utilities for its options:
- Connection options gain long aliases.
- Document environment variables which could be used: PGHOST, PGPORT and
PGUSER.

Documentation and code is reordered to be more consistent. A basic set
of TAP tests has been added while on it.

Author: Tatsuro Yamada
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/c7e7f25c-1747-cd0f-9335-390bc97b2db5@lab.ntt.co.jp
This commit is contained in:
Michael Paquier
2018-08-28 21:42:45 +09:00
parent 1aaf532dea
commit bfea331a5e
5 changed files with 98 additions and 37 deletions

View File

@ -1 +1,3 @@
/vacuumlo
/tmp_check/

View File

@ -19,3 +19,9 @@ top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif
check:
$(prove_check)
installcheck:
$(prove_installcheck)

View File

@ -0,0 +1,9 @@
use strict;
use warnings;
use TestLib;
use Test::More tests => 8;
program_help_ok('vacuumlo');
program_version_ok('vacuumlo');
program_options_handling_ok('vacuumlo');

View File

@ -26,6 +26,7 @@
#include "fe_utils/connect.h"
#include "libpq-fe.h"
#include "pg_getopt.h"
#include "getopt_long.h"
#define BUFSIZE 1024
@ -434,17 +435,17 @@ usage(const char *progname)
printf("%s removes unreferenced large objects from databases.\n\n", progname);
printf("Usage:\n %s [OPTION]... DBNAME...\n\n", progname);
printf("Options:\n");
printf(" -l LIMIT commit after removing each LIMIT large objects\n");
printf(" -n don't remove large objects, just show what would be done\n");
printf(" -v write a lot of progress messages\n");
printf(" -V, --version output version information, then exit\n");
printf(" -?, --help show this help, then exit\n");
printf(" -l, --limit=LIMIT commit after removing each LIMIT large objects\n");
printf(" -n, --dry-run don't remove large objects, just show what would be done\n");
printf(" -v, --verbose write a lot of progress messages\n");
printf(" -V, --version output version information, then exit\n");
printf(" -?, --help show this help, then exit\n");
printf("\nConnection options:\n");
printf(" -h HOSTNAME database server host or socket directory\n");
printf(" -p PORT database server port\n");
printf(" -U USERNAME user name to connect as\n");
printf(" -w never prompt for password\n");
printf(" -W force password prompt\n");
printf(" -h, --host=HOSTNAME database server host or socket directory\n");
printf(" -p, --port=PORT database server port\n");
printf(" -U, --username=USERNAME user name to connect as\n");
printf(" -w, --no-password never prompt for password\n");
printf(" -W, --password force password prompt\n");
printf("\n");
printf("Report bugs to <pgsql-bugs@postgresql.org>.\n");
}
@ -453,11 +454,26 @@ usage(const char *progname)
int
main(int argc, char **argv)
{
static struct option long_options[] = {
{"host", required_argument, NULL, 'h'},
{"limit", required_argument, NULL, 'l'},
{"dry-run", no_argument, NULL, 'n'},
{"port", required_argument, NULL, 'p'},
{"username", required_argument, NULL, 'U'},
{"verbose", no_argument, NULL, 'v'},
{"version", no_argument, NULL, 'V'},
{"no-password", no_argument, NULL, 'w'},
{"password", no_argument, NULL, 'W'},
{"help", no_argument, NULL, '?'},
{NULL, 0, NULL, 0}
};
int rc = 0;
struct _param param;
int c;
int port;
const char *progname;
int optindex;
progname = get_progname(argv[0]);
@ -486,25 +502,15 @@ main(int argc, char **argv)
}
}
while (1)
while ((c = getopt_long(argc, argv, "h:l:np:U:vwW", long_options, &optindex)) != -1)
{
c = getopt(argc, argv, "h:l:U:p:vnwW");
if (c == -1)
break;
switch (c)
{
case '?':
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
case ':':
exit(1);
case 'v':
param.verbose = 1;
break;
case 'n':
param.dry_run = 1;
param.verbose = 1;
case 'h':
param.pg_host = pg_strdup(optarg);
break;
case 'l':
param.transaction_limit = strtol(optarg, NULL, 10);
@ -516,14 +522,9 @@ main(int argc, char **argv)
exit(1);
}
break;
case 'U':
param.pg_user = pg_strdup(optarg);
break;
case 'w':
param.pg_prompt = TRI_NO;
break;
case 'W':
param.pg_prompt = TRI_YES;
case 'n':
param.dry_run = 1;
param.verbose = 1;
break;
case 'p':
port = strtol(optarg, NULL, 10);
@ -534,9 +535,21 @@ main(int argc, char **argv)
}
param.pg_port = pg_strdup(optarg);
break;
case 'h':
param.pg_host = pg_strdup(optarg);
case 'U':
param.pg_user = pg_strdup(optarg);
break;
case 'v':
param.verbose = 1;
break;
case 'w':
param.pg_prompt = TRI_NO;
break;
case 'W':
param.pg_prompt = TRI_YES;
break;
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
}
}