0002-Rework-option-set-of-vacuumlo.patch
text/x-diff
Filename: 0002-Rework-option-set-of-vacuumlo.patch
Type: text/x-diff
Part: 1
Patch
Format: format-patch
Series: patch 0002
Subject: Rework option set of vacuumlo
| File | + | − |
|---|---|---|
| contrib/vacuumlo/.gitignore | 2 | 0 |
| contrib/vacuumlo/Makefile | 6 | 0 |
| contrib/vacuumlo/t/001_basic.pl | 9 | 0 |
| contrib/vacuumlo/vacuumlo.c | 46 | 36 |
| doc/src/sgml/vacuumlo.sgml | 35 | 4 |
From f7e5840ec52c44cad3f9b9dd0ceccfe14135c628 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 27 Aug 2018 19:01:13 +0900
Subject: [PATCH 2/2] 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
---
contrib/vacuumlo/.gitignore | 2 +
contrib/vacuumlo/Makefile | 6 +++
contrib/vacuumlo/t/001_basic.pl | 9 ++++
contrib/vacuumlo/vacuumlo.c | 82 ++++++++++++++++++---------------
doc/src/sgml/vacuumlo.sgml | 39 ++++++++++++++--
5 files changed, 98 insertions(+), 40 deletions(-)
create mode 100644 contrib/vacuumlo/t/001_basic.pl
diff --git a/contrib/vacuumlo/.gitignore b/contrib/vacuumlo/.gitignore
index 07f6ab4fd7..f3f0ce3d80 100644
--- a/contrib/vacuumlo/.gitignore
+++ b/contrib/vacuumlo/.gitignore
@@ -1 +1,3 @@
/vacuumlo
+
+/tmp_check/
diff --git a/contrib/vacuumlo/Makefile b/contrib/vacuumlo/Makefile
index 71106ff69c..06c5f43f1b 100644
--- a/contrib/vacuumlo/Makefile
+++ b/contrib/vacuumlo/Makefile
@@ -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)
diff --git a/contrib/vacuumlo/t/001_basic.pl b/contrib/vacuumlo/t/001_basic.pl
new file mode 100644
index 0000000000..2bfb6ce17d
--- /dev/null
+++ b/contrib/vacuumlo/t/001_basic.pl
@@ -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');
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 7eb474ca3e..26040115a9 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -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'},
+ {"port", required_argument, NULL, 'p'},
+ {"dry-run", no_argument, NULL, 'n'},
+ {"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,12 @@ 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 +519,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 +532,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);
}
}
diff --git a/doc/src/sgml/vacuumlo.sgml b/doc/src/sgml/vacuumlo.sgml
index 0b4dfc2b17..0b57a77af4 100644
--- a/doc/src/sgml/vacuumlo.sgml
+++ b/doc/src/sgml/vacuumlo.sgml
@@ -55,7 +55,8 @@
<variablelist>
<varlistentry>
- <term><option>-l</option> <replaceable>limit</replaceable></term>
+ <term><option>-l <replaceable class="parameter">limit</replaceable></option></term>
+ <term><option>--limit=<replaceable class="parameter">limit</replaceable></option></term>
<listitem>
<para>
Remove no more than <replaceable>limit</replaceable> large objects per
@@ -69,6 +70,7 @@
<varlistentry>
<term><option>-n</option></term>
+ <term><option>--dry-run</option></term>
<listitem>
<para>Don't remove anything, just show what would be done.</para>
</listitem>
@@ -76,6 +78,7 @@
<varlistentry>
<term><option>-v</option></term>
+ <term><option>--verbose</option></term>
<listitem>
<para>Write a lot of progress messages.</para>
</listitem>
@@ -110,21 +113,24 @@
<variablelist>
<varlistentry>
- <term><option>-h</option> <replaceable>hostname</replaceable></term>
+ <term><option>-h <replaceable class="parameter">host</replaceable></option></term>
+ <term><option>--host=<replaceable class="parameter">host</replaceable></option></term>
<listitem>
<para>Database server's host.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-p</option> <replaceable>port</replaceable></term>
+ <term><option>-p <replaceable>port</replaceable></option></term>
+ <term><option>--port=<replaceable class="parameter">port</replaceable></option></term>
<listitem>
<para>Database server's port.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-U</option> <replaceable>username</replaceable></term>
+ <term><option>-U <replaceable>username</replaceable></option></term>
+ <term><option>--username=<replaceable class="parameter">username</replaceable></option></term>
<listitem>
<para>User name to connect as.</para>
</listitem>
@@ -146,6 +152,7 @@
<varlistentry>
<term><option>-W</option></term>
+ <term><option>--password</option></term>
<listitem>
<para>
Force <application>vacuumlo</application> to prompt for a
@@ -167,6 +174,30 @@
</para>
</refsect1>
+ <refsect1>
+ <title>Environment</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><envar>PGHOST</envar></term>
+ <term><envar>PGPORT</envar></term>
+ <term><envar>PGUSER</envar></term>
+
+ <listitem>
+ <para>
+ Default connection parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ This utility, like most other <productname>PostgreSQL</productname> utilities,
+ also uses the environment variables supported by <application>libpq</application>
+ (see <xref linkend="libpq-envars"/>).
+ </para>
+ </refsect1>
+
<refsect1>
<title>Notes</title>
--
2.18.0