From f3798089d84e965b4570d4e774afe110d805f8e0 Mon Sep 17 00:00:00 2001
From: Noah Misch <noah@leadboat.com>
Date: Tue, 28 May 2019 12:58:30 -0700
Subject: [PATCH] In the pg_upgrade test suite, remove and recreate
 "tmp_check".

This allows "vcregress upgradecheck" to pass twice in immediate
succession, and it's more like how $(prove_check) works.  Back-patch to
9.5, where pg_upgrade moved to src/bin.

Discussion: https://postgr.es/m/20190520012436.GA1480421@rfd.leadboat.com
---
 src/bin/pg_upgrade/test.sh  | 3 ++-
 src/tools/msvc/vcregress.pl | 6 ++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
index 1f6e7a9ad78..82db9849608 100644
--- a/src/bin/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -66,6 +66,8 @@ export PGHOST
 
 # don't rely on $PWD here, as old shells don't set it
 temp_root=`pwd`/tmp_check
+rm -rf "$temp_root"
+mkdir "$temp_root"
 
 if [ "$1" = '--install' ]; then
 	temp_install=$temp_root/install
@@ -104,7 +106,6 @@ export PATH
 BASE_PGDATA=$temp_root/data
 PGDATA="$BASE_PGDATA.old"
 export PGDATA
-rm -rf "$BASE_PGDATA" "$PGDATA"
 
 logdir=`pwd`/log
 rm -rf "$logdir"
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index a3daacacd26..7b388d2365b 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -488,7 +488,8 @@ sub upgradecheck
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
 	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
-	(mkdir $tmp_root || die $!) unless -d $tmp_root;
+	rmtree($tmp_root);
+	mkdir $tmp_root || die $!;
 	my $upg_tmp_install = "$tmp_root/install";    # unshared temp install
 	print "Setting up temp install\n\n";
 	Install($upg_tmp_install, "all", $config);
@@ -501,7 +502,8 @@ sub upgradecheck
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
 	my $logdir = "$topdir/src/bin/pg_upgrade/log";
-	(mkdir $logdir || die $!) unless -d $logdir;
+	rmtree($logdir);
+	mkdir $logdir || die $!;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
 	print "\nStarting old cluster\n\n";
-- 
GitLab