Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
pg_upgrade: Improve invalid option handling
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 19 Jun 2019 19:43:31 +0000 (21:43 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 19 Jun 2019 19:50:24 +0000 (21:50 +0200)
Currently, calling pg_upgrade with an invalid command-line option
aborts pg_upgrade but leaves a pg_upgrade_internal.log file lying
around.  Reorder things a bit so that that file is not created until
all the options have been parsed.

Discussion: https://www.postgresql.org/message-id/24c8bd05-aed1-6301-919d-8acbabdb8c24@2ndquadrant.com

src/bin/pg_upgrade/option.c

index 171aaa8f13d48386350c65e6bbebecf6f862b195..873d1d07e4881b3be4b537b9583d289582eb389b 100644 (file)
@@ -101,9 +101,6 @@ parseCommandLine(int argc, char *argv[])
    if (os_user_effective_id == 0)
        pg_fatal("%s: cannot be run as root\n", os_info.progname);
 
-   if ((log_opts.internal = fopen_priv(INTERNAL_LOG_FILE, "a")) == NULL)
-       pg_fatal("could not write to log file \"%s\"\n", INTERNAL_LOG_FILE);
-
    while ((option = getopt_long(argc, argv, "d:D:b:B:cj:ko:O:p:P:rs:U:v",
                                 long_options, &optindex)) != -1)
    {
@@ -205,7 +202,6 @@ parseCommandLine(int argc, char *argv[])
                break;
 
            case 'v':
-               pg_log(PG_REPORT, "Running in verbose mode\n");
                log_opts.verbose = true;
                break;
 
@@ -214,12 +210,18 @@ parseCommandLine(int argc, char *argv[])
                break;
 
            default:
-               pg_fatal("Try \"%s --help\" for more information.\n",
-                        os_info.progname);
-               break;
+               fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+                       os_info.progname);
+               exit(1);
        }
    }
 
+   if ((log_opts.internal = fopen_priv(INTERNAL_LOG_FILE, "a")) == NULL)
+       pg_fatal("could not write to log file \"%s\"\n", INTERNAL_LOG_FILE);
+
+   if (log_opts.verbose)
+       pg_log(PG_REPORT, "Running in verbose mode\n");
+
    /* label start of upgrade in logfiles */
    for (filename = output_files; *filename != NULL; filename++)
    {