mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-04-19 11:52:32 +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
|
## 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:
|
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">
|
<section id="option">
|
||||||
<title>Adding an Option</title>
|
<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>
|
<p>To add an option, two files need be to be modified:</p>
|
||||||
<list>
|
<list>
|
||||||
|
@ -216,7 +216,7 @@ SRCS_BUILD_CONFIG = \
|
|||||||
|
|
||||||
OBJS_BUILD_CONFIG = $(patsubst %.c,$(BUILDDIR)/%.o,$(SRCS_BUILD) $(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)
|
$(CC) -o build-config $(OBJS_BUILD_CONFIG) $(LDFLAGS) $(LIBS) $(LIBS_BUILD)
|
||||||
./build-config $(VPATH)
|
./build-config $(VPATH)
|
||||||
|
|
||||||
|
@ -276,57 +276,6 @@ bldCfgRenderConfigAutoH(const Storage *const storageRepo, const BldCfg bldCfg)
|
|||||||
bldPut(storageRepo, "src/config/config.auto.h", BUFSTR(config));
|
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
|
Render parse.auto.c
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
@ -487,6 +436,19 @@ bldCfgRenderParseAutoC(const Storage *const storageRepo, const BldCfg bldCfg)
|
|||||||
" PARSE_RULE_COMMAND_NAME(\"%s\"),\n",
|
" PARSE_RULE_COMMAND_NAME(\"%s\"),\n",
|
||||||
strZ(cmd->name));
|
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)
|
if (cmd->parameterAllowed)
|
||||||
strCatZ(config, " PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),\n");
|
strCatZ(config, " PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),\n");
|
||||||
|
|
||||||
@ -887,6 +849,5 @@ void
|
|||||||
bldCfgRender(const Storage *const storageRepo, const BldCfg bldCfg)
|
bldCfgRender(const Storage *const storageRepo, const BldCfg bldCfg)
|
||||||
{
|
{
|
||||||
bldCfgRenderConfigAutoH(storageRepo, bldCfg);
|
bldCfgRenderConfigAutoH(storageRepo, bldCfg);
|
||||||
bldCfgRenderConfigAutoC(storageRepo, bldCfg);
|
|
||||||
bldCfgRenderParseAutoC(storageRepo, bldCfg);
|
bldCfgRenderParseAutoC(storageRepo, bldCfg);
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,7 @@ cmdArchiveGet(void)
|
|||||||
|
|
||||||
// Destination is wherever we were told to move the WAL segment
|
// Destination is wherever we were told to move the WAL segment
|
||||||
const String *walDestination =
|
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
|
// Async get can only be performed on WAL segments, history or other files must use synchronous mode
|
||||||
if (cfgOptionBool(cfgOptArchiveAsync) && walIsSegment(walSegment))
|
if (cfgOptionBool(cfgOptArchiveAsync) && walIsSegment(walSegment))
|
||||||
|
@ -321,7 +321,7 @@ cmdArchivePush(void)
|
|||||||
lockStopTest();
|
lockStopTest();
|
||||||
|
|
||||||
// Get the segment name
|
// 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);
|
String *archiveFile = strBase(walFile);
|
||||||
|
|
||||||
if (cfgOptionBool(cfgOptArchiveAsync))
|
if (cfgOptionBool(cfgOptArchiveAsync))
|
||||||
|
@ -283,8 +283,8 @@ helpRender(void)
|
|||||||
if (commandData[commandId].internal)
|
if (commandData[commandId].internal)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (strlen(cfgCommandName(commandId)) > commandSizeMax)
|
if (strlen(cfgParseCommandName(commandId)) > commandSizeMax)
|
||||||
commandSizeMax = strlen(cfgCommandName(commandId));
|
commandSizeMax = strlen(cfgParseCommandName(commandId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output help for each command
|
// Output help for each command
|
||||||
@ -294,8 +294,8 @@ helpRender(void)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
strCatFmt(
|
strCatFmt(
|
||||||
result, " %s%*s%s\n", cfgCommandName(commandId),
|
result, " %s%*s%s\n", cfgParseCommandName(commandId),
|
||||||
(int)(commandSizeMax - strlen(cfgCommandName(commandId)) + 2), "",
|
(int)(commandSizeMax - strlen(cfgParseCommandName(commandId)) + 2), "",
|
||||||
strZ(helpRenderText(commandData[commandId].summary, false, commandSizeMax + 6, false, CONSOLE_WIDTH)));
|
strZ(helpRenderText(commandData[commandId].summary, false, commandSizeMax + 6, false, CONSOLE_WIDTH)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ helpRender(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ConfigCommand commandId = cfgCommand();
|
ConfigCommand commandId = cfgCommand();
|
||||||
const char *commandName = cfgCommandName(commandId);
|
const char *commandName = cfgParseCommandName(commandId);
|
||||||
|
|
||||||
// Unpack option data
|
// Unpack option data
|
||||||
HelpOptionData *optionData = memNew(sizeof(HelpOptionData) * CFG_OPTION_TOTAL);
|
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/config.intern.h"
|
||||||
#include "config/parse.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
|
Data for the currently loaded configuration
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
@ -118,25 +79,6 @@ cfgCommandHelp(void)
|
|||||||
FUNCTION_TEST_RETURN(configLocal->help);
|
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 *
|
VariantList *
|
||||||
cfgCommandJobRetry(void)
|
cfgCommandJobRetry(void)
|
||||||
@ -162,32 +104,14 @@ cfgCommandJobRetry(void)
|
|||||||
|
|
||||||
/**********************************************************************************************************************************/
|
/**********************************************************************************************************************************/
|
||||||
const char *
|
const char *
|
||||||
cfgCommandName(ConfigCommand commandId)
|
cfgCommandName(void)
|
||||||
{
|
{
|
||||||
FUNCTION_TEST_BEGIN();
|
FUNCTION_TEST_VOID();
|
||||||
FUNCTION_TEST_PARAM(ENUM, commandId);
|
|
||||||
FUNCTION_TEST_END();
|
|
||||||
|
|
||||||
ASSERT(commandId < cfgCmdNone);
|
ASSERT(configLocal != NULL);
|
||||||
|
ASSERT(configLocal->command < cfgCmdNone);
|
||||||
|
|
||||||
FUNCTION_TEST_RETURN(configCommandData[commandId].name);
|
FUNCTION_TEST_RETURN(cfgParseCommandName(configLocal->command));
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String *
|
String *
|
||||||
@ -195,7 +119,7 @@ cfgCommandRoleName(void)
|
|||||||
{
|
{
|
||||||
FUNCTION_TEST_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);
|
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 *
|
const String *
|
||||||
cfgExe(void)
|
cfgExe(void)
|
||||||
@ -293,7 +163,7 @@ cfgLockRequired(void)
|
|||||||
// Local roles never take a lock and the remote role has special logic for locking
|
// Local roles never take a lock and the remote role has special logic for locking
|
||||||
FUNCTION_TEST_RETURN(
|
FUNCTION_TEST_RETURN(
|
||||||
// If a lock is required for the command and the role is main
|
// 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
|
// Or any command when the role is async
|
||||||
cfgCommandRole() == cfgCmdRoleAsync);
|
cfgCommandRole() == cfgCmdRoleAsync);
|
||||||
}
|
}
|
||||||
@ -304,7 +174,10 @@ cfgLockRemoteRequired(void)
|
|||||||
{
|
{
|
||||||
FUNCTION_TEST_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 != NULL);
|
||||||
ASSERT(configLocal->command != cfgCmdNone);
|
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(
|
FUNCTION_TEST_RETURN(
|
||||||
// If the command always logs to a file
|
// 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
|
// Or log-level-file was explicitly set as a param/env var
|
||||||
(cfgOptionValid(cfgOptLogLevelFile) && cfgOptionSource(cfgOptLogLevelFile) == cfgSourceParam) ||
|
(cfgOptionValid(cfgOptLogLevelFile) && cfgOptionSource(cfgOptLogLevelFile) == cfgSourceParam) ||
|
||||||
// Or the role is async
|
// Or the role is async
|
||||||
@ -346,7 +219,7 @@ cfgLogLevelDefault(void)
|
|||||||
ASSERT(configLocal != NULL);
|
ASSERT(configLocal != NULL);
|
||||||
ASSERT(configLocal->command != cfgCmdNone);
|
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)
|
// Current command role (async, local, remote)
|
||||||
ConfigCommandRole cfgCommandRole(void);
|
ConfigCommandRole cfgCommandRole(void);
|
||||||
|
|
||||||
// Get command name by id
|
// Get command name
|
||||||
const char *cfgCommandName(ConfigCommand commandId);
|
const char *cfgCommandName(void);
|
||||||
|
|
||||||
// Get command:role name
|
// Get command:role name
|
||||||
String *cfgCommandRoleName(void);
|
String *cfgCommandRoleName(void);
|
||||||
@ -165,18 +165,8 @@ config/load.c.
|
|||||||
// Was help requested?
|
// Was help requested?
|
||||||
bool cfgCommandHelp(void);
|
bool cfgCommandHelp(void);
|
||||||
|
|
||||||
// Get command id by name
|
|
||||||
ConfigCommand cfgCommandId(const char *commandName);
|
|
||||||
|
|
||||||
void cfgCommandSet(ConfigCommand commandId, ConfigCommandRole commandRoleId);
|
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
|
// pgBackRest exe
|
||||||
const String *cfgExe(void);
|
const String *cfgExe(void);
|
||||||
|
|
||||||
|
@ -34,12 +34,17 @@ typedef struct Config
|
|||||||
{
|
{
|
||||||
MemContext *memContext; // Mem context for config data
|
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
|
ConfigCommand command; // Current command
|
||||||
ConfigCommandRole commandRole; // Current command role
|
ConfigCommandRole commandRole; // Current command role
|
||||||
|
|
||||||
String *exe; // Location of the executable
|
String *exe; // Location of the executable
|
||||||
bool help; // Was help requested for the command?
|
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)
|
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
|
// 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
|
// Add the command
|
||||||
strLstAdd(result, cfgCommandRoleNameParam(commandId, commandRoleId, COLON_STR));
|
strLstAdd(result, cfgParseCommandRoleName(commandId, commandRoleId, COLON_STR));
|
||||||
|
|
||||||
// Move list to the prior context
|
// Move list to the prior context
|
||||||
strLstMove(result, memContextPrior());
|
strLstMove(result, memContextPrior());
|
||||||
|
@ -78,7 +78,7 @@ cfgLoadUpdateOption(void)
|
|||||||
OptionRequiredError,
|
OptionRequiredError,
|
||||||
"%s command requires option: " CFGOPT_REPO "\n"
|
"%s command requires option: " CFGOPT_REPO "\n"
|
||||||
"HINT: this command requires a specific repository to operate on",
|
"HINT: this command requires a specific repository to operate on",
|
||||||
cfgCommandName(cfgCommand()));
|
cfgCommandName());
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there is more than one repo configured
|
// If there is more than one repo configured
|
||||||
@ -335,7 +335,7 @@ cfgLoadLogFile(void)
|
|||||||
// Construct log filename prefix
|
// Construct log filename prefix
|
||||||
String *logFile = strNewFmt(
|
String *logFile = strNewFmt(
|
||||||
"%s/%s-%s", strZ(cfgOptionStr(cfgOptLogPath)),
|
"%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
|
// ??? 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.
|
// case the async role is added to more commands.
|
||||||
@ -347,7 +347,7 @@ cfgLoadLogFile(void)
|
|||||||
|
|
||||||
// Add command role if it is not main
|
// Add command role if it is not main
|
||||||
if (cfgCommandRole() != cfgCmdRoleMain)
|
if (cfgCommandRole() != cfgCmdRoleMain)
|
||||||
strCatFmt(logFile, "-%s", strZ(cfgCommandRoleStr(cfgCommandRole())));
|
strCatFmt(logFile, "-%s", strZ(cfgParseCommandRoleStr(cfgCommandRole())));
|
||||||
|
|
||||||
// Add process id if local or remote role
|
// Add process id if local or remote role
|
||||||
if (cfgCommandRole() == cfgCmdRoleLocal || cfgCommandRole() == cfgCmdRoleRemote)
|
if (cfgCommandRole() == cfgCmdRoleLocal || cfgCommandRole() == cfgCmdRoleRemote)
|
||||||
|
@ -13,6 +13,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("archive-get"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -28,6 +30,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("archive-push"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -43,6 +48,11 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("backup"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -56,6 +66,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("check"),
|
PARSE_RULE_COMMAND_NAME("check"),
|
||||||
|
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||||
|
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -68,6 +80,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("expire"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -79,6 +95,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("help"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -91,6 +109,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("info"),
|
PARSE_RULE_COMMAND_NAME("info"),
|
||||||
|
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||||
|
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -103,6 +123,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("repo-create"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -115,6 +137,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("repo-get"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -128,6 +152,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("repo-ls"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -141,6 +167,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("repo-put"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -154,6 +182,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("repo-rm"),
|
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_PARAMETER_ALLOWED(true),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
@ -167,6 +197,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("restore"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -180,6 +213,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("stanza-create"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -192,6 +229,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("stanza-delete"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -204,6 +245,10 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("stanza-upgrade"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -216,6 +261,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("start"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -227,6 +275,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("stop"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -238,6 +289,9 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("verify"),
|
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
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
@ -251,6 +305,8 @@ static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
|||||||
PARSE_RULE_COMMAND
|
PARSE_RULE_COMMAND
|
||||||
(
|
(
|
||||||
PARSE_RULE_COMMAND_NAME("version"),
|
PARSE_RULE_COMMAND_NAME("version"),
|
||||||
|
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeNone),
|
||||||
|
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelDebug),
|
||||||
|
|
||||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
PARSE_RULE_COMMAND_ROLE_VALID_LIST
|
||||||
(
|
(
|
||||||
|
@ -83,6 +83,11 @@ typedef struct ParseRuleCommand
|
|||||||
{
|
{
|
||||||
const char *name; // Name
|
const char *name; // Name
|
||||||
unsigned int commandRoleValid:CFG_COMMAND_ROLE_TOTAL; // Valid for the command role?
|
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
|
bool parameterAllowed:1; // Command-line parameters are allowed
|
||||||
} ParseRuleCommand;
|
} ParseRuleCommand;
|
||||||
|
|
||||||
@ -99,6 +104,21 @@ typedef struct ParseRuleCommand
|
|||||||
#define PARSE_RULE_COMMAND_ROLE(commandRoleParam) \
|
#define PARSE_RULE_COMMAND_ROLE(commandRoleParam) \
|
||||||
| (1 << 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) \
|
#define PARSE_RULE_COMMAND_PARAMETER_ALLOWED(parameterAllowedParam) \
|
||||||
.parameterAllowed = parameterAllowedParam
|
.parameterAllowed = parameterAllowedParam
|
||||||
|
|
||||||
@ -390,6 +410,116 @@ parseOptionIdxValue(ParseOption *optionList, unsigned int optionId, unsigned int
|
|||||||
FUNCTION_TEST_RETURN(&optionList[optionId].indexList[optionKeyIdx]);
|
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
|
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)
|
if (!commandSet)
|
||||||
{
|
{
|
||||||
// Try getting the command from the valid command list
|
// Try getting the command from the valid command list
|
||||||
config->command = cfgCommandId(arg);
|
config->command = cfgParseCommandId(arg);
|
||||||
config->commandRole = cfgCmdRoleMain;
|
config->commandRole = cfgCmdRoleMain;
|
||||||
|
|
||||||
// If not successful then a command role may be appended
|
// 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)
|
if (strLstSize(commandPart) == 2)
|
||||||
{
|
{
|
||||||
// Get command id
|
// 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 command id is valid then get command role id
|
||||||
if (config->command != cfgCmdNone)
|
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;
|
config->help = true;
|
||||||
else
|
else
|
||||||
commandSet = true;
|
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
|
// Additional arguments are command arguments
|
||||||
else
|
else
|
||||||
@ -1253,11 +1390,11 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
|||||||
|
|
||||||
if (stanza != NULL)
|
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, 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);
|
strLstAddZ(sectionList, CFGDEF_SECTION_GLOBAL);
|
||||||
|
|
||||||
// Loop through sections to search for options
|
// Loop through sections to search for options
|
||||||
@ -1415,7 +1552,7 @@ configParse(const Storage *storage, unsigned int argListSize, const char *argLis
|
|||||||
{
|
{
|
||||||
THROW_FMT(
|
THROW_FMT(
|
||||||
OptionInvalidError, "option '%s' not valid for command '%s'", cfgParseOptionName(optionId),
|
OptionInvalidError, "option '%s' not valid for command '%s'", cfgParseOptionName(optionId),
|
||||||
cfgCommandName(config->command));
|
cfgParseCommandName(config->command));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Continue to the next option
|
// 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?";
|
hint = "\nHINT: does this stanza exist?";
|
||||||
|
|
||||||
THROW_FMT(
|
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);
|
cfgParseOptionKeyIdxName(optionId, optionKeyIdx), hint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,16 @@ Functions
|
|||||||
// Parse the command-line arguments and config file to produce final config data
|
// 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);
|
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
|
// Parse option name and return option info
|
||||||
typedef struct CfgParseOptionParam
|
typedef struct CfgParseOptionParam
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@ dbGetIdx(unsigned int pgIdx)
|
|||||||
|
|
||||||
MEM_CONTEXT_TEMP_BEGIN()
|
MEM_CONTEXT_TEMP_BEGIN()
|
||||||
{
|
{
|
||||||
const String *applicationName = strNewFmt(PROJECT_NAME " [%s]", cfgCommandName(cfgCommand()));
|
const String *applicationName = strNewFmt(PROJECT_NAME " [%s]", cfgCommandName());
|
||||||
|
|
||||||
if (pgIsLocal(pgIdx))
|
if (pgIsLocal(pgIdx))
|
||||||
{
|
{
|
||||||
|
@ -94,7 +94,7 @@ repoIsLocalVerifyIdx(unsigned int repoIdx)
|
|||||||
FUNCTION_TEST_VOID();
|
FUNCTION_TEST_VOID();
|
||||||
|
|
||||||
if (!repoIsLocal(repoIdx))
|
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();
|
FUNCTION_TEST_RETURN_VOID();
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ pgIsLocalVerify(void)
|
|||||||
FUNCTION_TEST_VOID();
|
FUNCTION_TEST_VOID();
|
||||||
|
|
||||||
if (!pgIsLocal(cfgOptionGroupIdxDefault(cfgOptGrpPg)))
|
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();
|
FUNCTION_TEST_RETURN_VOID();
|
||||||
}
|
}
|
||||||
|
@ -1163,10 +1163,6 @@ src/common/wait.h:
|
|||||||
class: core
|
class: core
|
||||||
type: c/h
|
type: c/h
|
||||||
|
|
||||||
src/config/config.auto.c:
|
|
||||||
class: core/auto
|
|
||||||
type: c
|
|
||||||
|
|
||||||
src/config/config.auto.h:
|
src/config/config.auto.h:
|
||||||
class: core/auto
|
class: core/auto
|
||||||
type: c/h
|
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
|
// Insert the command so it does not interfere with parameters
|
||||||
if (commandId != cfgCmdNone)
|
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
|
// Insert the project exe
|
||||||
strLstInsert(argList, 0, param.exeBogus ? STRDEF("pgbackrest-bogus") : STRDEF(testProjectExe()));
|
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) \
|
#define HRNPQ_MACRO_SET_APPLICATION_NAME(sessionParam) \
|
||||||
{.session = sessionParam, .function = HRNPQ_SENDQUERY, \
|
{.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}, \
|
.resultInt = 1}, \
|
||||||
{.session = sessionParam, .function = HRNPQ_CONSUMEINPUT}, \
|
{.session = sessionParam, .function = HRNPQ_CONSUMEINPUT}, \
|
||||||
{.session = sessionParam, .function = HRNPQ_ISBUSY}, \
|
{.session = sessionParam, .function = HRNPQ_ISBUSY}, \
|
||||||
|
@ -485,68 +485,6 @@ testRun(void)
|
|||||||
"\n"
|
"\n"
|
||||||
"#endif\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");
|
TEST_TITLE("check parse.auto.c");
|
||||||
|
|
||||||
@ -568,6 +506,8 @@ testRun(void)
|
|||||||
" PARSE_RULE_COMMAND\n"
|
" PARSE_RULE_COMMAND\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
" PARSE_RULE_COMMAND_NAME(\"archive-get\"),\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"
|
" PARSE_RULE_COMMAND_PARAMETER_ALLOWED(true),\n"
|
||||||
"\n"
|
"\n"
|
||||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||||
@ -583,6 +523,11 @@ testRun(void)
|
|||||||
" PARSE_RULE_COMMAND\n"
|
" PARSE_RULE_COMMAND\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
" PARSE_RULE_COMMAND_NAME(\"backup\"),\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"
|
"\n"
|
||||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
@ -596,6 +541,9 @@ testRun(void)
|
|||||||
" PARSE_RULE_COMMAND\n"
|
" PARSE_RULE_COMMAND\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
" PARSE_RULE_COMMAND_NAME(\"help\"),\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"
|
"\n"
|
||||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
@ -607,6 +555,9 @@ testRun(void)
|
|||||||
" PARSE_RULE_COMMAND\n"
|
" PARSE_RULE_COMMAND\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
" PARSE_RULE_COMMAND_NAME(\"version\"),\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"
|
"\n"
|
||||||
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
" PARSE_RULE_COMMAND_ROLE_VALID_LIST\n"
|
||||||
" (\n"
|
" (\n"
|
||||||
|
@ -162,9 +162,9 @@ testRun(void)
|
|||||||
strZ(strNewFmt("%s/global-backup.confsave", strZ(configIncludePath))));
|
strZ(strNewFmt("%s/global-backup.confsave", strZ(configIncludePath))));
|
||||||
|
|
||||||
// Set up defaults
|
// Set up defaults
|
||||||
String *backupCmdDefConfigValue = strNewZ(cfgParseOptionDefault(cfgCommandId(TEST_COMMAND_BACKUP), cfgOptConfig));
|
String *backupCmdDefConfigValue = strNewZ(cfgParseOptionDefault(cfgParseCommandId(TEST_COMMAND_BACKUP), cfgOptConfig));
|
||||||
String *backupCmdDefConfigInclPathValue = strNewZ(
|
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);
|
const String *oldConfigDefault = STRDEF(TEST_PATH PGBACKREST_CONFIG_ORIG_PATH_FILE);
|
||||||
|
|
||||||
// Create the option structure and initialize with 0
|
// Create the option structure and initialize with 0
|
||||||
@ -852,7 +852,7 @@ testRun(void)
|
|||||||
hrnLogLevelStdErrSet(logLevelError);
|
hrnLogLevelStdErrSet(logLevelError);
|
||||||
TEST_RESULT_VOID(configParse(storageTest, strLstSize(argList), strLstPtr(argList), true), "load remote config");
|
TEST_RESULT_VOID(configParse(storageTest, strLstSize(argList), strLstPtr(argList), true), "load remote config");
|
||||||
TEST_RESULT_INT(cfgCommandRole(), cfgCmdRoleRemote, " command role is remote");
|
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(hrnLogLevelStdOut(), logLevelError, "console logging is error");
|
||||||
TEST_RESULT_INT(hrnLogLevelStdErr(), logLevelError, "stderr 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_VOID(configParse(storageTest, strLstSize(argList), strLstPtr(argList), false), "help command");
|
||||||
TEST_RESULT_BOOL(cfgCommandHelp(), true, " help is set");
|
TEST_RESULT_BOOL(cfgCommandHelp(), true, " help is set");
|
||||||
TEST_RESULT_INT(cfgCommand(), cfgCmdHelp, " command is help");
|
TEST_RESULT_INT(cfgCommand(), cfgCmdHelp, " command is help");
|
||||||
|
TEST_RESULT_Z(cfgCommandName(), "help", " command name is help");
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
argList = strLstNew();
|
argList = strLstNew();
|
||||||
@ -1227,11 +1228,11 @@ testRun(void)
|
|||||||
TEST_RESULT_BOOL(cfgLogFile(), true, " backup command does file logging");
|
TEST_RESULT_BOOL(cfgLogFile(), true, " backup command does file logging");
|
||||||
TEST_RESULT_BOOL(cfgLockRemoteRequired(), true, " backup command requires remote lock");
|
TEST_RESULT_BOOL(cfgLockRemoteRequired(), true, " backup command requires remote lock");
|
||||||
TEST_RESULT_STRLST_Z(cfgCommandParam(), NULL, " check command arguments");
|
TEST_RESULT_STRLST_Z(cfgCommandParam(), NULL, " check command arguments");
|
||||||
TEST_RESULT_UINT(cfgCommandRoleEnum(NULL), cfgCmdRoleMain, "command role main enum");
|
TEST_RESULT_UINT(cfgParseCommandRoleEnum(NULL), cfgCmdRoleMain, "command role main enum");
|
||||||
TEST_ERROR(cfgCommandRoleEnum(STRDEF("bogus")), CommandInvalidError, "invalid command role 'bogus'");
|
TEST_ERROR(cfgParseCommandRoleEnum(STRDEF("bogus")), CommandInvalidError, "invalid command role 'bogus'");
|
||||||
TEST_RESULT_INT(cfgCommandRole(), cfgCmdRoleMain, " command role is main");
|
TEST_RESULT_INT(cfgCommandRole(), cfgCmdRoleMain, " command role is main");
|
||||||
TEST_RESULT_STR_Z(cfgCommandRoleName(), "backup", " command/role name is backup");
|
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");
|
TEST_RESULT_STR_Z(cfgExe(), TEST_BACKREST_EXE, " exe is set");
|
||||||
|
|
||||||
@ -1446,7 +1447,7 @@ testRun(void)
|
|||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
TEST_TITLE("set command to expire");
|
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");
|
TEST_RESULT_STR_Z(cfgCommandRoleName(), "expire:async", "command/role name is expire:async");
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user