PG_MAJORVERSION:

For simplicity, use PG_MAJORVERSION rather than PG_VERSION for creation
of the PG_VERSION file.
This commit is contained in:
Bruce Momjian 2010-01-06 23:23:51 +00:00
parent 9261b19fb5
commit a6f56efc35
2 changed files with 20 additions and 90 deletions

View File

@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.67 2010/01/06 01:48:09 momjian Exp $ * $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.68 2010/01/06 23:23:51 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -82,7 +82,7 @@ char *temp_tablespaces = NULL;
static bool remove_tablespace_directories(Oid tablespaceoid, bool redo); static bool remove_tablespace_directories(Oid tablespaceoid, bool redo);
static void set_short_version(const char *path); static void write_version_file(const char *path);
/* /*
@ -332,7 +332,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
* (the emptiness check above will fail), and to label tablespace * (the emptiness check above will fail), and to label tablespace
* directories by PG version. * directories by PG version.
*/ */
set_short_version(location); write_version_file(location);
/* /*
* All seems well, create the symlink * All seems well, create the symlink
@ -673,46 +673,21 @@ remove_tablespace_directories(Oid tablespaceoid, bool redo)
* write out the PG_VERSION file in the specified directory * write out the PG_VERSION file in the specified directory
*/ */
static void static void
set_short_version(const char *path) write_version_file(const char *path)
{ {
char *short_version;
bool gotdot = false;
int end;
char *fullname; char *fullname;
FILE *version_file; FILE *version_file;
/* Construct short version string (should match initdb.c) */
short_version = pstrdup(PG_VERSION);
for (end = 0; short_version[end] != '\0'; end++)
{
if (short_version[end] == '.')
{
Assert(end != 0);
if (gotdot)
break;
else
gotdot = true;
}
else if (short_version[end] < '0' || short_version[end] > '9')
{
/* gone past digits and dots */
break;
}
}
Assert(end > 0 && short_version[end - 1] != '.' && gotdot);
short_version[end] = '\0';
/* Now write the file */ /* Now write the file */
fullname = palloc(strlen(path) + 11 + 1); fullname = palloc(strlen(path) + 11 + 1);
sprintf(fullname, "%s/PG_VERSION", path); sprintf(fullname, "%s/PG_VERSION", path);
version_file = AllocateFile(fullname, PG_BINARY_W);
if (version_file == NULL) if ((version_file = AllocateFile(fullname, PG_BINARY_W)) == NULL)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not write to file \"%s\": %m", errmsg("could not write to file \"%s\": %m",
fullname))); fullname)));
fprintf(version_file, "%s\n", short_version); fprintf(version_file, "%s\n", PG_MAJORVERSION);
if (FreeFile(version_file)) if (FreeFile(version_file))
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
@ -720,7 +695,6 @@ set_short_version(const char *path)
fullname))); fullname)));
pfree(fullname); pfree(fullname);
pfree(short_version);
} }
/* /*
@ -1370,7 +1344,7 @@ tblspc_redo(XLogRecPtr lsn, XLogRecord *record)
location))); location)));
/* Create or re-create the PG_VERSION file in the target directory */ /* Create or re-create the PG_VERSION file in the target directory */
set_short_version(location); write_version_file(location);
/* Create the symlink if not already present */ /* Create the symlink if not already present */
linkloc = (char *) palloc(OIDCHARS + OIDCHARS + 1); linkloc = (char *) palloc(OIDCHARS + OIDCHARS + 1);

View File

@ -42,7 +42,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* Portions taken from FreeBSD. * Portions taken from FreeBSD.
* *
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.181 2010/01/02 16:57:58 momjian Exp $ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.182 2010/01/06 23:23:51 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -156,16 +156,15 @@ static int mkdir_p(char *path, mode_t omode);
static void exit_nicely(void); static void exit_nicely(void);
static char *get_id(void); static char *get_id(void);
static char *get_encoding_id(char *encoding_name); static char *get_encoding_id(char *encoding_name);
static char *get_short_version(void);
static int check_data_dir(char *dir); static int check_data_dir(char *dir);
static bool mkdatadir(const char *subdir); static bool mkdatadir(const char *subdir);
static void set_input(char **dest, char *filename); static void set_input(char **dest, char *filename);
static void check_input(char *path); static void check_input(char *path);
static void set_short_version(char *short_version, char *extrapath); static void write_version_file(char *extrapath);
static void set_null_conf(void); static void set_null_conf(void);
static void test_config_settings(void); static void test_config_settings(void);
static void setup_config(void); static void setup_config(void);
static void bootstrap_template1(char *short_version); static void bootstrap_template1(void);
static void setup_auth(void); static void setup_auth(void);
static void get_set_pwd(void); static void get_set_pwd(void);
static void setup_depend(void); static void setup_depend(void);
@ -802,42 +801,6 @@ find_matching_ts_config(const char *lc_type)
} }
/*
* get short version of VERSION
*/
static char *
get_short_version(void)
{
bool gotdot = false;
int end;
char *vr;
vr = xstrdup(PG_VERSION);
for (end = 0; vr[end] != '\0'; end++)
{
if (vr[end] == '.')
{
if (end == 0)
return NULL;
else if (gotdot)
break;
else
gotdot = true;
}
else if (vr[end] < '0' || vr[end] > '9')
{
/* gone past digits and dots */
break;
}
}
if (end == 0 || vr[end - 1] == '.' || !gotdot)
return NULL;
vr[end] = '\0';
return vr;
}
/* /*
* make sure the directory either doesn't exist or is empty * make sure the directory either doesn't exist or is empty
* *
@ -972,7 +935,7 @@ check_input(char *path)
* if extrapath is not NULL * if extrapath is not NULL
*/ */
static void static void
set_short_version(char *short_version, char *extrapath) write_version_file(char *extrapath)
{ {
FILE *version_file; FILE *version_file;
char *path; char *path;
@ -987,14 +950,14 @@ set_short_version(char *short_version, char *extrapath)
path = pg_malloc(strlen(pg_data) + strlen(extrapath) + 13); path = pg_malloc(strlen(pg_data) + strlen(extrapath) + 13);
sprintf(path, "%s/%s/PG_VERSION", pg_data, extrapath); sprintf(path, "%s/%s/PG_VERSION", pg_data, extrapath);
} }
version_file = fopen(path, PG_BINARY_W);
if (version_file == NULL) if ((version_file = fopen(path, PG_BINARY_W)) == NULL)
{ {
fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"), fprintf(stderr, _("%s: could not open file \"%s\" for writing: %s\n"),
progname, path, strerror(errno)); progname, path, strerror(errno));
exit_nicely(); exit_nicely();
} }
if (fprintf(version_file, "%s\n", short_version) < 0 || if (fprintf(version_file, "%s\n", PG_MAJORVERSION) < 0 ||
fclose(version_file)) fclose(version_file))
{ {
fprintf(stderr, _("%s: could not write file \"%s\": %s\n"), fprintf(stderr, _("%s: could not write file \"%s\": %s\n"),
@ -1297,7 +1260,7 @@ setup_config(void)
* run the BKI script in bootstrap mode to create template1 * run the BKI script in bootstrap mode to create template1
*/ */
static void static void
bootstrap_template1(char *short_version) bootstrap_template1(void)
{ {
PG_CMD_DECL; PG_CMD_DECL;
char **line; char **line;
@ -1317,7 +1280,7 @@ bootstrap_template1(char *short_version)
/* Check that bki file appears to be of the right version */ /* Check that bki file appears to be of the right version */
snprintf(headerline, sizeof(headerline), "# PostgreSQL %s\n", snprintf(headerline, sizeof(headerline), "# PostgreSQL %s\n",
short_version); PG_MAJORVERSION);
if (strcmp(headerline, *bki_lines) != 0) if (strcmp(headerline, *bki_lines) != 0)
{ {
@ -2480,7 +2443,6 @@ main(int argc, char *argv[])
i, i,
ret; ret;
int option_index; int option_index;
char *short_version;
char *effective_user; char *effective_user;
char *pgdenv; /* PGDATA value gotten from and sent to char *pgdenv; /* PGDATA value gotten from and sent to
* environment */ * environment */
@ -2788,12 +2750,6 @@ main(int argc, char *argv[])
canonicalize_path(share_path); canonicalize_path(share_path);
if ((short_version = get_short_version()) == NULL)
{
fprintf(stderr, _("%s: could not determine valid short version string\n"), progname);
exit(1);
}
effective_user = get_id(); effective_user = get_id();
if (strlen(username) == 0) if (strlen(username) == 0)
username = effective_user; username = effective_user;
@ -3123,7 +3079,7 @@ main(int argc, char *argv[])
check_ok(); check_ok();
/* Top level PG_VERSION is checked by bootstrapper, so make it first */ /* Top level PG_VERSION is checked by bootstrapper, so make it first */
set_short_version(short_version, NULL); write_version_file(NULL);
/* Select suitable configuration settings */ /* Select suitable configuration settings */
set_null_conf(); set_null_conf();
@ -3133,12 +3089,12 @@ main(int argc, char *argv[])
setup_config(); setup_config();
/* Bootstrap template1 */ /* Bootstrap template1 */
bootstrap_template1(short_version); bootstrap_template1();
/* /*
* Make the per-database PG_VERSION for template1 only after init'ing it * Make the per-database PG_VERSION for template1 only after init'ing it
*/ */
set_short_version(short_version, "base/1"); write_version_file("base/1");
/* Create the stuff we don't need to use bootstrap mode for */ /* Create the stuff we don't need to use bootstrap mode for */