From 93127c8296e148606c3a02b5d5bb32a82a64e797 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 28 Jun 2012 23:27:00 -0400
Subject: [PATCH] Make the pg_upgrade log files contain actual commands

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 |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/contrib/pg_upgrade/exec.c b/contrib/pg_upgrade/exec.c
index 9e63bd5..f521a67 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/contrib/pg_upgrade/exec.c
@@ -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,16 @@ 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;
+	fflush(log);
+	fprintf(log, "\n\n");
+	fclose(log);
+
+	return retval;
 }
 
 
-- 
1.7.2.5

