]> granicus.if.org Git - postgresql/commitdiff
Make the pg_upgrade log files contain actual commands
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 29 Jun 2012 03:27:00 +0000 (23:27 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 29 Jun 2012 15:39:11 +0000 (11:39 -0400)
Now the log file not only contains the output from commands executed by
system(), but also what command it was in the first place.  This
arrangement makes debugging a lot simpler.

contrib/pg_upgrade/exec.c

index 9e63bd5856839b1c6f099cdb0b5e53ea34ec19d4..0d6fb8d792d809296f3aa4c893c271df2027eefa 100644 (file)
@@ -29,7 +29,8 @@ static int    win32_check_directory_write_permissions(void);
  *
  *     Formats a command from the given argument list and executes that
  *     command.  If the command executes, exec_prog() returns 1 otherwise
- *     exec_prog() logs an error message and returns 0.
+ *     exec_prog() logs an error message and returns 0.  Either way, the command
+ *     line to be executed is saved to the specified log file.
  *
  *     If throw_error is TRUE, this function will throw a PG_FATAL error
  *     instead of returning should an error occur.
@@ -40,8 +41,10 @@ exec_prog(bool throw_error, bool is_priv,
 {
        va_list         args;
        int                     result;
+       int                     retval;
        char            cmd[MAXPGPATH];
        mode_t          old_umask = 0;
+       FILE       *log = fopen(log_file, "a+");
 
        if (is_priv)
                old_umask = umask(S_IRWXG | S_IRWXO);
@@ -51,6 +54,8 @@ exec_prog(bool throw_error, bool is_priv,
        va_end(args);
 
        pg_log(PG_VERBOSE, "%s\n", cmd);
+       fprintf(log, "command: %s\n", cmd);
+       fflush(log);
 
        result = system(cmd);
 
@@ -66,10 +71,15 @@ exec_prog(bool throw_error, bool is_priv,
                           "Consult the last few lines of \"%s\" for\n"
                           "the probable cause of the failure.\n",
                           log_file);
-               return 1;
+               retval = 1;
        }
+       else
+               retval = 0;
 
-       return 0;
+       fprintf(log, "\n\n");
+       fclose(log);
+
+       return retval;
 }