mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
You can't NLS-enable a program component by just putting gettext() around
every string, especially if some of the output should be fixed-format machine-readable. This needs to be more carefully sorted out. Also, make the help message generated by --help-config -h be more similar in style to the others.
This commit is contained in:
parent
4af19a579d
commit
e05147e51a
@ -13,7 +13,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.63 2003/09/25 06:57:59 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.64 2003/09/27 09:29:31 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -227,7 +227,7 @@ main(int argc, char *argv[])
|
||||
* the arguments passed on to GucInfoMain.
|
||||
*/
|
||||
if (argc > 1 && strcmp(new_argv[1], "--help-config") == 0)
|
||||
exit(GucInfoMain(argc - 1, new_argv + 1));
|
||||
exit(GucInfoMain(argc, new_argv));
|
||||
|
||||
/*
|
||||
* Otherwise we're a standalone backend. Invoke PostgresMain,
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.365 2003/09/25 06:58:02 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.366 2003/09/27 09:29:31 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
* this is the "main" module of the postgres backend and
|
||||
@ -1991,7 +1991,8 @@ usage(char *progname)
|
||||
printf(" -P disable system indexes\n");
|
||||
printf(" -s show statistics after each query\n");
|
||||
printf(" -S SORT-MEM set amount of memory for sorts (in kbytes)\n");
|
||||
printf(" --help-config show configuration options, then exit. Details: --help-config -h\n");
|
||||
printf(" --help-config show configuration parameters, then exit;\n"
|
||||
" details: --help-config -h\n");
|
||||
printf(" --help show this help, then exit\n");
|
||||
printf(" --version output version information, then exit\n");
|
||||
printf("\nDeveloper options:\n");
|
||||
@ -2661,7 +2662,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
if (!IsUnderPostmaster)
|
||||
{
|
||||
puts("\nPOSTGRES backend interactive interface ");
|
||||
puts("$Revision: 1.365 $ $Date: 2003/09/25 06:58:02 $\n");
|
||||
puts("$Revision: 1.366 $ $Date: 2003/09/27 09:29:31 $\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4,19 +4,7 @@
|
||||
* Displays available options under grand unified configuration scheme
|
||||
*
|
||||
* The purpose of this option is to list, sort, and make searchable, all
|
||||
* runtime options available to Postgresql, by their description and grouping.
|
||||
*
|
||||
* Valid command-line options to this program:
|
||||
*
|
||||
* none : All available variables are sorted by group and name
|
||||
* and formatted nicely. ( for human consumption )
|
||||
* <string> : list all the variables whose name matches this string
|
||||
* -g <string> : list all the variables whose group matches this string
|
||||
* -l : lists all currently defined groups and terminates
|
||||
* -G : no sort by groups (you get strict name order, instead)
|
||||
* -m : output the list in Machine friendly format, with a header row
|
||||
* -M : same as m, except no header
|
||||
* -h : help
|
||||
* runtime options available to PostgreSQL, by their description and grouping.
|
||||
*
|
||||
* Options whose flag bits are set to GUC_NO_SHOW_ALL, GUC_NOT_IN_SAMPLE,
|
||||
* or GUC_DISALLOW_IN_FILE are not displayed, unless the user specifically
|
||||
@ -25,7 +13,7 @@
|
||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/help_config.c,v 1.6 2003/09/25 06:58:06 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/help_config.c,v 1.7 2003/09/27 09:29:31 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -52,40 +40,33 @@ extern char *optarg;
|
||||
* The following char constructs provide the different formats the variables
|
||||
* can be outputted in.
|
||||
*/
|
||||
enum outputFormat
|
||||
{
|
||||
HUMAN_OUTPUT,
|
||||
MACHINE_OUTPUT
|
||||
};
|
||||
#define HUMAN_OUTPUT 0
|
||||
#define MACHINE_OUTPUT 1
|
||||
|
||||
static const char *const GENERIC_FORMAT[] = {
|
||||
gettext_noop("Name: %-20s\nContext: %-20s\nGroup: %-20s\n"),
|
||||
gettext_noop("Name: %-20s\nContext: %-20s\nGroup: %-20s\n"),
|
||||
"%s\t%s\t%s\t"
|
||||
};
|
||||
static const char *const GENERIC_DESC[] = {
|
||||
gettext_noop("Description: %s\n%s\n"),
|
||||
gettext_noop("Description: %s\n%s\n"),
|
||||
"%s\t%s\n"
|
||||
};
|
||||
static const char *const BOOL_FORMAT[] = {
|
||||
gettext_noop("Type: Boolean\nReset value: %-s\n"),
|
||||
gettext_noop("Type: Boolean\nDefault value: %-s\n"),
|
||||
"BOOL\t%s\t\t\t"
|
||||
};
|
||||
static const char *const INT_FORMAT[] = {
|
||||
gettext_noop("Type: integer\nReset value: %-20d\nMin value: %-20d\nMax value: %-20d\n"),
|
||||
gettext_noop("Type: integer\nDefault value: %-20d\nMin value: %-20d\nMax value: %-20d\n"),
|
||||
"INT\t%d\t%d\t%d\t"
|
||||
};
|
||||
static const char *const REAL_FORMAT[] = {
|
||||
gettext_noop("Type: real\nReset value: %-20g\nMin value: %-20g\nMax value: %-20g\n"),
|
||||
gettext_noop("Type: real\nDefault value: %-20g\nMin value: %-20g\nMax value: %-20g\n"),
|
||||
"REAL\t%g\t%g\t%g\t"
|
||||
};
|
||||
static const char *const STRING_FORMAT[] = {
|
||||
gettext_noop("Type: string\nReset value: %-s\n"),
|
||||
gettext_noop("Type: string\nDefault value: %-s\n"),
|
||||
"STRING\t%s\t\t\t"
|
||||
};
|
||||
static const char *const COLUMN_HEADER[] = {
|
||||
"",
|
||||
gettext_noop("NAME\tCONTEXT\tGROUP\tTYPE\tRESET_VALUE\tMIN\tMAX\tSHORT_DESCRIPTION\tLONG_DESCRIPTION\n")
|
||||
};
|
||||
static const char *const ROW_SEPARATOR[] = {
|
||||
"------------------------------------------------------------\n",
|
||||
""
|
||||
@ -95,12 +76,8 @@ static const char *const ROW_SEPARATOR[] = {
|
||||
* Variables loaded from the command line
|
||||
*/
|
||||
static char *nameString = NULL; /* The var name pattern to match */
|
||||
static bool nameRegexBool = false; /* Match the name pattern as a
|
||||
* regex */
|
||||
static char *groupString = NULL; /* The var group pattern to match */
|
||||
static bool groupRegexBool = false; /* Match the group pattern as a
|
||||
* regex */
|
||||
static enum outputFormat outFormat = HUMAN_OUTPUT;
|
||||
static int outFormat = HUMAN_OUTPUT;
|
||||
static bool suppressAllHeaders = false; /* MACHINE_OUTPUT output, no
|
||||
* column headers */
|
||||
static bool groupResults = true; /* sort result list by groups */
|
||||
@ -124,8 +101,7 @@ typedef union
|
||||
static bool varMatches(mixedStruct *structToTest);
|
||||
static int compareMixedStructs(const void *, const void *);
|
||||
static mixedStruct **varsToDisplay(int *resultListSize);
|
||||
static const char *usageErrMsg(void);
|
||||
static void helpMessage(void);
|
||||
static void helpMessage(const char *progname);
|
||||
static void listAllGroups(void);
|
||||
static void printGenericHead(struct config_generic structToPrint);
|
||||
static void printGenericFoot(struct config_generic structToPrint);
|
||||
@ -145,16 +121,13 @@ GucInfoMain(int argc, char *argv[])
|
||||
int c;
|
||||
int i;
|
||||
|
||||
while ((c = getopt(argc, argv, "g:rGmMlh")) != -1)
|
||||
while ((c = getopt(argc - 1, argv + 1, "g:GmMlh")) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'g':
|
||||
groupString = optarg;
|
||||
break;
|
||||
case 'r': /* not actually implemented yet */
|
||||
nameRegexBool = true;
|
||||
break;
|
||||
case 'G':
|
||||
groupResults = false;
|
||||
break;
|
||||
@ -169,17 +142,17 @@ GucInfoMain(int argc, char *argv[])
|
||||
listAllGroups();
|
||||
exit(0);
|
||||
case 'h':
|
||||
helpMessage();
|
||||
helpMessage(argv[0]);
|
||||
exit(0);
|
||||
|
||||
default:
|
||||
fprintf(stderr, gettext("%s \n Try -h for further details\n"), usageErrMsg());
|
||||
fprintf(stderr, gettext("Try \"%s --help-config -h\" for more information.\n"), argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc)
|
||||
nameString = argv[optind];
|
||||
if (optind < argc - 1)
|
||||
nameString = argv[optind + 1];
|
||||
|
||||
/* get the list of variables that match the user's specs. */
|
||||
varList = varsToDisplay(&resultListSize);
|
||||
@ -191,12 +164,12 @@ GucInfoMain(int argc, char *argv[])
|
||||
sizeof(mixedStruct *), compareMixedStructs);
|
||||
|
||||
/* output the results */
|
||||
if (!suppressAllHeaders)
|
||||
printf(gettext(COLUMN_HEADER[outFormat]));
|
||||
if (outFormat == MACHINE_OUTPUT && !suppressAllHeaders)
|
||||
printf("NAME\tCONTEXT\tGROUP\tTYPE\tDEFAULT_VALUE\tMIN\tMAX\tSHORT_DESCRIPTION\tLONG_DESCRIPTION\n");
|
||||
|
||||
for (i = 0; varList[i] != NULL; i++)
|
||||
{
|
||||
printf(gettext(ROW_SEPARATOR[outFormat]));
|
||||
printf(ROW_SEPARATOR[outFormat]);
|
||||
printMixedStruct(varList[i]);
|
||||
}
|
||||
|
||||
@ -299,7 +272,7 @@ varMatches(mixedStruct *structToTest)
|
||||
* searched for a variable in
|
||||
* particular. */
|
||||
|
||||
if (nameString != NULL && !nameRegexBool)
|
||||
if (nameString != NULL)
|
||||
{
|
||||
if (strstr(structToTest->generic.name, nameString) != NULL)
|
||||
{
|
||||
@ -308,12 +281,7 @@ varMatches(mixedStruct *structToTest)
|
||||
}
|
||||
}
|
||||
|
||||
if (nameString != NULL && nameRegexBool)
|
||||
{
|
||||
/* We do not support this option yet */
|
||||
}
|
||||
|
||||
if (groupString != NULL && !groupRegexBool)
|
||||
if (groupString != NULL)
|
||||
{
|
||||
if (strstr(config_group_names[structToTest->generic.group], groupString) != NULL)
|
||||
{
|
||||
@ -326,11 +294,6 @@ varMatches(mixedStruct *structToTest)
|
||||
matches = false;
|
||||
}
|
||||
|
||||
if (groupString != NULL && groupRegexBool)
|
||||
{
|
||||
/* We do not support this option yet */
|
||||
}
|
||||
|
||||
/* return all variables */
|
||||
if (nameString == NULL && groupString == NULL)
|
||||
matches = true;
|
||||
@ -355,9 +318,14 @@ printMixedStruct(mixedStruct *structToPrint)
|
||||
{
|
||||
|
||||
case PGC_BOOL:
|
||||
printf(gettext(BOOL_FORMAT[outFormat]),
|
||||
(structToPrint->bool.reset_val == 0) ?
|
||||
gettext("FALSE") : gettext("TRUE"));
|
||||
if (outFormat == HUMAN_OUTPUT)
|
||||
printf(gettext(BOOL_FORMAT[outFormat]),
|
||||
(structToPrint->bool.reset_val == 0) ?
|
||||
gettext("false") : gettext("true"));
|
||||
else
|
||||
printf(gettext(BOOL_FORMAT[outFormat]),
|
||||
(structToPrint->bool.reset_val == 0) ?
|
||||
"FALSE" : "TRUE");
|
||||
break;
|
||||
|
||||
case PGC_INT:
|
||||
@ -380,7 +348,7 @@ printMixedStruct(mixedStruct *structToPrint)
|
||||
break;
|
||||
|
||||
default:
|
||||
printf(gettext("Unrecognized variable type!\n"));
|
||||
printf("Internal error: unrecognized run-time parameter type\n");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -409,40 +377,29 @@ listAllGroups(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf(gettext("All currently defined groups\n"));
|
||||
printf(gettext("----------------------------\n"));
|
||||
for (i = 0; config_group_names[i] != NULL; i++)
|
||||
printf(gettext("%s\n"), gettext(config_group_names[i]));
|
||||
}
|
||||
|
||||
static const char *
|
||||
usageErrMsg(void)
|
||||
{
|
||||
return gettext("Usage for --help-config option: [-h] [-g <group>] [-l] [-G] [-m] [-M] [string]\n");
|
||||
printf("%s\n", gettext(config_group_names[i]));
|
||||
}
|
||||
|
||||
static void
|
||||
helpMessage(void)
|
||||
helpMessage(const char *progname)
|
||||
{
|
||||
printf(gettext("Description:\n"
|
||||
"--help-config displays all the runtime options available in PostgreSQL.\n"
|
||||
"It groups them by category and sorts them by name. If available, it will\n"
|
||||
"present a short description, default, max and min values as well as other\n"
|
||||
"information about each option.\n\n"
|
||||
"With no options specified, it will output all available runtime options\n"
|
||||
"in human friendly format, grouped by category and sorted by name.\n\n"
|
||||
|
||||
"%s\n"
|
||||
|
||||
"General Options:\n"
|
||||
" [string] All options with names that match this string\n"
|
||||
" -g GROUP All options in categories that match GROUP\n"
|
||||
" -l Prints list of all groups / subgroups\n"
|
||||
" -h Prints this help message\n"
|
||||
"\nOutput Options:\n"
|
||||
" -G Do not group by category\n"
|
||||
" -m Machine friendly format: tab separated fields\n"
|
||||
" -M Same as m, except header with column names is suppressed\n"),
|
||||
usageErrMsg()
|
||||
);
|
||||
printf(gettext("%s --help-config displays information about the\n"
|
||||
"run-time configuration parameters available in the PostgreSQL server.\n\n"),
|
||||
progname);
|
||||
printf(gettext("Usage:\n %s --help-config [OPTION]... [NAME]\n\n"), progname);
|
||||
printf(gettext("General Options:\n"));
|
||||
printf(gettext(" NAME output information about parameters matching this name\n"));
|
||||
printf(gettext(" -g GROUP output information about parameters matching this group\n"));
|
||||
printf(gettext(" -l list available parameter groups\n"));
|
||||
printf(gettext(" -h show this help, then exit\n"));
|
||||
printf(gettext("\nOutput Options:\n"));
|
||||
printf(gettext(" -G do not group by category\n"));
|
||||
printf(gettext(" -m machine-friendly format: tab separated fields\n"));
|
||||
printf(gettext(" -M same as -m, but header with column names is suppressed\n"));
|
||||
printf(gettext("\n"
|
||||
"If no parameter name is specified, all parameters are shown. By default,\n"
|
||||
"parameters are grouped by category, sorted by name, and output in a human-\n"
|
||||
"friendly format. Available information about run-time parameters includes\n"
|
||||
"a short description, default value, maximum and minimum values.\n"));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user