repmgr: improve handling of command line parameter errors

Previously providing a parameter which requires a value (e.g. -f/--config-file)
would result in a misleading error like "Unknown option -f".

Rather than suppress getopt's error messages, we'll rely on these to inform
about missing required values or unknown options (as other PostgreSQL tools
do), though we will still provide our own list of command line errors and
warnings countered above and beyond getopt's sanity checks.
This commit is contained in:
Ian Barwick
2016-12-05 14:34:33 +09:00
parent 7cc0400c03
commit eb2cdf8a98
2 changed files with 12 additions and 25 deletions

View File

@@ -1,5 +1,8 @@
3.2.2 2016-
3.2.2 2016-12-
repmgr: always log to STDERR even if log facility defined (Ian)
repmgr: add --log-to-file to log repmgr output to the defined
log facility (Ian)
repmgr: improve handling of command line parameter errors (Ian)
3.2.1 2016-10-24
repmgr: require a valid repmgr cluster name unless -F/--force

View File

@@ -333,9 +333,6 @@ main(int argc, char **argv)
strncpy(runtime_options.dbname, runtime_options.username, MAXLEN);
}
/* Prevent getopt_long() from printing an error message */
opterr = 0;
while ((c = getopt_long(argc, argv, "?Vd:h:p:U:S:D:f:R:w:k:FWIvb:rcL:tm:C:l:", long_options,
&optindex)) != -1)
{
@@ -347,17 +344,6 @@ main(int argc, char **argv)
*/
switch (c)
{
case '?':
/* Actual help option given */
if (strcmp(argv[optind - 1], "-?") == 0)
{
do_help();
exit(SUCCESS);
}
/* unknown option reported by getopt */
else
goto unknown_option;
break;
case OPT_HELP:
do_help();
exit(SUCCESS);
@@ -567,16 +553,14 @@ main(int argc, char **argv)
case OPT_IGNORE_EXTERNAL_CONFIG_FILES:
item_list_append(&cli_warnings, _("--ignore-external-config-files is deprecated and has no effect; use --copy-external-config-file instead"));
break;
default:
unknown_option:
{
PQExpBufferData unknown_option;
initPQExpBuffer(&unknown_option);
appendPQExpBuffer(&unknown_option, _("Unknown option '%s'"), argv[optind - 1]);
item_list_append(&cli_errors, unknown_option.data);
}
case '?':
/* Actual help option given */
if (strcmp(argv[optind - 1], "-?") == 0)
{
do_help();
exit(SUCCESS);
}
break;
}
}