mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-04-17 11:46:39 +02:00
Remove generated config.auto.c file.
This file duplicated the command list that already exists in parse.auto.c. Combine the data from config.auto.c into parse.auto.c and adjust the interface functions as needed. Quite a few were able to be moved to parse.c as static.
This commit is contained in:
parent
e32f9e146b
commit
b47a07b8b9
@ -558,7 +558,7 @@ run 8/1 ------------- L2285 no current backups
|
||||
|
||||
## Adding an Option
|
||||
|
||||
Options can be added to a command or multiple commands. Options can be configuration file only, command-line only or valid for both. Once an option is successfully added, `config.auto.*`, `define.auto.*` and `parse.auto.*` files will automatically be generated by the build system.
|
||||
Options can be added to a command or multiple commands. Options can be configuration file only, command-line only or valid for both. Once an option is successfully added, the `config.auto.h` and `parse.auto.c` files will automatically be generated by the build system.
|
||||
|
||||
To add an option, two files need be to be modified:
|
||||
|
||||
|
@ -620,7 +620,7 @@ run 8/1 ------------- L2285 no current backups
|
||||
<section id="option">
|
||||
<title>Adding an Option</title>
|
||||
|
||||
<p>Options can be added to a command or multiple commands. Options can be configuration file only, command-line only or valid for both. Once an option is successfully added, <file>config.auto.*</file>, <file>define.auto.*</file> and <file>parse.auto.*</file> files will automatically be generated by the build system.</p>
|
||||
<p>Options can be added to a command or multiple commands. Options can be configuration file only, command-line only or valid for both. Once an option is successfully added, the <file>config.auto.h</file> and <file>parse.auto.c</file> files will automatically be generated by the build system.</p>
|
||||
|
||||
<p>To add an option, two files need be to be modified:</p>
|
||||
<list>
|
||||
|
@ -216,7 +216,7 @@ SRCS_BUILD_CONFIG = \
|
||||
|
||||
OBJS_BUILD_CONFIG = $(patsubst %.c,$(BUILDDIR)/%.o,$(SRCS_BUILD) $(SRCS_BUILD_CONFIG))
|
||||
|
||||
build-config: $(OBJS_BUILD_CONFIG) build/config/config.yaml config/config.auto.h config/config.auto.c config/parse.auto.c
|
||||
build-config: $(OBJS_BUILD_CONFIG) build/config/config.yaml config/config.auto.h config/parse.auto.c
|
||||
$(CC) -o build-config $(OBJS_BUILD_CONFIG) $(LDFLAGS) $(LIBS) $(LIBS_BUILD)
|
||||
./build-config $(VPATH)
|
||||
|
||||
|
@ -276,57 +276,6 @@ bldCfgRenderConfigAutoH(const Storage *const storageRepo, const BldCfg bldCfg)
|
||||
bldPut(storageRepo, "src/config/config.auto.h", BUFSTR(config));
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Render config.auto.c
|
||||
***********************************************************************************************************************************/
|
||||
static void
|
||||
bldCfgRenderConfigAutoC(const Storage *const storageRepo, const BldCfg bldCfg)
|
||||
{
|
||||
String *const config = bldHeader(CONFIG_MODULE, CONFIG_AUTO_COMMENT);
|
||||
|
||||
// Command data
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
strCatZ(
|
||||
config,
|
||||
"\n"
|
||||
COMMENT_BLOCK_BEGIN "\n"
|
||||
"Command data\n"
|
||||
COMMENT_BLOCK_END "\n"
|
||||
"static const ConfigCommandData configCommandData[CFG_COMMAND_TOTAL] = CONFIG_COMMAND_LIST\n"
|
||||
"(\n");
|
||||
|
||||
for (unsigned int cmdIdx = 0; cmdIdx < lstSize(bldCfg.cmdList); cmdIdx++)
|
||||
{
|
||||
const BldCfgCommand *const cmd = lstGet(bldCfg.cmdList, cmdIdx);
|
||||
|
||||
if (cmdIdx != 0)
|
||||
strCatZ(config, "\n");
|
||||
|
||||
strCatFmt(
|
||||
config,
|
||||
" CONFIG_COMMAND\n"
|
||||
" (\n"
|
||||
" CONFIG_COMMAND_NAME(%s)\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND_LOG_FILE(%s)\n"
|
||||
" CONFIG_COMMAND_LOG_LEVEL_DEFAULT(%s)\n"
|
||||
" CONFIG_COMMAND_LOCK_REQUIRED(%s)\n"
|
||||
" CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(%s)\n"
|
||||
" CONFIG_COMMAND_LOCK_TYPE(%s)\n"
|
||||
" )\n",
|
||||
strZ(bldConst("CFGCMD", cmd->name)), cvtBoolToConstZ(cmd->logFile), strZ(bldEnum("logLevel", cmd->logLevelDefault)),
|
||||
cvtBoolToConstZ(cmd->lockRequired), cvtBoolToConstZ(cmd->lockRemoteRequired), strZ(bldEnum("lockType", cmd->lockType)));
|
||||
}
|
||||
|
||||
strCatZ(
|
||||
config,
|
||||
")\n");
|
||||
|
||||
// Write to storage
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
bldPut(storageRepo, "src/config/config.auto.c", BUFSTR(config));
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Render parse.auto.c
|
||||
***********************************************************************************************************************************/
|
||||
@ -487,6 +436,19 @@ bldCfgRenderParseAutoC(const Storage *const storageRepo, const BldCfg bldCfg)
|
||||
" PARSE_RULE_COMMAND_NAME(\"%s\"),\n",
|
||||
strZ(cmd->name));
|
||||
|
||||
if (cmd->lockRequired)
|
||||
strCatZ(config, " PARSE_RULE_COMMAND_LOCK_REQUIRED(true),\n");
|
||||
|
||||
if (cmd->lockRemoteRequired)
|
||||
strCatZ(config, " PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(true),\n");
|
||||
|
||||
strCatFmt(config, " PARSE_RULE_COMMAND_LOCK_TYPE(%s),\n", strZ(bldEnum("lockType", cmd->lockType)));
|
||||
|
||||
if (cmd->logFile)
|
||||
strCatZ(config, " PARSE_RULE_COMMAND_LOG_FILE(true),\n");
|
||||
|
||||
strCatFmt(config, " PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(%s),\n", strZ(bldEnum("logLevel", cmd->logLevelDefault)));
|
||||
|
||||
if (cmd->parameterAllowed)
|
||||
strCatZ(config, " PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),\n");
|
||||
|
||||
@ -887,6 +849,5 @@ void
|
||||
bldCfgRender(const Storage *const storageRepo, const BldCfg bldCfg)
|
||||
{
|
||||
bldCfgRenderConfigAutoH(storageRepo, bldCfg);
|
||||
bldCfgRenderConfigAutoC(storageRepo, bldCfg);
|
||||
bldCfgRenderParseAutoC(storageRepo, bldCfg);
|
||||
}
|
||||
|
@ -626,7 +626,7 @@ cmdArchiveGet(void)
|
||||
|
||||
// Destination is wherever we were told to move the WAL segment
|
||||
const String *walDestination =
|
||||
walPath(strLstGet(commandParam, 1), cfgOptionStr(cfgOptPgPath), STR(cfgCommandName(cfgCommand())));
|
||||
walPath(strLstGet(commandParam, 1), cfgOptionStr(cfgOptPgPath), STR(cfgCommandName()));
|
||||
|
||||
// Async get can only be performed on WAL segments, history or other files must use synchronous mode
|
||||
if (cfgOptionBool(cfgOptArchiveAsync) && walIsSegment(walSegment))
|
||||
|
@ -321,7 +321,7 @@ cmdArchivePush(void)
|
||||
lockStopTest();
|
||||
|
||||
// Get the segment name
|
||||
String *walFile = walPath(strLstGet(commandParam, 0), cfgOptionStrNull(cfgOptPgPath), STR(cfgCommandName(cfgCommand())));
|
||||
String *walFile = walPath(strLstGet(commandParam, 0), cfgOptionStrNull(cfgOptPgPath), STR(cfgCommandName()));
|
||||
String *archiveFile = strBase(walFile);
|
||||
|
||||
if (cfgOptionBool(cfgOptArchiveAsync))
|
||||
|
@ -283,8 +283,8 @@ helpRender(void)
|
||||
if (commandData[commandId].internal)
|
||||
continue;
|
||||
|
||||
if (strlen(cfgCommandName(commandId)) > commandSizeMax)
|
||||
commandSizeMax = strlen(cfgCommandName(commandId));
|
||||
if (strlen(cfgParseCommandName(commandId)) > commandSizeMax)
|
||||
commandSizeMax = strlen(cfgParseCommandName(commandId));
|
||||
}
|
||||
|
||||
// Output help for each command
|
||||
@ -294,8 +294,8 @@ helpRender(void)
|
||||
continue;
|
||||
|
||||
strCatFmt(
|
||||
result, " %s%*s%s\n", cfgCommandName(commandId),
|
||||
(int)(commandSizeMax - strlen(cfgCommandName(commandId)) + 2), "",
|
||||
result, " %s%*s%s\n", cfgParseCommandName(commandId),
|
||||
(int)(commandSizeMax - strlen(cfgParseCommandName(commandId)) + 2), "",
|
||||
strZ(helpRenderText(commandData[commandId].summary, false, commandSizeMax + 6, false, CONSOLE_WIDTH)));
|
||||
}
|
||||
|
||||
@ -305,7 +305,7 @@ helpRender(void)
|
||||
else
|
||||
{
|
||||
ConfigCommand commandId = cfgCommand();
|
||||
const char *commandName = cfgCommandName(commandId);
|
||||
const char *commandName = cfgParseCommandName(commandId);
|
||||
|
||||
// Unpack option data
|
||||
HelpOptionData *optionData = memNew(sizeof(HelpOptionData) * CFG_OPTION_TOTAL);
|
||||
|
@ -1,231 +0,0 @@
|
||||
/***********************************************************************************************************************************
|
||||
Command and Option Configuration
|
||||
|
||||
Automatically generated by 'make build-config' -- do not modify directly.
|
||||
***********************************************************************************************************************************/
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Command data
|
||||
***********************************************************************************************************************************/
|
||||
static const ConfigCommandData configCommandData[CFG_COMMAND_TOTAL] = CONFIG_COMMAND_LIST
|
||||
(
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_ARCHIVE_GET)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeArchive)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_ARCHIVE_PUSH)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeArchive)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_BACKUP)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeBackup)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_CHECK)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_EXPIRE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeBackup)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_HELP)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_INFO)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_REPO_CREATE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_REPO_GET)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_REPO_LS)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_REPO_PUT)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_REPO_RM)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_RESTORE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_STANZA_CREATE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeAll)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_STANZA_DELETE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeAll)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_STANZA_UPGRADE)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(true)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeAll)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_START)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_STOP)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_VERIFY)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(true)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
|
||||
CONFIG_COMMAND
|
||||
(
|
||||
CONFIG_COMMAND_NAME(CFGCMD_VERSION)
|
||||
|
||||
CONFIG_COMMAND_LOG_FILE(false)
|
||||
CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)
|
||||
CONFIG_COMMAND_LOCK_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)
|
||||
CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)
|
||||
)
|
||||
)
|
@ -11,45 +11,6 @@ Command and Option Configuration
|
||||
#include "config/config.intern.h"
|
||||
#include "config/parse.h"
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Map command names to ids and vice versa
|
||||
***********************************************************************************************************************************/
|
||||
typedef struct ConfigCommandData
|
||||
{
|
||||
const char *name;
|
||||
|
||||
bool lockRequired:1;
|
||||
bool lockRemoteRequired:1;
|
||||
unsigned int lockType:2;
|
||||
|
||||
bool logFile:1;
|
||||
unsigned int logLevelDefault:4;
|
||||
} ConfigCommandData;
|
||||
|
||||
#define CONFIG_COMMAND_LIST(...) \
|
||||
{__VA_ARGS__};
|
||||
|
||||
#define CONFIG_COMMAND(...) \
|
||||
{__VA_ARGS__},
|
||||
|
||||
#define CONFIG_COMMAND_LOCK_REQUIRED(lockRequiredParam) \
|
||||
.lockRequired = lockRequiredParam,
|
||||
#define CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(lockRemoteRequiredParam) \
|
||||
.lockRemoteRequired = lockRemoteRequiredParam,
|
||||
#define CONFIG_COMMAND_LOCK_TYPE(lockTypeParam) \
|
||||
.lockType = lockTypeParam,
|
||||
#define CONFIG_COMMAND_LOG_FILE(logFileParam) \
|
||||
.logFile = logFileParam,
|
||||
#define CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDefaultParam) \
|
||||
.logLevelDefault = logLevelDefaultParam,
|
||||
#define CONFIG_COMMAND_NAME(nameParam) \
|
||||
.name = nameParam,
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Include the automatically generated configuration data
|
||||
***********************************************************************************************************************************/
|
||||
#include "config/config.auto.c"
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Data for the currently loaded configuration
|
||||
***********************************************************************************************************************************/
|
||||
@ -118,25 +79,6 @@ cfgCommandHelp(void)
|
||||
FUNCTION_TEST_RETURN(configLocal->help);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
ConfigCommand
|
||||
cfgCommandId(const char *commandName)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(STRINGZ, commandName);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
ASSERT(commandName != NULL);
|
||||
|
||||
ConfigCommand commandId;
|
||||
|
||||
for (commandId = 0; commandId < cfgCmdNone; commandId++)
|
||||
if (strcmp(commandName, configCommandData[commandId].name) == 0)
|
||||
break;
|
||||
|
||||
FUNCTION_TEST_RETURN(commandId);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
VariantList *
|
||||
cfgCommandJobRetry(void)
|
||||
@ -162,32 +104,14 @@ cfgCommandJobRetry(void)
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
const char *
|
||||
cfgCommandName(ConfigCommand commandId)
|
||||
cfgCommandName(void)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandId);
|
||||
FUNCTION_TEST_END();
|
||||
FUNCTION_TEST_VOID();
|
||||
|
||||
ASSERT(commandId < cfgCmdNone);
|
||||
ASSERT(configLocal != NULL);
|
||||
ASSERT(configLocal->command < cfgCmdNone);
|
||||
|
||||
FUNCTION_TEST_RETURN(configCommandData[commandId].name);
|
||||
}
|
||||
|
||||
String *
|
||||
cfgCommandRoleNameParam(ConfigCommand commandId, ConfigCommandRole commandRoleId, const String *separator)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandId);
|
||||
FUNCTION_TEST_PARAM(ENUM, commandRoleId);
|
||||
FUNCTION_TEST_PARAM(STRING, separator);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
String *result = strNewZ(cfgCommandName(commandId));
|
||||
|
||||
if (commandRoleId != cfgCmdRoleMain)
|
||||
strCatFmt(result, "%s%s", strZ(separator), strZ(cfgCommandRoleStr(commandRoleId)));
|
||||
|
||||
FUNCTION_TEST_RETURN(result);
|
||||
FUNCTION_TEST_RETURN(cfgParseCommandName(configLocal->command));
|
||||
}
|
||||
|
||||
String *
|
||||
@ -195,7 +119,7 @@ cfgCommandRoleName(void)
|
||||
{
|
||||
FUNCTION_TEST_VOID();
|
||||
|
||||
FUNCTION_TEST_RETURN(cfgCommandRoleNameParam(cfgCommand(), cfgCommandRole(), COLON_STR));
|
||||
FUNCTION_TEST_RETURN(cfgParseCommandRoleName(cfgCommand(), cfgCommandRole(), COLON_STR));
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
@ -218,60 +142,6 @@ cfgCommandParam(void)
|
||||
FUNCTION_TEST_RETURN(configLocal->paramList);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_ASYNC_STR, CONFIG_COMMAND_ROLE_ASYNC);
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_LOCAL_STR, CONFIG_COMMAND_ROLE_LOCAL);
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_REMOTE_STR, CONFIG_COMMAND_ROLE_REMOTE);
|
||||
|
||||
ConfigCommandRole
|
||||
cfgCommandRoleEnum(const String *commandRole)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(STRING, commandRole);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
if (commandRole == NULL)
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleMain);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_ASYNC_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleAsync);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_LOCAL_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleLocal);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_REMOTE_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleRemote);
|
||||
|
||||
THROW_FMT(CommandInvalidError, "invalid command role '%s'", strZ(commandRole));
|
||||
}
|
||||
|
||||
const String *
|
||||
cfgCommandRoleStr(ConfigCommandRole commandRole)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandRole);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
const String *result = NULL;
|
||||
|
||||
switch (commandRole)
|
||||
{
|
||||
case cfgCmdRoleMain:
|
||||
break;
|
||||
|
||||
case cfgCmdRoleAsync:
|
||||
result = CONFIG_COMMAND_ROLE_ASYNC_STR;
|
||||
break;
|
||||
|
||||
case cfgCmdRoleLocal:
|
||||
result = CONFIG_COMMAND_ROLE_LOCAL_STR;
|
||||
break;
|
||||
|
||||
case cfgCmdRoleRemote:
|
||||
result = CONFIG_COMMAND_ROLE_REMOTE_STR;
|
||||
break;
|
||||
}
|
||||
|
||||
FUNCTION_TEST_RETURN(result);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
const String *
|
||||
cfgExe(void)
|
||||
@ -293,7 +163,7 @@ cfgLockRequired(void)
|
||||
// Local roles never take a lock and the remote role has special logic for locking
|
||||
FUNCTION_TEST_RETURN(
|
||||
// If a lock is required for the command and the role is main
|
||||
(configCommandData[cfgCommand()].lockRequired && cfgCommandRole() == cfgCmdRoleMain) ||
|
||||
(configLocal->lockRequired && cfgCommandRole() == cfgCmdRoleMain) ||
|
||||
// Or any command when the role is async
|
||||
cfgCommandRole() == cfgCmdRoleAsync);
|
||||
}
|
||||
@ -304,7 +174,10 @@ cfgLockRemoteRequired(void)
|
||||
{
|
||||
FUNCTION_TEST_VOID();
|
||||
|
||||
FUNCTION_TEST_RETURN(configCommandData[cfgCommand()].lockRemoteRequired);
|
||||
ASSERT(configLocal != NULL);
|
||||
ASSERT(configLocal->command != cfgCmdNone);
|
||||
|
||||
FUNCTION_TEST_RETURN(configLocal->lockRemoteRequired);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
@ -316,7 +189,7 @@ cfgLockType(void)
|
||||
ASSERT(configLocal != NULL);
|
||||
ASSERT(configLocal->command != cfgCmdNone);
|
||||
|
||||
FUNCTION_TEST_RETURN((LockType)configCommandData[cfgCommand()].lockType);
|
||||
FUNCTION_TEST_RETURN(configLocal->lockType);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
@ -330,7 +203,7 @@ cfgLogFile(void)
|
||||
|
||||
FUNCTION_TEST_RETURN(
|
||||
// If the command always logs to a file
|
||||
configCommandData[cfgCommand()].logFile ||
|
||||
configLocal->logFile ||
|
||||
// Or log-level-file was explicitly set as a param/env var
|
||||
(cfgOptionValid(cfgOptLogLevelFile) && cfgOptionSource(cfgOptLogLevelFile) == cfgSourceParam) ||
|
||||
// Or the role is async
|
||||
@ -346,7 +219,7 @@ cfgLogLevelDefault(void)
|
||||
ASSERT(configLocal != NULL);
|
||||
ASSERT(configLocal->command != cfgCmdNone);
|
||||
|
||||
FUNCTION_TEST_RETURN((LogLevel)configCommandData[cfgCommand()].logLevelDefault);
|
||||
FUNCTION_TEST_RETURN(configLocal->logLevelDefault);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
|
@ -53,8 +53,8 @@ ConfigCommand cfgCommand(void);
|
||||
// Current command role (async, local, remote)
|
||||
ConfigCommandRole cfgCommandRole(void);
|
||||
|
||||
// Get command name by id
|
||||
const char *cfgCommandName(ConfigCommand commandId);
|
||||
// Get command name
|
||||
const char *cfgCommandName(void);
|
||||
|
||||
// Get command:role name
|
||||
String *cfgCommandRoleName(void);
|
||||
@ -165,18 +165,8 @@ config/load.c.
|
||||
// Was help requested?
|
||||
bool cfgCommandHelp(void);
|
||||
|
||||
// Get command id by name
|
||||
ConfigCommand cfgCommandId(const char *commandName);
|
||||
|
||||
void cfgCommandSet(ConfigCommand commandId, ConfigCommandRole commandRoleId);
|
||||
|
||||
// Get command/role name with custom separator
|
||||
String *cfgCommandRoleNameParam(ConfigCommand commandId, ConfigCommandRole commandRoleId, const String *separator);
|
||||
|
||||
// Convert command role from String to enum and vice versa
|
||||
ConfigCommandRole cfgCommandRoleEnum(const String *commandRole);
|
||||
const String *cfgCommandRoleStr(ConfigCommandRole commandRole);
|
||||
|
||||
// pgBackRest exe
|
||||
const String *cfgExe(void);
|
||||
|
||||
|
@ -34,12 +34,17 @@ typedef struct Config
|
||||
{
|
||||
MemContext *memContext; // Mem context for config data
|
||||
|
||||
// Generally set by the command parser but can also be set by during execute to change commands, i.e. backup -> expire
|
||||
// Generally set by the command parser but can also be set during execute to change commands, i.e. backup -> expire
|
||||
ConfigCommand command; // Current command
|
||||
ConfigCommandRole commandRole; // Current command role
|
||||
|
||||
String *exe; // Location of the executable
|
||||
bool help; // Was help requested for the command?
|
||||
bool lockRequired; // Is an immediate lock required?
|
||||
bool lockRemoteRequired; // Is a lock required on the remote?
|
||||
LockType lockType; // Lock type required
|
||||
bool logFile; // Will the command log to a file?
|
||||
LogLevel logLevelDefault; // Default log level
|
||||
StringList *paramList; // Parameters passed to the command (if any)
|
||||
|
||||
// Group options that are related together to allow valid and test checks across all options in the group
|
||||
|
@ -133,7 +133,7 @@ cfgExecParam(ConfigCommand commandId, ConfigCommandRole commandRoleId, const Key
|
||||
}
|
||||
|
||||
// Add the command
|
||||
strLstAdd(result, cfgCommandRoleNameParam(commandId, commandRoleId, COLON_STR));
|
||||
strLstAdd(result, cfgParseCommandRoleName(commandId, commandRoleId, COLON_STR));
|
||||
|
||||
// Move list to the prior context
|
||||
strLstMove(result, memContextPrior());
|
||||
|
@ -78,7 +78,7 @@ cfgLoadUpdateOption(void)
|
||||
OptionRequiredError,
|
||||
"%s command requires option: " CFGOPT_REPO "\n"
|
||||
"HINT: this command requires a specific repository to operate on",
|
||||
cfgCommandName(cfgCommand()));
|
||||
cfgCommandName());
|
||||
}
|
||||
|
||||
// If there is more than one repo configured
|
||||
@ -335,7 +335,7 @@ cfgLoadLogFile(void)
|
||||
// Construct log filename prefix
|
||||
String *logFile = strNewFmt(
|
||||
"%s/%s-%s", strZ(cfgOptionStr(cfgOptLogPath)),
|
||||
cfgOptionTest(cfgOptStanza) ? strZ(cfgOptionStr(cfgOptStanza)): "all", cfgCommandName(cfgCommand()));
|
||||
cfgOptionTest(cfgOptStanza) ? strZ(cfgOptionStr(cfgOptStanza)): "all", cfgCommandName());
|
||||
|
||||
// ??? Append async for local/remote archive async commands. It would be good to find a more generic way to do this in
|
||||
// case the async role is added to more commands.
|
||||
@ -347,7 +347,7 @@ cfgLoadLogFile(void)
|
||||
|
||||
// Add command role if it is not main
|
||||
if (cfgCommandRole() != cfgCmdRoleMain)
|
||||
strCatFmt(logFile, "-%s", strZ(cfgCommandRoleStr(cfgCommandRole())));
|
||||
strCatFmt(logFile, "-%s", strZ(cfgParseCommandRoleStr(cfgCommandRole())));
|
||||
|
||||
// Add process id if local or remote role
|
||||
if (cfgCommandRole() == cfgCmdRoleLocal || cfgCommandRole() == cfgCmdRoleRemote)
|
||||
|
@ -13,6 +13,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("archive-get"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeArchive),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -28,6 +30,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("archive-push"),
|
||||
PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeArchive),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -43,6 +48,11 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("backup"),
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeBackup),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -56,6 +66,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("check"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -68,6 +80,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("expire"),
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeBackup),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -79,6 +95,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("help"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -91,6 +109,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("info"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -103,6 +123,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("repo-create"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -115,6 +137,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("repo-get"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -128,6 +152,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("repo-ls"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -141,6 +167,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("repo-put"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -154,6 +182,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("repo-rm"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
@ -167,6 +197,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("restore"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -180,6 +213,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("stanza-create"),
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeAll),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -192,6 +229,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("stanza-delete"),
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeAll),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -204,6 +245,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("stanza-upgrade"),
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeAll),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -216,6 +261,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("start"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -227,6 +275,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("stop"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -238,6 +289,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("verify"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_FILE(true),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
@ -251,6 +305,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
PARSE_RULE_COMMAND
|
||||
(
|
||||
PARSE_RULE_COMMAND_NAME("version"),
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||
(
|
||||
|
@ -83,6 +83,11 @@ typedef struct ParseRuleCommand
|
||||
{
|
||||
const char *name; // Name
|
||||
unsigned int commandRoleValid:CFG_COMMAND_ROLE_TOTAL; // Valid for the command role?
|
||||
bool lockRequired:1; // Is an immediate lock required?
|
||||
bool lockRemoteRequired:1; // Is a lock required on the remote?
|
||||
unsigned int lockType:2; // Lock type required
|
||||
bool logFile:1; // Will the command log to a file?
|
||||
unsigned int logLevelDefault:4; // Default log level
|
||||
bool parameterAllowed:1; // Command-line parameters are allowed
|
||||
} ParseRuleCommand;
|
||||
|
||||
@ -99,6 +104,21 @@ typedef struct ParseRuleCommand
|
||||
#define PARSE_RULE_COMMAND_ROLE(commandRoleParam) \
|
||||
| (1 << commandRoleParam)
|
||||
|
||||
#define PARSE_RULE_COMMAND_LOCK_REQUIRED(lockRequiredParam) \
|
||||
.lockRequired = lockRequiredParam
|
||||
|
||||
#define PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(lockRemoteRequiredParam) \
|
||||
.lockRemoteRequired = lockRemoteRequiredParam
|
||||
|
||||
#define PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeParam) \
|
||||
.lockType = lockTypeParam
|
||||
|
||||
#define PARSE_RULE_COMMAND_LOG_FILE(logFileParam) \
|
||||
.logFile = logFileParam
|
||||
|
||||
#define PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDefaultParam) \
|
||||
.logLevelDefault = logLevelDefaultParam
|
||||
|
||||
#define PARSE_RULE_COMMAND_PARAMETER_ALLOWED(parameterAllowedParam) \
|
||||
.parameterAllowed = parameterAllowedParam
|
||||
|
||||
@ -390,6 +410,116 @@ parseOptionIdxValue(ParseOption *optionList, unsigned int optionId, unsigned int
|
||||
FUNCTION_TEST_RETURN(&optionList[optionId].indexList[optionKeyIdx]);
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Get command id by name
|
||||
***********************************************************************************************************************************/
|
||||
static ConfigCommand
|
||||
cfgParseCommandId(const char *const commandName)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(STRINGZ, commandName);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
ASSERT(commandName != NULL);
|
||||
|
||||
ConfigCommand commandId;
|
||||
|
||||
for (commandId = 0; commandId < CFG_COMMAND_TOTAL; commandId++)
|
||||
{
|
||||
if (strcmp(commandName, parseRuleCommand[commandId].name) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
FUNCTION_TEST_RETURN(commandId);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
const char *
|
||||
cfgParseCommandName(const ConfigCommand commandId)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandId);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
ASSERT(commandId < cfgCmdNone);
|
||||
|
||||
FUNCTION_TEST_RETURN(parseRuleCommand[commandId].name);
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Convert command role from String to enum and vice versa
|
||||
***********************************************************************************************************************************/
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_ASYNC_STR, CONFIG_COMMAND_ROLE_ASYNC);
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_LOCAL_STR, CONFIG_COMMAND_ROLE_LOCAL);
|
||||
STRING_STATIC(CONFIG_COMMAND_ROLE_REMOTE_STR, CONFIG_COMMAND_ROLE_REMOTE);
|
||||
|
||||
static ConfigCommandRole
|
||||
cfgParseCommandRoleEnum(const String *const commandRole)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(STRING, commandRole);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
if (commandRole == NULL)
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleMain);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_ASYNC_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleAsync);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_LOCAL_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleLocal);
|
||||
else if (strEq(commandRole, CONFIG_COMMAND_ROLE_REMOTE_STR))
|
||||
FUNCTION_TEST_RETURN(cfgCmdRoleRemote);
|
||||
|
||||
THROW_FMT(CommandInvalidError, "invalid command role '%s'", strZ(commandRole));
|
||||
}
|
||||
|
||||
const String *
|
||||
cfgParseCommandRoleStr(const ConfigCommandRole commandRole)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandRole);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
const String *result = NULL;
|
||||
|
||||
switch (commandRole)
|
||||
{
|
||||
case cfgCmdRoleMain:
|
||||
break;
|
||||
|
||||
case cfgCmdRoleAsync:
|
||||
result = CONFIG_COMMAND_ROLE_ASYNC_STR;
|
||||
break;
|
||||
|
||||
case cfgCmdRoleLocal:
|
||||
result = CONFIG_COMMAND_ROLE_LOCAL_STR;
|
||||
break;
|
||||
|
||||
case cfgCmdRoleRemote:
|
||||
result = CONFIG_COMMAND_ROLE_REMOTE_STR;
|
||||
break;
|
||||
}
|
||||
|
||||
FUNCTION_TEST_RETURN(result);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
String *
|
||||
cfgParseCommandRoleName(const ConfigCommand commandId, const ConfigCommandRole commandRoleId, const String *const separator)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(ENUM, commandId);
|
||||
FUNCTION_TEST_PARAM(ENUM, commandRoleId);
|
||||
FUNCTION_TEST_PARAM(STRING, separator);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
String *result = strNewZ(cfgParseCommandName(commandId));
|
||||
|
||||
if (commandRoleId != cfgCmdRoleMain)
|
||||
strCatFmt(result, "%s%s", strZ(separator), strZ(cfgParseCommandRoleStr(commandRoleId)));
|
||||
|
||||
FUNCTION_TEST_RETURN(result);
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Find an option by name in the option list
|
||||
***********************************************************************************************************************************/
|
||||
@ -1077,7 +1207,7 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
if (!commandSet)
|
||||
{
|
||||
// Try getting the command from the valid command list
|
||||
config->command = cfgCommandId(arg);
|
||||
config->command = cfgParseCommandId(arg);
|
||||
config->commandRole = cfgCmdRoleMain;
|
||||
|
||||
// If not successful then a command role may be appended
|
||||
@ -1088,11 +1218,11 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
if (strLstSize(commandPart) == 2)
|
||||
{
|
||||
// Get command id
|
||||
config->command = cfgCommandId(strZ(strLstGet(commandPart, 0)));
|
||||
config->command = cfgParseCommandId(strZ(strLstGet(commandPart, 0)));
|
||||
|
||||
// If command id is valid then get command role id
|
||||
if (config->command != cfgCmdNone)
|
||||
config->commandRole = cfgCommandRoleEnum(strLstGet(commandPart, 1));
|
||||
config->commandRole = cfgParseCommandRoleEnum(strLstGet(commandPart, 1));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1108,6 +1238,13 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
config->help = true;
|
||||
else
|
||||
commandSet = true;
|
||||
|
||||
// Set command options
|
||||
config->lockRequired = parseRuleCommand[config->command].lockRequired;
|
||||
config->lockRemoteRequired = parseRuleCommand[config->command].lockRemoteRequired;
|
||||
config->lockType = (LockType)parseRuleCommand[config->command].lockType;
|
||||
config->logFile = parseRuleCommand[config->command].logFile;
|
||||
config->logLevelDefault = (LogLevel)parseRuleCommand[config->command].logLevelDefault;
|
||||
}
|
||||
// Additional arguments are command arguments
|
||||
else
|
||||
@ -1253,11 +1390,11 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
|
||||
if (stanza != NULL)
|
||||
{
|
||||
strLstAdd(sectionList, strNewFmt("%s:%s", strZ(stanza), cfgCommandName(config->command)));
|
||||
strLstAdd(sectionList, strNewFmt("%s:%s", strZ(stanza), cfgParseCommandName(config->command)));
|
||||
strLstAdd(sectionList, stanza);
|
||||
}
|
||||
|
||||
strLstAdd(sectionList, strNewFmt(CFGDEF_SECTION_GLOBAL ":%s", cfgCommandName(config->command)));
|
||||
strLstAdd(sectionList, strNewFmt(CFGDEF_SECTION_GLOBAL ":%s", cfgParseCommandName(config->command)));
|
||||
strLstAddZ(sectionList, CFGDEF_SECTION_GLOBAL);
|
||||
|
||||
// Loop through sections to search for options
|
||||
@ -1415,7 +1552,7 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
{
|
||||
THROW_FMT(
|
||||
OptionInvalidError, "option '%s' not valid for command '%s'", cfgParseOptionName(optionId),
|
||||
cfgCommandName(config->command));
|
||||
cfgParseCommandName(config->command));
|
||||
}
|
||||
|
||||
// Continue to the next option
|
||||
@ -1871,7 +2008,7 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
||||
hint = "\nHINT: does this stanza exist?";
|
||||
|
||||
THROW_FMT(
|
||||
OptionRequiredError, "%s command requires option: %s%s", cfgCommandName(config->command),
|
||||
OptionRequiredError, "%s command requires option: %s%s", cfgParseCommandName(config->command),
|
||||
cfgParseOptionKeyIdxName(optionId, optionKeyIdx), hint);
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,16 @@ Functions
|
||||
// Parse the command-line arguments and config file to produce final config data
|
||||
void configParse(const Storage *storage, unsigned int argListSize, const char *argList[], bool resetLogLevel);
|
||||
|
||||
// Get command name by id
|
||||
const char *cfgParseCommandName(ConfigCommand commandId);
|
||||
|
||||
// Get command/role name with custom separator
|
||||
String *cfgParseCommandRoleName(
|
||||
const ConfigCommand commandId, const ConfigCommandRole commandRoleId, const String *separator);
|
||||
|
||||
// Convert command role enum to String
|
||||
const String *cfgParseCommandRoleStr(ConfigCommandRole commandRole);
|
||||
|
||||
// Parse option name and return option info
|
||||
typedef struct CfgParseOptionParam
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ dbGetIdx(unsigned int pgIdx)
|
||||
|
||||
MEM_CONTEXT_TEMP_BEGIN()
|
||||
{
|
||||
const String *applicationName = strNewFmt(PROJECT_NAME " [%s]", cfgCommandName(cfgCommand()));
|
||||
const String *applicationName = strNewFmt(PROJECT_NAME " [%s]", cfgCommandName());
|
||||
|
||||
if (pgIsLocal(pgIdx))
|
||||
{
|
||||
|
@ -94,7 +94,7 @@ repoIsLocalVerifyIdx(unsigned int repoIdx)
|
||||
FUNCTION_TEST_VOID();
|
||||
|
||||
if (!repoIsLocal(repoIdx))
|
||||
THROW_FMT(HostInvalidError, "%s command must be run on the repository host", cfgCommandName(cfgCommand()));
|
||||
THROW_FMT(HostInvalidError, "%s command must be run on the repository host", cfgCommandName());
|
||||
|
||||
FUNCTION_TEST_RETURN_VOID();
|
||||
}
|
||||
@ -117,7 +117,7 @@ pgIsLocalVerify(void)
|
||||
FUNCTION_TEST_VOID();
|
||||
|
||||
if (!pgIsLocal(cfgOptionGroupIdxDefault(cfgOptGrpPg)))
|
||||
THROW_FMT(HostInvalidError, "%s command must be run on the " PG_NAME " host", cfgCommandName(cfgCommand()));
|
||||
THROW_FMT(HostInvalidError, "%s command must be run on the " PG_NAME " host", cfgCommandName());
|
||||
|
||||
FUNCTION_TEST_RETURN_VOID();
|
||||
}
|
||||
|
@ -1163,10 +1163,6 @@ src/common/wait.h:
|
||||
class: core
|
||||
type: c/h
|
||||
|
||||
src/config/config.auto.c:
|
||||
class: core/auto
|
||||
type: c
|
||||
|
||||
src/config/config.auto.h:
|
||||
class: core/auto
|
||||
type: c/h
|
||||
|
@ -50,7 +50,7 @@ hrnCfgLoad(ConfigCommand commandId, const StringList *argListParam, const HrnCfg
|
||||
|
||||
// Insert the command so it does not interfere with parameters
|
||||
if (commandId != cfgCmdNone)
|
||||
strLstInsert(argList, 0, cfgCommandRoleNameParam(commandId, param.role, COLON_STR));
|
||||
strLstInsert(argList, 0, cfgParseCommandRoleName(commandId, param.role, COLON_STR));
|
||||
|
||||
// Insert the project exe
|
||||
strLstInsert(argList, 0, param.exeBogus ? STRDEF("pgbackrest-bogus") : STRDEF(testProjectExe()));
|
||||
|
@ -91,7 +91,7 @@ Macros for defining groups of functions that implement various queries and comma
|
||||
|
||||
#define HRNPQ_MACRO_SET_APPLICATION_NAME(sessionParam) \
|
||||
{.session = sessionParam, .function = HRNPQ_SENDQUERY, \
|
||||
.param = strZ(strNewFmt("[\"set application_name = '" PROJECT_NAME " [%s]'\"]", cfgCommandName(cfgCommand()))), \
|
||||
.param = strZ(strNewFmt("[\"set application_name = '" PROJECT_NAME " [%s]'\"]", cfgCommandName())), \
|
||||
.resultInt = 1}, \
|
||||
{.session = sessionParam, .function = HRNPQ_CONSUMEINPUT}, \
|
||||
{.session = sessionParam, .function = HRNPQ_ISBUSY}, \
|
||||
|
@ -485,68 +485,6 @@ testRun(void)
|
||||
"\n"
|
||||
"#endif\n");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("check config.auto.c");
|
||||
|
||||
TEST_STORAGE_GET(
|
||||
storageTest,
|
||||
"src/config/config.auto.c",
|
||||
COMMENT_BLOCK_BEGIN "\n"
|
||||
"Command and Option Configuration\n"
|
||||
"\n"
|
||||
"Automatically generated by 'make build-config' -- do not modify directly.\n"
|
||||
COMMENT_BLOCK_END "\n"
|
||||
"\n"
|
||||
COMMENT_BLOCK_BEGIN "\n"
|
||||
"Command data\n"
|
||||
COMMENT_BLOCK_END "\n"
|
||||
"static const ConfigCommandData configCommandData[CFG_COMMAND_TOTAL] = CONFIG_COMMAND_LIST\n"
|
||||
"(\n"
|
||||
" CONFIG_COMMAND\n"
|
||||
" (\n"
|
||||
" CONFIG_COMMAND_NAME(CFGCMD_ARCHIVE_GET)\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND_LOG_FILE(false)\n"
|
||||
" CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug)\n"
|
||||
" CONFIG_COMMAND_LOCK_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_TYPE(lockTypeArchive)\n"
|
||||
" )\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND\n"
|
||||
" (\n"
|
||||
" CONFIG_COMMAND_NAME(CFGCMD_BACKUP)\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND_LOG_FILE(true)\n"
|
||||
" CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)\n"
|
||||
" CONFIG_COMMAND_LOCK_REQUIRED(true)\n"
|
||||
" CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(true)\n"
|
||||
" CONFIG_COMMAND_LOCK_TYPE(lockTypeBackup)\n"
|
||||
" )\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND\n"
|
||||
" (\n"
|
||||
" CONFIG_COMMAND_NAME(CFGCMD_HELP)\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND_LOG_FILE(true)\n"
|
||||
" CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)\n"
|
||||
" CONFIG_COMMAND_LOCK_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)\n"
|
||||
" )\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND\n"
|
||||
" (\n"
|
||||
" CONFIG_COMMAND_NAME(CFGCMD_VERSION)\n"
|
||||
"\n"
|
||||
" CONFIG_COMMAND_LOG_FILE(true)\n"
|
||||
" CONFIG_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo)\n"
|
||||
" CONFIG_COMMAND_LOCK_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_REMOTE_REQUIRED(false)\n"
|
||||
" CONFIG_COMMAND_LOCK_TYPE(lockTypeNone)\n"
|
||||
" )\n"
|
||||
")\n");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("check parse.auto.c");
|
||||
|
||||
@ -568,6 +506,8 @@ testRun(void)
|
||||
" PARSE_RULE_COMMAND\n"
|
||||
" (\n"
|
||||
" PARSE_RULE_COMMAND_NAME(\"archive-get\"),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeArchive),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),\n"
|
||||
" PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),\n"
|
||||
"\n"
|
||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||
@ -583,6 +523,11 @@ testRun(void)
|
||||
" PARSE_RULE_COMMAND\n"
|
||||
" (\n"
|
||||
" PARSE_RULE_COMMAND_NAME(\"backup\"),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_REQUIRED(true),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(true),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeBackup),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_FILE(true),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),\n"
|
||||
"\n"
|
||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||
" (\n"
|
||||
@ -596,6 +541,9 @@ testRun(void)
|
||||
" PARSE_RULE_COMMAND\n"
|
||||
" (\n"
|
||||
" PARSE_RULE_COMMAND_NAME(\"help\"),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_FILE(true),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),\n"
|
||||
"\n"
|
||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||
" (\n"
|
||||
@ -607,6 +555,9 @@ testRun(void)
|
||||
" PARSE_RULE_COMMAND\n"
|
||||
" (\n"
|
||||
" PARSE_RULE_COMMAND_NAME(\"version\"),\n"
|
||||
" PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_FILE(true),\n"
|
||||
" PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),\n"
|
||||
"\n"
|
||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||
" (\n"
|
||||
|
@ -162,9 +162,9 @@ testRun(void)
|
||||
strZ(strNewFmt("%s/global-backup.confsave", strZ(configIncludePath))));
|
||||
|
||||
// Set up defaults
|
||||
String *backupCmdDefConfigValue = strNewZ(cfgParseOptionDefault(cfgCommandId(TEST_COMMAND_BACKUP), cfgOptConfig));
|
||||
String *backupCmdDefConfigValue = strNewZ(cfgParseOptionDefault(cfgParseCommandId(TEST_COMMAND_BACKUP), cfgOptConfig));
|
||||
String *backupCmdDefConfigInclPathValue = strNewZ(
|
||||
cfgParseOptionDefault(cfgCommandId(TEST_COMMAND_BACKUP), cfgOptConfigIncludePath));
|
||||
cfgParseOptionDefault(cfgParseCommandId(TEST_COMMAND_BACKUP), cfgOptConfigIncludePath));
|
||||
const String *oldConfigDefault = STRDEF(TEST_PATH PGBACKREST_CONFIG_ORIG_PATH_FILE);
|
||||
|
||||
// Create the option structure and initialize with 0
|
||||
@ -852,7 +852,7 @@ testRun(void)
|
||||
hrnLogLevelStdErrSet(logLevelError);
|
||||
TEST_RESULT_VOID(configParse(storageTest, strLstSize(argList), strLstPtr(argList), true), "load remote config");
|
||||
TEST_RESULT_INT(cfgCommandRole(), cfgCmdRoleRemote, " command role is remote");
|
||||
TEST_RESULT_STR_Z(cfgCommandRoleStr(cfgCmdRoleRemote), "remote", " remote role name");
|
||||
TEST_RESULT_STR_Z(cfgParseCommandRoleStr(cfgCmdRoleRemote), "remote", " remote role name");
|
||||
TEST_RESULT_INT(hrnLogLevelStdOut(), logLevelError, "console logging is error");
|
||||
TEST_RESULT_INT(hrnLogLevelStdErr(), logLevelError, "stderr logging is error");
|
||||
|
||||
@ -1168,6 +1168,7 @@ testRun(void)
|
||||
TEST_RESULT_VOID(configParse(storageTest, strLstSize(argList), strLstPtr(argList), false), "help command");
|
||||
TEST_RESULT_BOOL(cfgCommandHelp(), true, " help is set");
|
||||
TEST_RESULT_INT(cfgCommand(), cfgCmdHelp, " command is help");
|
||||
TEST_RESULT_Z(cfgCommandName(), "help", " command name is help");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
argList = strLstNew();
|
||||
@ -1227,11 +1228,11 @@ testRun(void)
|
||||
TEST_RESULT_BOOL(cfgLogFile(), true, " backup command does file logging");
|
||||
TEST_RESULT_BOOL(cfgLockRemoteRequired(), true, " backup command requires remote lock");
|
||||
TEST_RESULT_STRLST_Z(cfgCommandParam(), NULL, " check command arguments");
|
||||
TEST_RESULT_UINT(cfgCommandRoleEnum(NULL), cfgCmdRoleMain, "command role main enum");
|
||||
TEST_ERROR(cfgCommandRoleEnum(STRDEF("bogus")), CommandInvalidError, "invalid command role 'bogus'");
|
||||
TEST_RESULT_UINT(cfgParseCommandRoleEnum(NULL), cfgCmdRoleMain, "command role main enum");
|
||||
TEST_ERROR(cfgParseCommandRoleEnum(STRDEF("bogus")), CommandInvalidError, "invalid command role 'bogus'");
|
||||
TEST_RESULT_INT(cfgCommandRole(), cfgCmdRoleMain, " command role is main");
|
||||
TEST_RESULT_STR_Z(cfgCommandRoleName(), "backup", " command/role name is backup");
|
||||
TEST_RESULT_STR_Z(cfgCommandRoleStr(cfgCmdRoleMain), NULL, " main role name is NULL");
|
||||
TEST_RESULT_STR_Z(cfgParseCommandRoleStr(cfgCmdRoleMain), NULL, " main role name is NULL");
|
||||
|
||||
TEST_RESULT_STR_Z(cfgExe(), TEST_BACKREST_EXE, " exe is set");
|
||||
|
||||
@ -1446,7 +1447,7 @@ testRun(void)
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("set command to expire");
|
||||
|
||||
TEST_RESULT_VOID(cfgCommandSet(cfgCmdExpire, cfgCommandRoleEnum(STRDEF("async"))), "set command");
|
||||
TEST_RESULT_VOID(cfgCommandSet(cfgCmdExpire, cfgParseCommandRoleEnum(STRDEF("async"))), "set command");
|
||||
TEST_RESULT_STR_Z(cfgCommandRoleName(), "expire:async", "command/role name is expire:async");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user