Hi,
I think I have found a small problem in pg_regress.
In convert_sourcefiles() it stats directories based on the current
working directory, but in convert_sourcefiles_in() it reads files based
in srcdir or abs_builddir.
The attached patch changes the behavior of pg_regress, so that it stats
the directories that it read the files from. This patch will also make
pg_regress fail if the directories are missing, instead of silently
ignoring the missing directories. If you think this fail-fast behavior
is undesirable, I can create a patch that just ignores the files (todays
behavior), or ignores them with a warning.
The attached patch is tested by running pg_regress in a non-standard
path and by running "make check", both on Solaris Nevada on x64.
-J
--
Jørgen Austvik, Software Engineering - QA
Sun Microsystems Database Technology Group
Index: src/test/regress/pg_regress.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/pg_regress.c,v
retrieving revision 1.38
diff -c -r1.38 pg_regress.c
*** src/test/regress/pg_regress.c 15 Nov 2007 21:14:46 -0000 1.38
--- src/test/regress/pg_regress.c 26 Nov 2007 14:26:54 -0000
***************
*** 399,407 ****
--- 399,410 ----
char abs_builddir[MAXPGPATH];
char testtablespace[MAXPGPATH];
char indir[MAXPGPATH];
+ char destdir[MAXPGPATH];
char **name;
char **names;
int count = 0;
+ struct stat st;
+ int ret;
#ifdef WIN32
char *c;
***************
*** 424,429 ****
--- 427,450 ----
strcpy(abs_srcdir, abs_builddir);
snprintf(indir, MAXPGPATH, "%s/%s", abs_srcdir, source);
+ snprintf(destdir, MAXPGPATH, "%s/%s", abs_srcdir, dest);
+
+ ret = stat(indir, &st);
+ if ((ret != 0) || (!S_ISDIR(st.st_mode)))
+ {
+ fprintf(stderr, _("%s: could not find input directory \"%s\": %s\n"),
+ progname, indir, strerror(errno));
+ exit_nicely(2);
+ }
+
+ ret = stat(destdir, &st);
+ if ((ret != 0) || (!S_ISDIR(st.st_mode)))
+ {
+ fprintf(stderr, _("%s: could not find destination directory \"%s\": %s\n"),
+ progname, destdir, strerror(errno));
+ exit_nicely(2);
+ }
+
names = pgfnames(indir);
if (!names)
/* Error logged in pgfnames */
***************
*** 466,472 ****
/* build the full actual paths to open */
snprintf(prefix, strlen(*name) - 6, "%s", *name);
snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
! snprintf(destfile, MAXPGPATH, "%s/%s.%s", dest, prefix, suffix);
infile = fopen(srcfile, "r");
if (!infile)
--- 487,493 ----
/* build the full actual paths to open */
snprintf(prefix, strlen(*name) - 6, "%s", *name);
snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
! snprintf(destfile, MAXPGPATH, "%s/%s.%s", destdir, prefix, suffix);
infile = fopen(srcfile, "r");
if (!infile)
***************
*** 508,527 ****
pgfnames_cleanup(names);
}
! /* Create the .sql and .out files from the .source files, if any */
static void
convert_sourcefiles(void)
{
! struct stat st;
! int ret;
!
! ret = stat("input", &st);
! if (ret == 0 && S_ISDIR(st.st_mode))
! convert_sourcefiles_in("input", "sql", "sql");
!
! ret = stat("output", &st);
! if (ret == 0 && S_ISDIR(st.st_mode))
! convert_sourcefiles_in("output", "expected", "out");
}
/*
--- 529,540 ----
pgfnames_cleanup(names);
}
! /* Create the .sql and .out files from the .source files */
static void
convert_sourcefiles(void)
{
! convert_sourcefiles_in("input", "sql", "sql");
! convert_sourcefiles_in("output", "expected", "out");
}
/*
begin:vcard
fn;quoted-printable:J=C3=B8rgen Austvik
n;quoted-printable:Austvik;J=C3=B8rgen
org:Sun Microsystems;Database Technology Group
adr:;;Haakon VIII gt. 7b;Trondheim;;NO-7485;Norway
email;internet:[EMAIL PROTECTED]
title:Senior Engineer
tel;work:+47 73 84 21 10
tel;fax:+47 73 84 21 01
tel;cell:+47 901 97 886
x-mozilla-html:FALSE
url:http://www.sun.com/
version:2.1
end:vcard
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings