mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-12 10:04:14 +02:00
Backup key/value annotations.
Allow key/value annotations to be added with the backup command and added/modified/removed with the new annotate command. Annotations can be viewed with the info command in text mode when --set is specified and are always included in JSON output.
This commit is contained in:
parent
b05d31f531
commit
381fd0a5a4
@ -16,6 +16,21 @@
|
||||
<release-list>
|
||||
<release date="XXXX-XX-XX" version="2.41dev" title="UNDER DEVELOPMENT">
|
||||
<release-core-list>
|
||||
<release-feature-list>
|
||||
<release-item>
|
||||
<github-issue id="1709"/>
|
||||
<github-pull-request id="1724"/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-ideator id="adam.berlin"/>
|
||||
<release-item-contributor id="stefan.fercot"/>
|
||||
<release-item-reviewer id="david.steele"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Backup key/value annotations.</p>
|
||||
</release-item>
|
||||
</release-feature-list>
|
||||
|
||||
<release-improvement-list>
|
||||
<release-item>
|
||||
<github-issue id="1816"/>
|
||||
@ -11399,6 +11414,11 @@
|
||||
<contributor-id type="github">abubakarm94</contributor-id>
|
||||
</contributor>
|
||||
|
||||
<contributor id="adam.berlin">
|
||||
<contributor-name-display>Adam Berlin</contributor-name-display>
|
||||
<contributor-id type="github">berlin-ab</contributor-id>
|
||||
</contributor>
|
||||
|
||||
<contributor id="adam.brusselback">
|
||||
<contributor-name-display>Adam Brusselback</contributor-name-display>
|
||||
<contributor-id type="github">Tostino</contributor-id>
|
||||
|
@ -1566,6 +1566,53 @@
|
||||
|
||||
<p>While file bundling is generally more efficient, the downside is that it is more difficult to manually retrieve files from the repository. It may not be ideal for deduplicated storage since each full backup will arrange files in the bundles differently. Lastly, file bundles cannot be resumed, so be careful not to set <br-option>repo-bundle-size</br-option> too high.</p>
|
||||
</section>
|
||||
|
||||
<!-- =================================================================================================================== -->
|
||||
<section id="annotate">
|
||||
<title>Backup Annotations</title>
|
||||
|
||||
<p>Users can attach informative key/value pairs to the backup. This option may be used multiple times to attach multiple annotations.</p>
|
||||
|
||||
<execute-list host="{[host-pg1]}">
|
||||
<title>Perform a full backup with annotations</title>
|
||||
|
||||
<execute user="postgres">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} {[dash]}-annotation=source="demo backup"
|
||||
{[dash]}-annotation=key=value {[dash]}-type=full backup</exe-cmd>
|
||||
</execute>
|
||||
</execute-list>
|
||||
|
||||
<p>Annotations are output by the <cmd>info</cmd> command text output when a backup is specified with <br-option>--set</br-option> and always appear in the JSON output.</p>
|
||||
|
||||
<execute-list host="{[host-pg1]}">
|
||||
<title>Get info for the {[postgres-cluster-demo]} cluster</title>
|
||||
|
||||
<execute user="postgres" show="n" variable-key="backup-annotate-last">
|
||||
<exe-cmd>{[cmd-backup-last]}</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<execute user="postgres" filter="n" output="y">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} {[dash]}-set={[backup-annotate-last]} info</exe-cmd>
|
||||
<exe-highlight>annotation</exe-highlight>
|
||||
</execute>
|
||||
</execute-list>
|
||||
|
||||
<p>Annotations included with the <cmd>backup</cmd> command can be added, modified, or removed afterwards using the <cmd>annotate</cmd> command.</p>
|
||||
|
||||
<execute-list host="{[host-pg1]}">
|
||||
<title>Change backup annotations</title>
|
||||
|
||||
<execute user="postgres">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} {[dash]}-set={[backup-annotate-last]}
|
||||
{[dash]}-annotation=key= {[dash]}-annotation=new_key=new_value annotate</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<execute user="postgres" filter="n" output="y">
|
||||
<exe-cmd>{[project-exe]} {[dash]}-stanza={[postgres-cluster-demo]} {[dash]}-set={[backup-annotate-last]} info</exe-cmd>
|
||||
<exe-highlight>annotation</exe-highlight>
|
||||
</execute>
|
||||
</execute-list>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- ======================================================================================================================= -->
|
||||
|
@ -52,6 +52,7 @@ SRCS_COMMON = \
|
||||
storage/write.c
|
||||
|
||||
SRCS = \
|
||||
command/annotate/annotate.c \
|
||||
command/archive/common.c \
|
||||
command/archive/get/file.c \
|
||||
command/archive/get/get.c \
|
||||
|
@ -31,6 +31,14 @@
|
||||
# then the command is responsible for ensuring that the parameters are valid.
|
||||
####################################################################################################################################
|
||||
command:
|
||||
annotate:
|
||||
command-role:
|
||||
remote: {}
|
||||
lock-remote-required: true
|
||||
lock-required: true
|
||||
lock-type: backup
|
||||
log-file: false
|
||||
|
||||
archive-get:
|
||||
command-role:
|
||||
async: {}
|
||||
@ -320,6 +328,8 @@ option:
|
||||
type: string
|
||||
required: false
|
||||
command:
|
||||
annotate:
|
||||
required: true
|
||||
expire: {}
|
||||
info:
|
||||
depend:
|
||||
@ -335,6 +345,7 @@ option:
|
||||
stanza:
|
||||
type: string
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -478,6 +489,7 @@ option:
|
||||
required: false
|
||||
allow-range: [0, 1024]
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -505,6 +517,7 @@ option:
|
||||
- pg
|
||||
- repo
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -614,6 +627,7 @@ option:
|
||||
- 8MiB
|
||||
- 16MiB
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -690,6 +704,7 @@ option:
|
||||
default: 3
|
||||
allow-range: [0, 9]
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -789,6 +804,7 @@ option:
|
||||
type: path
|
||||
default: /tmp/pgbackrest
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -806,6 +822,7 @@ option:
|
||||
type: boolean
|
||||
default: true
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -845,6 +862,7 @@ option:
|
||||
default: 1830
|
||||
allow-range: [0.1, 604800]
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -1002,6 +1020,7 @@ option:
|
||||
type: boolean
|
||||
default: false
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup: {}
|
||||
@ -1079,6 +1098,17 @@ option:
|
||||
|
||||
# Backup options
|
||||
#---------------------------------------------------------------------------------------------------------------------------------
|
||||
annotation:
|
||||
section: global
|
||||
type: hash
|
||||
required: false
|
||||
command:
|
||||
annotate:
|
||||
required: true
|
||||
backup: {}
|
||||
command-role:
|
||||
main: {}
|
||||
|
||||
archive-check:
|
||||
section: global
|
||||
type: boolean
|
||||
@ -1520,6 +1550,10 @@ option:
|
||||
required: false
|
||||
allow-range: [1, 256]
|
||||
command:
|
||||
annotate:
|
||||
command-role:
|
||||
main: {}
|
||||
remote: {}
|
||||
archive-get:
|
||||
command-role:
|
||||
async: {}
|
||||
@ -1595,6 +1629,7 @@ option:
|
||||
internal: true
|
||||
default: false
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
backup:
|
||||
@ -1630,6 +1665,10 @@ option:
|
||||
- posix
|
||||
- s3
|
||||
command:
|
||||
annotate:
|
||||
command-role:
|
||||
main: {}
|
||||
remote: {}
|
||||
archive-get:
|
||||
command-role:
|
||||
async: {}
|
||||
@ -1928,6 +1967,7 @@ option:
|
||||
type: string
|
||||
required: false
|
||||
command:
|
||||
annotate: {}
|
||||
archive-get: {}
|
||||
archive-push: {}
|
||||
check: {}
|
||||
|
@ -1060,6 +1060,18 @@
|
||||
</text>
|
||||
|
||||
<config-key-list>
|
||||
<config-key id="annotation" name="Backup annotation(s)">
|
||||
<summary>Annotate backup with user-defined key/value pairs.</summary>
|
||||
|
||||
<text>
|
||||
<p>Users can attach informative key/value pairs to the backup. This option may be used multiple times to attach multiple annotations.</p>
|
||||
|
||||
<p>Annotations are output by the <cmd>info</cmd> command text output when a backup is specified with <br-option>--set</br-option> and always appear in the JSON output.</p>
|
||||
</text>
|
||||
|
||||
<example>source="Sunday backup for website database"</example>
|
||||
</config-key>
|
||||
|
||||
<config-key id="archive-check" name="Check Archive">
|
||||
<summary>Check that WAL segments are in the archive before backup completes.</summary>
|
||||
|
||||
@ -1794,6 +1806,26 @@
|
||||
</operation-general>
|
||||
|
||||
<command-list title="Commands">
|
||||
<command id="annotate" name="Annotate">
|
||||
<summary>Add or modify backup annotation.</summary>
|
||||
|
||||
<text>
|
||||
<p>Annotations included with the <cmd>backup</cmd> command can be added, modified, or removed afterwards using the <cmd>annotate</cmd> command.</p>
|
||||
</text>
|
||||
|
||||
<option-list>
|
||||
<option id="set" name="Set">
|
||||
<summary>Backup set to annotate.</summary>
|
||||
|
||||
<text>
|
||||
<p>The backup set to annotate.</p>
|
||||
</text>
|
||||
|
||||
<example>20150131-153358F_20150131-153401I</example>
|
||||
</option>
|
||||
</option-list>
|
||||
</command>
|
||||
|
||||
<command id="backup" name="Backup">
|
||||
<summary>Backup a database cluster.</summary>
|
||||
|
||||
|
98
src/command/annotate/annotate.c
Normal file
98
src/command/annotate/annotate.c
Normal file
@ -0,0 +1,98 @@
|
||||
/***********************************************************************************************************************************
|
||||
Annotate Command
|
||||
***********************************************************************************************************************************/
|
||||
#include "build.auto.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "command/annotate/annotate.h"
|
||||
#include "command/backup/backup.h"
|
||||
#include "common/debug.h"
|
||||
#include "common/log.h"
|
||||
#include "common/memContext.h"
|
||||
#include "common/regExp.h"
|
||||
#include "config/config.h"
|
||||
#include "common/crypto/cipherBlock.h"
|
||||
#include "info/infoBackup.h"
|
||||
#include "storage/helper.h"
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
void
|
||||
cmdAnnotate(void)
|
||||
{
|
||||
FUNCTION_LOG_VOID(logLevelDebug);
|
||||
|
||||
MEM_CONTEXT_TEMP_BEGIN()
|
||||
{
|
||||
// Initialize the repo index
|
||||
unsigned int repoIdxMin = 0;
|
||||
unsigned int repoIdxMax = cfgOptionGroupIdxTotal(cfgOptGrpRepo) - 1;
|
||||
|
||||
// If the repo was specified then set index to the array location and max to loop only once
|
||||
if (cfgOptionTest(cfgOptRepo))
|
||||
{
|
||||
repoIdxMin = cfgOptionGroupIdxDefault(cfgOptGrpRepo);
|
||||
repoIdxMax = repoIdxMin;
|
||||
}
|
||||
|
||||
// Check the backup label format
|
||||
const String *const backupLabel = cfgOptionStr(cfgOptSet);
|
||||
|
||||
if (!regExpMatchOne(backupRegExpP(.full = true, .differential = true, .incremental = true), backupLabel))
|
||||
THROW_FMT(OptionInvalidValueError, "'%s' is not a valid backup label format", strZ(backupLabel));
|
||||
|
||||
// Track the number of backup sets to update in the backup info file and any errors that may occur
|
||||
unsigned int backupTotalProcessed = 0;
|
||||
unsigned int errorTotal = 0;
|
||||
|
||||
for (unsigned int repoIdx = repoIdxMin; repoIdx <= repoIdxMax; repoIdx++)
|
||||
{
|
||||
TRY_BEGIN()
|
||||
{
|
||||
// Attempt to load the backup info file
|
||||
const CipherType repoCipherType = cfgOptionIdxStrId(cfgOptRepoCipherType, repoIdx);
|
||||
|
||||
InfoBackup *infoBackup = infoBackupLoadFileReconstruct(
|
||||
storageRepoIdx(repoIdx), INFO_BACKUP_PATH_FILE_STR, repoCipherType,
|
||||
cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
|
||||
|
||||
if (infoBackupLabelExists(infoBackup, backupLabel))
|
||||
{
|
||||
// Backup label found in backup.info
|
||||
backupTotalProcessed++;
|
||||
|
||||
LOG_INFO_FMT(
|
||||
"backup set '%s' to annotate found in %s",
|
||||
strZ(backupLabel), cfgOptionGroupName(cfgOptGrpRepo, repoIdx));
|
||||
|
||||
// Update annotations
|
||||
infoBackupDataAnnotationSet(infoBackup, backupLabel, cfgOptionKv(cfgOptAnnotation));
|
||||
|
||||
// Write the updated backup info
|
||||
infoBackupSaveFile(
|
||||
infoBackup, storageRepoWrite(), INFO_BACKUP_PATH_FILE_STR, repoCipherType,
|
||||
cfgOptionIdxStrNull(cfgOptRepoCipherPass, repoIdx));
|
||||
}
|
||||
}
|
||||
CATCH_ANY()
|
||||
{
|
||||
LOG_ERROR_FMT(errorTypeCode(errorType()), "%s: %s", cfgOptionGroupName(cfgOptGrpRepo, repoIdx), errorMessage());
|
||||
errorTotal++;
|
||||
}
|
||||
TRY_END();
|
||||
}
|
||||
|
||||
// Error if any errors encountered on one or more repos
|
||||
if (errorTotal > 0)
|
||||
THROW_FMT(CommandError, CFGCMD_ANNOTATE " command encountered %u error(s), check the log file for details", errorTotal);
|
||||
|
||||
if (backupTotalProcessed == 0)
|
||||
THROW(BackupSetInvalidError, "no backup set to annotate found");
|
||||
}
|
||||
MEM_CONTEXT_TEMP_END();
|
||||
|
||||
FUNCTION_LOG_RETURN_VOID();
|
||||
}
|
13
src/command/annotate/annotate.h
Normal file
13
src/command/annotate/annotate.h
Normal file
@ -0,0 +1,13 @@
|
||||
/***********************************************************************************************************************************
|
||||
Annotate Command
|
||||
***********************************************************************************************************************************/
|
||||
#ifndef COMMAND_ANNOTATE_ANNOTATE_H
|
||||
#define COMMAND_ANNOTATE_ANNOTATE_H
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Functions
|
||||
***********************************************************************************************************************************/
|
||||
// Add or modify backup annotations
|
||||
void cmdAnnotate(void);
|
||||
|
||||
#endif
|
@ -2284,7 +2284,8 @@ cmdBackup(void)
|
||||
backupStopResult.lsn, backupStopResult.walSegmentName, infoPg.id, infoPg.systemId, backupStartResult.dbList,
|
||||
cfgOptionBool(cfgOptArchiveCheck), cfgOptionBool(cfgOptArchiveCopy), cfgOptionUInt(cfgOptBufferSize),
|
||||
cfgOptionUInt(cfgOptCompressLevel), cfgOptionUInt(cfgOptCompressLevelNetwork), cfgOptionBool(cfgOptRepoHardlink),
|
||||
cfgOptionUInt(cfgOptProcessMax), cfgOptionBool(cfgOptBackupStandby));
|
||||
cfgOptionUInt(cfgOptProcessMax), cfgOptionBool(cfgOptBackupStandby),
|
||||
cfgOptionTest(cfgOptAnnotation) ? cfgOptionKv(cfgOptAnnotation) : NULL);
|
||||
|
||||
// The primary db object won't be used anymore so free it
|
||||
dbFree(backupData->dbPrimary);
|
||||
|
@ -34,6 +34,7 @@ VARIANT_STRDEF_STATIC(ARCHIVE_KEY_MIN_VAR, "min");
|
||||
VARIANT_STRDEF_STATIC(ARCHIVE_KEY_MAX_VAR, "max");
|
||||
VARIANT_STRDEF_STATIC(BACKREST_KEY_FORMAT_VAR, "format");
|
||||
VARIANT_STRDEF_STATIC(BACKREST_KEY_VERSION_VAR, "version");
|
||||
VARIANT_STRDEF_STATIC(BACKUP_KEY_ANNOTATION_VAR, "annotation");
|
||||
VARIANT_STRDEF_STATIC(BACKUP_KEY_BACKREST_VAR, "backrest");
|
||||
VARIANT_STRDEF_STATIC(BACKUP_KEY_ERROR_VAR, "error");
|
||||
VARIANT_STRDEF_STATIC(BACKUP_KEY_ERROR_LIST_VAR, "error-list");
|
||||
@ -469,6 +470,10 @@ backupListAdd(
|
||||
kvPut(lsnInfo, KEY_STOP_VAR, VARSTR(backupData->backupLsnStop));
|
||||
}
|
||||
|
||||
// Add annotations to json output or --set text
|
||||
if ((outputJson || backupLabelMatch) && backupData->backupAnnotation != NULL)
|
||||
kvPut(varKv(backupInfo), BACKUP_KEY_ANNOTATION_VAR, backupData->backupAnnotation);
|
||||
|
||||
// If a backup label was specified and this is that label, then get the data from the loaded manifest
|
||||
if (backupLabelMatch)
|
||||
{
|
||||
@ -955,6 +960,25 @@ formatTextBackup(const DbGroup *dbGroup, String *resultStr)
|
||||
else
|
||||
strCatZ(resultStr, " error(s) detected during backup\n");
|
||||
}
|
||||
|
||||
// Annotations metadata
|
||||
if (kvGet(backupInfo, BACKUP_KEY_ANNOTATION_VAR) != NULL)
|
||||
{
|
||||
const KeyValue *const annotationKv = varKv(kvGet(backupInfo, BACKUP_KEY_ANNOTATION_VAR));
|
||||
const StringList *const annotationKeyList = strLstNewVarLst(kvKeyList(annotationKv));
|
||||
String *const annotationStr = strNew();
|
||||
|
||||
for (unsigned int keyIdx = 0; keyIdx < strLstSize(annotationKeyList); keyIdx++)
|
||||
{
|
||||
const String *const key = strLstGet(annotationKeyList, keyIdx);
|
||||
const String *const value = varStr(kvGet(annotationKv, VARSTR(key)));
|
||||
ASSERT(value != NULL);
|
||||
|
||||
strCatFmt(annotationStr, " %s: %s\n", strZ(key), strZ(value));
|
||||
}
|
||||
|
||||
strCatFmt(resultStr, " annotation(s)\n%s", strZ(annotationStr));
|
||||
}
|
||||
}
|
||||
|
||||
FUNCTION_TEST_RETURN_VOID();
|
||||
|
@ -331,3 +331,38 @@ kvGetList(const KeyValue *const this, const Variant *const key)
|
||||
|
||||
FUNCTION_TEST_RETURN(VARIANT_LIST, result);
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
KeyValue *
|
||||
kvRemove(KeyValue *this, const Variant *key)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(KEY_VALUE, this);
|
||||
FUNCTION_TEST_PARAM(VARIANT, key);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
ASSERT(this != NULL);
|
||||
ASSERT(key != NULL);
|
||||
|
||||
// Find the key
|
||||
unsigned int listIdx = kvGetIdx(this, key);
|
||||
|
||||
// If the key was found, remove it
|
||||
if (listIdx != KEY_NOT_FOUND)
|
||||
{
|
||||
// Free the key/value being removed and remove from the list
|
||||
KeyValuePair *const pair = (KeyValuePair *)lstGet(this->list, listIdx);
|
||||
|
||||
varFree(pair->key);
|
||||
varFree(pair->value);
|
||||
lstRemoveIdx(this->list, listIdx);
|
||||
|
||||
// Remove from the key list (index must be the same as the key/value list)
|
||||
ASSERT(varEq(key, varLstGet(this->pub.keyList, listIdx)));
|
||||
|
||||
varFree(varLstGet(this->pub.keyList, listIdx));
|
||||
lstRemoveIdx((List *)this->pub.keyList, listIdx);
|
||||
}
|
||||
|
||||
FUNCTION_TEST_RETURN(KEY_VALUE, this);
|
||||
}
|
||||
|
@ -80,6 +80,9 @@ kvKeyExists(const KeyValue *const this, const Variant *const key)
|
||||
// Get a value as a list (even if there is only one value) using the key
|
||||
VariantList *kvGetList(const KeyValue *this, const Variant *key);
|
||||
|
||||
// Remove a key/value pair
|
||||
KeyValue *kvRemove(KeyValue *this, const Variant *key);
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Destructor
|
||||
***********************************************************************************************************************************/
|
||||
|
@ -9,6 +9,7 @@ Automatically generated by 'build-code config' -- do not modify directly.
|
||||
/***********************************************************************************************************************************
|
||||
Command constants
|
||||
***********************************************************************************************************************************/
|
||||
#define CFGCMD_ANNOTATE "annotate"
|
||||
#define CFGCMD_ARCHIVE_GET "archive-get"
|
||||
#define CFGCMD_ARCHIVE_PUSH "archive-push"
|
||||
#define CFGCMD_BACKUP "backup"
|
||||
@ -32,7 +33,7 @@ Command constants
|
||||
#define CFGCMD_VERIFY "verify"
|
||||
#define CFGCMD_VERSION "version"
|
||||
|
||||
#define CFG_COMMAND_TOTAL 22
|
||||
#define CFG_COMMAND_TOTAL 23
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Option group constants
|
||||
@ -42,6 +43,7 @@ Option group constants
|
||||
/***********************************************************************************************************************************
|
||||
Option constants
|
||||
***********************************************************************************************************************************/
|
||||
#define CFGOPT_ANNOTATION "annotation"
|
||||
#define CFGOPT_ARCHIVE_ASYNC "archive-async"
|
||||
#define CFGOPT_ARCHIVE_CHECK "archive-check"
|
||||
#define CFGOPT_ARCHIVE_COPY "archive-copy"
|
||||
@ -128,7 +130,7 @@ Option constants
|
||||
#define CFGOPT_TYPE "type"
|
||||
#define CFGOPT_VERBOSE "verbose"
|
||||
|
||||
#define CFG_OPTION_TOTAL 156
|
||||
#define CFG_OPTION_TOTAL 157
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Option value constants
|
||||
@ -317,6 +319,7 @@ Command enum
|
||||
***********************************************************************************************************************************/
|
||||
typedef enum
|
||||
{
|
||||
cfgCmdAnnotate,
|
||||
cfgCmdArchiveGet,
|
||||
cfgCmdArchivePush,
|
||||
cfgCmdBackup,
|
||||
@ -356,6 +359,7 @@ Option enum
|
||||
***********************************************************************************************************************************/
|
||||
typedef enum
|
||||
{
|
||||
cfgOptAnnotation,
|
||||
cfgOptArchiveAsync,
|
||||
cfgOptArchiveCheck,
|
||||
cfgOptArchiveCopy,
|
||||
|
@ -328,6 +328,21 @@ Command parse data
|
||||
|
||||
static const ParseRuleCommand parseRuleCommand[CFG_COMMAND_TOTAL] =
|
||||
{
|
||||
PARSE_RULE_COMMAND // cmd/annotate
|
||||
( // cmd/annotate
|
||||
PARSE_RULE_COMMAND_NAME("annotate"), // cmd/annotate
|
||||
PARSE_RULE_COMMAND_LOCK_REQUIRED(true), // cmd/annotate
|
||||
PARSE_RULE_COMMAND_LOCK_REMOTE_REQUIRED(true), // cmd/annotate
|
||||
PARSE_RULE_COMMAND_LOCK_TYPE(lockTypeBackup), // cmd/annotate
|
||||
PARSE_RULE_COMMAND_LOG_LEVEL_DEFAULT(logLevelInfo), // cmd/annotate
|
||||
// cmd/annotate
|
||||
PARSE_RULE_COMMAND_ROLE_VALID_LIST // cmd/annotate
|
||||
( // cmd/annotate
|
||||
PARSE_RULE_COMMAND_ROLE(cfgCmdRoleMain) // cmd/annotate
|
||||
PARSE_RULE_COMMAND_ROLE(cfgCmdRoleRemote) // cmd/annotate
|
||||
), // cmd/annotate
|
||||
), // cmd/annotate
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
PARSE_RULE_COMMAND // cmd/archive-get
|
||||
( // cmd/archive-get
|
||||
PARSE_RULE_COMMAND_NAME("archive-get"), // cmd/archive-get
|
||||
@ -663,6 +678,35 @@ Option parse data
|
||||
|
||||
static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
{
|
||||
PARSE_RULE_OPTION // opt/annotation
|
||||
( // opt/annotation
|
||||
PARSE_RULE_OPTION_NAME("annotation"), // opt/annotation
|
||||
PARSE_RULE_OPTION_TYPE(cfgOptTypeHash), // opt/annotation
|
||||
PARSE_RULE_OPTION_RESET(true), // opt/annotation
|
||||
PARSE_RULE_OPTION_REQUIRED(false), // opt/annotation
|
||||
PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/annotation
|
||||
PARSE_RULE_OPTION_MULTI(true), // opt/annotation
|
||||
// opt/annotation
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/annotation
|
||||
( // opt/annotation
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/annotation
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/annotation
|
||||
), // opt/annotation
|
||||
// opt/annotation
|
||||
PARSE_RULE_OPTIONAL // opt/annotation
|
||||
( // opt/annotation
|
||||
PARSE_RULE_OPTIONAL_GROUP // opt/annotation
|
||||
( // opt/annotation
|
||||
PARSE_RULE_FILTER_CMD // opt/annotation
|
||||
( // opt/annotation
|
||||
PARSE_RULE_VAL_CMD(cfgCmdAnnotate), // opt/annotation
|
||||
), // opt/annotation
|
||||
// opt/annotation
|
||||
PARSE_RULE_OPTIONAL_REQUIRED(), // opt/annotation
|
||||
), // opt/annotation
|
||||
), // opt/annotation
|
||||
), // opt/annotation
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
PARSE_RULE_OPTION // opt/archive-async
|
||||
( // opt/archive-async
|
||||
PARSE_RULE_OPTION_NAME("archive-async"), // opt/archive-async
|
||||
@ -1076,6 +1120,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/buffer-size
|
||||
( // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/buffer-size
|
||||
@ -1113,6 +1158,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/buffer-size
|
||||
( // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/buffer-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/buffer-size
|
||||
@ -1353,6 +1399,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/compress-level-network
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/compress-level-network
|
||||
( // opt/compress-level-network
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/compress-level-network
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/compress-level-network
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/compress-level-network
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/compress-level-network
|
||||
@ -1453,6 +1500,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/config
|
||||
( // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config
|
||||
@ -1492,6 +1540,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/config
|
||||
( // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config
|
||||
@ -1530,6 +1579,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/config-include-path
|
||||
( // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config-include-path
|
||||
@ -1569,6 +1619,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/config-include-path
|
||||
( // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config-include-path
|
||||
@ -1607,6 +1658,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/config-path
|
||||
( // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config-path
|
||||
@ -1646,6 +1698,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/config-path
|
||||
( // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/config-path
|
||||
@ -1852,6 +1905,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/exec-id
|
||||
( // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/exec-id
|
||||
@ -1891,6 +1945,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/exec-id
|
||||
( // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/exec-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/exec-id
|
||||
@ -2029,6 +2084,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/io-timeout
|
||||
( // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/io-timeout
|
||||
@ -2066,6 +2122,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/io-timeout
|
||||
( // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/io-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/io-timeout
|
||||
@ -2297,6 +2354,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/lock-path
|
||||
( // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/lock-path
|
||||
@ -2326,6 +2384,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/lock-path
|
||||
( // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/lock-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/lock-path
|
||||
@ -2358,6 +2417,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-level-console
|
||||
( // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-console
|
||||
@ -2397,6 +2457,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-level-console
|
||||
( // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-console
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-console
|
||||
@ -2448,6 +2509,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-level-file
|
||||
( // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-file
|
||||
@ -2487,6 +2549,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-level-file
|
||||
( // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-file
|
||||
@ -2538,6 +2601,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-level-stderr
|
||||
( // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-stderr
|
||||
@ -2577,6 +2641,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-level-stderr
|
||||
( // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-level-stderr
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-level-stderr
|
||||
@ -2628,6 +2693,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-path
|
||||
( // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-path
|
||||
@ -2667,6 +2733,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-path
|
||||
( // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-path
|
||||
@ -2707,6 +2774,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-subprocess
|
||||
( // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-subprocess
|
||||
@ -2741,6 +2809,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-subprocess
|
||||
( // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-subprocess
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-subprocess
|
||||
@ -2781,6 +2850,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/log-timestamp
|
||||
( // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-timestamp
|
||||
@ -2820,6 +2890,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/log-timestamp
|
||||
( // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/log-timestamp
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/log-timestamp
|
||||
@ -2892,6 +2963,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/neutral-umask
|
||||
( // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/neutral-umask
|
||||
@ -2928,6 +3000,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/neutral-umask
|
||||
( // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/neutral-umask
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/neutral-umask
|
||||
@ -3935,6 +4008,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/process
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/process
|
||||
( // opt/process
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/process
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/process
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/process
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/process
|
||||
@ -4017,6 +4091,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/protocol-timeout
|
||||
( // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/protocol-timeout
|
||||
@ -4052,6 +4127,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/protocol-timeout
|
||||
( // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/protocol-timeout
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/protocol-timeout
|
||||
@ -4189,6 +4265,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/remote-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/remote-type
|
||||
( // opt/remote-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/remote-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/remote-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/remote-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/remote-type
|
||||
@ -4228,6 +4305,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo
|
||||
( // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdExpire) // opt/repo
|
||||
@ -4257,6 +4335,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo
|
||||
( // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo
|
||||
@ -4299,6 +4378,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-account
|
||||
( // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-account
|
||||
@ -4334,6 +4414,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-account
|
||||
( // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-account
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-account
|
||||
@ -4375,6 +4456,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-container
|
||||
( // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-container
|
||||
@ -4410,6 +4492,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-container
|
||||
( // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-container
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-container
|
||||
@ -4452,6 +4535,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-endpoint
|
||||
( // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-endpoint
|
||||
@ -4487,6 +4571,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-endpoint
|
||||
( // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-endpoint
|
||||
@ -4534,6 +4619,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-key
|
||||
( // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-key
|
||||
@ -4569,6 +4655,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-key
|
||||
( // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-key
|
||||
@ -4610,6 +4697,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-key-type
|
||||
( // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-key-type
|
||||
@ -4645,6 +4733,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-key-type
|
||||
( // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-key-type
|
||||
@ -4698,6 +4787,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-azure-uri-style
|
||||
( // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-azure-uri-style
|
||||
@ -4733,6 +4823,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-azure-uri-style
|
||||
( // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-azure-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-azure-uri-style
|
||||
@ -4896,6 +4987,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-cipher-pass
|
||||
( // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-cipher-pass
|
||||
@ -4931,6 +5023,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-cipher-pass
|
||||
( // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-cipher-pass
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-cipher-pass
|
||||
@ -4973,6 +5066,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-cipher-type
|
||||
( // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-cipher-type
|
||||
@ -5008,6 +5102,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-cipher-type
|
||||
( // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-cipher-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-cipher-type
|
||||
@ -5055,6 +5150,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-gcs-bucket
|
||||
( // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-gcs-bucket
|
||||
@ -5090,6 +5186,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-gcs-bucket
|
||||
( // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-gcs-bucket
|
||||
@ -5130,6 +5227,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-gcs-endpoint
|
||||
( // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-gcs-endpoint
|
||||
@ -5165,6 +5263,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-gcs-endpoint
|
||||
( // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-gcs-endpoint
|
||||
@ -5211,6 +5310,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-gcs-key
|
||||
( // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-gcs-key
|
||||
@ -5246,6 +5346,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-gcs-key
|
||||
( // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-gcs-key
|
||||
@ -5288,6 +5389,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-gcs-key-type
|
||||
( // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-gcs-key-type
|
||||
@ -5323,6 +5425,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-gcs-key-type
|
||||
( // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-gcs-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-gcs-key-type
|
||||
@ -5412,6 +5515,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host
|
||||
( // opt/repo-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host
|
||||
@ -5470,6 +5574,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-ca-file
|
||||
( // opt/repo-host-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host-ca-file
|
||||
@ -5528,6 +5633,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-ca-path
|
||||
( // opt/repo-host-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host-ca-path
|
||||
@ -5586,6 +5692,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-cert-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-cert-file
|
||||
( // opt/repo-host-cert-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-cert-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-cert-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-cert-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host-cert-file
|
||||
@ -5644,6 +5751,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-cmd
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-cmd
|
||||
( // opt/repo-host-cmd
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-cmd
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-cmd
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-cmd
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-cmd
|
||||
@ -5698,6 +5806,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-config
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-config
|
||||
( // opt/repo-host-config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-config
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-config
|
||||
@ -5757,6 +5866,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-config-include-path
|
||||
( // opt/repo-host-config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-config-include-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-config-include-path
|
||||
@ -5816,6 +5926,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-config-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-config-path
|
||||
( // opt/repo-host-config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-config-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-config-path
|
||||
@ -5875,6 +5986,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-key-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-key-file
|
||||
( // opt/repo-host-key-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-key-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-key-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-key-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host-key-file
|
||||
@ -5933,6 +6045,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-port
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-port
|
||||
( // opt/repo-host-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-port
|
||||
@ -5993,6 +6106,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-type
|
||||
( // opt/repo-host-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-host-type
|
||||
@ -6063,6 +6177,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-host-user
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-host-user
|
||||
( // opt/repo-host-user
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-host-user
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-host-user
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-host-user
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-host-user
|
||||
@ -6123,6 +6238,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-local
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-local
|
||||
( // opt/repo-local
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-local
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-local
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-local
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-local
|
||||
@ -6181,6 +6297,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-path
|
||||
( // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-path
|
||||
@ -6216,6 +6333,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-path
|
||||
( // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-path
|
||||
@ -6444,6 +6562,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-bucket
|
||||
( // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-bucket
|
||||
@ -6479,6 +6598,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-bucket
|
||||
( // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-bucket
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-bucket
|
||||
@ -6521,6 +6641,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-endpoint
|
||||
( // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-endpoint
|
||||
@ -6556,6 +6677,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-endpoint
|
||||
( // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-endpoint
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-endpoint
|
||||
@ -6599,6 +6721,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-key
|
||||
( // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-key
|
||||
@ -6634,6 +6757,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-key
|
||||
( // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-key
|
||||
@ -6677,6 +6801,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-key-secret
|
||||
( // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-key-secret
|
||||
@ -6712,6 +6837,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-key-secret
|
||||
( // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key-secret
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-key-secret
|
||||
@ -6753,6 +6879,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-key-type
|
||||
( // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-key-type
|
||||
@ -6788,6 +6915,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-key-type
|
||||
( // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-key-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-key-type
|
||||
@ -6842,6 +6970,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-kms-key-id
|
||||
( // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-kms-key-id
|
||||
@ -6877,6 +7006,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-kms-key-id
|
||||
( // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-kms-key-id
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-kms-key-id
|
||||
@ -6919,6 +7049,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-region
|
||||
( // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-region
|
||||
@ -6954,6 +7085,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-region
|
||||
( // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-region
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-region
|
||||
@ -6995,6 +7127,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-role
|
||||
( // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-role
|
||||
@ -7030,6 +7163,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-role
|
||||
( // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-role
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-role
|
||||
@ -7072,6 +7206,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-token
|
||||
( // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-token
|
||||
@ -7107,6 +7242,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-token
|
||||
( // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-token
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-token
|
||||
@ -7148,6 +7284,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-s3-uri-style
|
||||
( // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-s3-uri-style
|
||||
@ -7183,6 +7320,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-s3-uri-style
|
||||
( // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-s3-uri-style
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-s3-uri-style
|
||||
@ -7236,6 +7374,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-ca-file
|
||||
( // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-ca-file
|
||||
@ -7271,6 +7410,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-ca-file
|
||||
( // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-ca-file
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-ca-file
|
||||
@ -7314,6 +7454,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-ca-path
|
||||
( // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-ca-path
|
||||
@ -7349,6 +7490,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-ca-path
|
||||
( // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-ca-path
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-ca-path
|
||||
@ -7392,6 +7534,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-host
|
||||
( // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-host
|
||||
@ -7427,6 +7570,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-host
|
||||
( // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-host
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-host
|
||||
@ -7469,6 +7613,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-port
|
||||
( // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-port
|
||||
@ -7504,6 +7649,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-port
|
||||
( // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-port
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-port
|
||||
@ -7558,6 +7704,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-upload-chunk-size
|
||||
( // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-upload-chunk-size
|
||||
@ -7593,6 +7740,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-upload-chunk-size
|
||||
( // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-upload-chunk-size
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-upload-chunk-size
|
||||
@ -7643,6 +7791,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-storage-verify-tls
|
||||
( // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-storage-verify-tls
|
||||
@ -7678,6 +7827,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-storage-verify-tls
|
||||
( // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-storage-verify-tls
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-storage-verify-tls
|
||||
@ -7727,6 +7877,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/repo-type
|
||||
( // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/repo-type
|
||||
@ -7762,6 +7913,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/repo-type
|
||||
( // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/repo-type
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdCheck) // opt/repo-type
|
||||
@ -7837,6 +7989,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/sck-block
|
||||
( // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/sck-block
|
||||
@ -7874,6 +8027,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/sck-block
|
||||
( // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/sck-block
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/sck-block
|
||||
@ -7914,6 +8068,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/sck-keep-alive
|
||||
( // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/sck-keep-alive
|
||||
@ -7951,6 +8106,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/sck-keep-alive
|
||||
( // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/sck-keep-alive
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/sck-keep-alive
|
||||
@ -7989,6 +8145,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/set
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/set
|
||||
( // opt/set
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/set
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdExpire) // opt/set
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdInfo) // opt/set
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdRestore) // opt/set
|
||||
@ -7998,6 +8155,16 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
PARSE_RULE_OPTIONAL // opt/set
|
||||
( // opt/set
|
||||
PARSE_RULE_OPTIONAL_GROUP // opt/set
|
||||
( // opt/set
|
||||
PARSE_RULE_FILTER_CMD // opt/set
|
||||
( // opt/set
|
||||
PARSE_RULE_VAL_CMD(cfgCmdAnnotate), // opt/set
|
||||
), // opt/set
|
||||
// opt/set
|
||||
PARSE_RULE_OPTIONAL_REQUIRED(), // opt/set
|
||||
), // opt/set
|
||||
// opt/set
|
||||
PARSE_RULE_OPTIONAL_GROUP // opt/set
|
||||
( // opt/set
|
||||
PARSE_RULE_FILTER_CMD // opt/set
|
||||
( // opt/set
|
||||
@ -8128,6 +8295,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/stanza
|
||||
( // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/stanza
|
||||
@ -8165,6 +8333,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/stanza
|
||||
( // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/stanza
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/stanza
|
||||
@ -8426,6 +8595,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/tcp-keep-alive-count
|
||||
( // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-count
|
||||
@ -8463,6 +8633,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/tcp-keep-alive-count
|
||||
( // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-count
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-count
|
||||
@ -8509,6 +8680,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/tcp-keep-alive-idle
|
||||
( // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-idle
|
||||
@ -8546,6 +8718,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/tcp-keep-alive-idle
|
||||
( // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-idle
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-idle
|
||||
@ -8592,6 +8765,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_MAIN_VALID_LIST // opt/tcp-keep-alive-interval
|
||||
( // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-interval
|
||||
@ -8629,6 +8803,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] =
|
||||
// opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND_ROLE_REMOTE_VALID_LIST // opt/tcp-keep-alive-interval
|
||||
( // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdAnnotate) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchiveGet) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdArchivePush) // opt/tcp-keep-alive-interval
|
||||
PARSE_RULE_OPTION_COMMAND(cfgCmdBackup) // opt/tcp-keep-alive-interval
|
||||
@ -9149,6 +9324,7 @@ Order for option parse resolution
|
||||
static const uint8_t optionResolveOrder[] =
|
||||
{
|
||||
cfgOptStanza, // opt-resolve-order
|
||||
cfgOptAnnotation, // opt-resolve-order
|
||||
cfgOptArchiveAsync, // opt-resolve-order
|
||||
cfgOptArchiveGetQueueMax, // opt-resolve-order
|
||||
cfgOptArchiveHeaderCheck, // opt-resolve-order
|
||||
|
@ -95,6 +95,7 @@ Create new object and load contents from a file
|
||||
#define INFO_BACKUP_SECTION "backup"
|
||||
#define INFO_BACKUP_SECTION_BACKUP_CURRENT INFO_BACKUP_SECTION ":current"
|
||||
|
||||
#define INFO_BACKUP_KEY_BACKUP_ANNOTATION "backup-annotation"
|
||||
#define INFO_BACKUP_KEY_BACKUP_ARCHIVE_START "backup-archive-start"
|
||||
#define INFO_BACKUP_KEY_BACKUP_ARCHIVE_STOP "backup-archive-stop"
|
||||
#define INFO_BACKUP_KEY_BACKUP_INFO_REPO_SIZE "backup-info-repo-size"
|
||||
@ -152,6 +153,10 @@ infoBackupLoadCallback(void *data, const String *section, const String *key, con
|
||||
info.backrestFormat = jsonReadUInt(jsonReadKeyRequireZ(json, INFO_KEY_FORMAT));
|
||||
info.backrestVersion = jsonReadStr(jsonReadKeyRequireZ(json, INFO_KEY_VERSION));
|
||||
|
||||
// Annotation
|
||||
if (jsonReadKeyExpectZ(json, INFO_BACKUP_KEY_BACKUP_ANNOTATION))
|
||||
info.backupAnnotation = jsonReadVar(json);
|
||||
|
||||
// Archive start/stop
|
||||
if (jsonReadKeyExpectZ(json, INFO_BACKUP_KEY_BACKUP_ARCHIVE_START))
|
||||
info.backupArchiveStart = jsonReadStr(json);
|
||||
@ -263,6 +268,9 @@ infoBackupSaveCallback(void *const data, const String *const sectionNext, InfoSa
|
||||
jsonWriteUInt(jsonWriteKeyZ(json, INFO_KEY_FORMAT), backupData.backrestFormat);
|
||||
jsonWriteStr(jsonWriteKeyZ(json, INFO_KEY_VERSION), backupData.backrestVersion);
|
||||
|
||||
if (backupData.backupAnnotation != NULL)
|
||||
jsonWriteVar(jsonWriteKeyZ(json, INFO_BACKUP_KEY_BACKUP_ANNOTATION), backupData.backupAnnotation);
|
||||
|
||||
jsonWriteStr(jsonWriteKeyZ(json, INFO_BACKUP_KEY_BACKUP_ARCHIVE_START), backupData.backupArchiveStart);
|
||||
jsonWriteStr(jsonWriteKeyZ(json, INFO_BACKUP_KEY_BACKUP_ARCHIVE_STOP), backupData.backupArchiveStop);
|
||||
|
||||
@ -424,6 +432,7 @@ infoBackupDataAdd(const InfoBackup *this, const Manifest *manifest)
|
||||
.backupType = manData->backupType,
|
||||
.backupError = varNewBool(backupError),
|
||||
|
||||
.backupAnnotation = varDup(manData->annotation),
|
||||
.backupArchiveStart = strDup(manData->archiveStart),
|
||||
.backupArchiveStop = strDup(manData->archiveStop),
|
||||
.backupLsnStart = strDup(manData->lsnStart),
|
||||
@ -459,6 +468,57 @@ infoBackupDataAdd(const InfoBackup *this, const Manifest *manifest)
|
||||
FUNCTION_LOG_RETURN_VOID();
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
void
|
||||
infoBackupDataAnnotationSet(const InfoBackup *const this, const String *const backupLabel, const KeyValue *const newAnnotationKv)
|
||||
{
|
||||
FUNCTION_TEST_BEGIN();
|
||||
FUNCTION_TEST_PARAM(INFO_BACKUP, this);
|
||||
FUNCTION_TEST_PARAM(STRING, backupLabel);
|
||||
FUNCTION_TEST_PARAM(KEY_VALUE, newAnnotationKv);
|
||||
FUNCTION_TEST_END();
|
||||
|
||||
ASSERT(this != NULL);
|
||||
ASSERT(infoBackupLabelExists(this, backupLabel));
|
||||
ASSERT(newAnnotationKv != NULL);
|
||||
|
||||
MEM_CONTEXT_BEGIN(lstMemContext(this->pub.backup))
|
||||
{
|
||||
// Get data for specified backup
|
||||
InfoBackupData *const infoBackupData = lstFind(this->pub.backup, &backupLabel);
|
||||
|
||||
// Create annotation if it does not exist
|
||||
if (infoBackupData->backupAnnotation == NULL)
|
||||
infoBackupData->backupAnnotation = varNewKv(kvNew());
|
||||
|
||||
// Update annotations
|
||||
KeyValue *const annotationKv = varKv(infoBackupData->backupAnnotation);
|
||||
const VariantList *const newAnnotationKeyList = kvKeyList(newAnnotationKv);
|
||||
|
||||
for (unsigned int keyIdx = 0; keyIdx < varLstSize(newAnnotationKeyList); keyIdx++)
|
||||
{
|
||||
const Variant *const newKey = varLstGet(newAnnotationKeyList, keyIdx);
|
||||
const Variant *const newValue = kvGet(newAnnotationKv, newKey);
|
||||
|
||||
// If value is empty remove the key
|
||||
if (strEmpty(varStr(newValue)))
|
||||
{
|
||||
kvRemove(annotationKv, newKey);
|
||||
}
|
||||
// Else put new key/value (this will overwrite an existing value)
|
||||
else
|
||||
kvPut(annotationKv, newKey, newValue);
|
||||
}
|
||||
|
||||
// Clean field if there are no annotations left
|
||||
if (varLstSize(kvKeyList(annotationKv)) == 0)
|
||||
infoBackupData->backupAnnotation = NULL;
|
||||
}
|
||||
MEM_CONTEXT_END();
|
||||
|
||||
FUNCTION_TEST_RETURN_VOID();
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
void
|
||||
infoBackupDataDelete(const InfoBackup *this, const String *backupDeleteLabel)
|
||||
|
@ -46,6 +46,7 @@ typedef struct InfoBackupData
|
||||
const String *backupLabel; // backupLabel must be first to allow for built-in list sorting
|
||||
unsigned int backrestFormat;
|
||||
const String *backrestVersion;
|
||||
Variant *backupAnnotation; // Backup annotations, if present
|
||||
const String *backupArchiveStart;
|
||||
const String *backupArchiveStop;
|
||||
uint64_t backupInfoRepoSize;
|
||||
@ -136,6 +137,9 @@ Functions
|
||||
// Add backup to the current list
|
||||
void infoBackupDataAdd(const InfoBackup *this, const Manifest *manifest);
|
||||
|
||||
// Set Annotation in the backup data for a specific backup label
|
||||
void infoBackupDataAnnotationSet(const InfoBackup *this, const String *const backupLabel, const KeyValue *annotationKv);
|
||||
|
||||
// Delete backup from the current backup list
|
||||
void infoBackupDataDelete(const InfoBackup *this, const String *backupDeleteLabel);
|
||||
|
||||
|
@ -1507,7 +1507,7 @@ manifestBuildComplete(
|
||||
const time_t timestampStop, const String *const lsnStop, const String *const archiveStop, const unsigned int pgId,
|
||||
const uint64_t pgSystemId, const Pack *const dbList, const bool optionArchiveCheck, const bool optionArchiveCopy,
|
||||
const size_t optionBufferSize, const unsigned int optionCompressLevel, const unsigned int optionCompressLevelNetwork,
|
||||
const bool optionHardLink, const unsigned int optionProcessMax, const bool optionStandby)
|
||||
const bool optionHardLink, const unsigned int optionProcessMax, const bool optionStandby, const KeyValue *const annotation)
|
||||
{
|
||||
FUNCTION_LOG_BEGIN(logLevelDebug);
|
||||
FUNCTION_LOG_PARAM(MANIFEST, this);
|
||||
@ -1528,6 +1528,7 @@ manifestBuildComplete(
|
||||
FUNCTION_LOG_PARAM(BOOL, optionHardLink);
|
||||
FUNCTION_LOG_PARAM(UINT, optionProcessMax);
|
||||
FUNCTION_LOG_PARAM(BOOL, optionStandby);
|
||||
FUNCTION_LOG_PARAM(KEY_VALUE, annotation);
|
||||
FUNCTION_LOG_END();
|
||||
|
||||
MEM_CONTEXT_BEGIN(this->pub.memContext)
|
||||
@ -1564,6 +1565,29 @@ manifestBuildComplete(
|
||||
lstSort(this->pub.dbList, sortOrderAsc);
|
||||
}
|
||||
|
||||
// Save annotations
|
||||
if (annotation != NULL)
|
||||
{
|
||||
this->pub.data.annotation = varNewKv(kvNew());
|
||||
|
||||
KeyValue *const manifestAnnotationKv = varKv(this->pub.data.annotation);
|
||||
const VariantList *const annotationKeyList = kvKeyList(annotation);
|
||||
|
||||
for (unsigned int keyIdx = 0; keyIdx < varLstSize(annotationKeyList); keyIdx++)
|
||||
{
|
||||
const Variant *const key = varLstGet(annotationKeyList, keyIdx);
|
||||
const Variant *const value = kvGet(annotation, key);
|
||||
|
||||
// Skip empty values
|
||||
if (!strEmpty(varStr(value)))
|
||||
kvPut(manifestAnnotationKv, key, value);
|
||||
}
|
||||
|
||||
// Clean field if there are no annotations to save
|
||||
if (varLstSize(kvKeyList(manifestAnnotationKv)) == 0)
|
||||
this->pub.data.annotation = NULL;
|
||||
}
|
||||
|
||||
// Save options
|
||||
this->pub.data.backupOptionArchiveCheck = optionArchiveCheck;
|
||||
this->pub.data.backupOptionArchiveCopy = optionArchiveCopy;
|
||||
@ -1589,6 +1613,7 @@ manifestBuildComplete(
|
||||
#define MANIFEST_SECTION_BACKUP_TARGET "backup:target"
|
||||
|
||||
#define MANIFEST_SECTION_DB "db"
|
||||
#define MANIFEST_SECTION_METADATA "metadata"
|
||||
|
||||
#define MANIFEST_SECTION_TARGET_FILE "target:file"
|
||||
#define MANIFEST_SECTION_TARGET_FILE_DEFAULT "target:file:default"
|
||||
@ -1597,6 +1622,7 @@ manifestBuildComplete(
|
||||
#define MANIFEST_SECTION_TARGET_PATH "target:path"
|
||||
#define MANIFEST_SECTION_TARGET_PATH_DEFAULT "target:path:default"
|
||||
|
||||
#define MANIFEST_KEY_ANNOTATION "annotation"
|
||||
#define MANIFEST_KEY_BACKUP_ARCHIVE_START "backup-archive-start"
|
||||
#define MANIFEST_KEY_BACKUP_ARCHIVE_STOP "backup-archive-stop"
|
||||
#define MANIFEST_KEY_BACKUP_BUNDLE "backup-bundle"
|
||||
@ -1968,6 +1994,17 @@ manifestLoadCallback(void *callbackData, const String *const section, const Stri
|
||||
manifestDbAdd(manifest, &db);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
else if (strEqZ(section, MANIFEST_SECTION_METADATA))
|
||||
{
|
||||
MEM_CONTEXT_BEGIN(manifest->pub.memContext)
|
||||
{
|
||||
if (strEqZ(key, MANIFEST_KEY_ANNOTATION))
|
||||
manifest->pub.data.annotation = jsonToVar(value);
|
||||
}
|
||||
MEM_CONTEXT_END();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
else if (strEqZ(section, MANIFEST_SECTION_BACKUP))
|
||||
{
|
||||
@ -2398,6 +2435,17 @@ manifestSaveCallback(void *const callbackData, const String *const sectionNext,
|
||||
MEM_CONTEXT_TEMP_END();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
if (infoSaveSection(infoSaveData, MANIFEST_SECTION_METADATA, sectionNext))
|
||||
{
|
||||
if (manifest->pub.data.annotation != NULL)
|
||||
{
|
||||
infoSaveValue(
|
||||
infoSaveData, MANIFEST_SECTION_METADATA, MANIFEST_KEY_ANNOTATION,
|
||||
jsonFromVar(manifest->pub.data.annotation));
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
if (infoSaveSection(infoSaveData, MANIFEST_SECTION_TARGET_FILE, sectionNext))
|
||||
{
|
||||
|
@ -67,6 +67,8 @@ typedef struct ManifestData
|
||||
uint64_t pgSystemId; // PostgreSQL system identifier
|
||||
unsigned int pgCatalogVersion; // PostgreSQL catalog version
|
||||
|
||||
const Variant *annotation; // Backup annotation(s) metadata
|
||||
|
||||
bool backupOptionArchiveCheck; // Will WAL segments be checked at the end of the backup?
|
||||
bool backupOptionArchiveCopy; // Will WAL segments be copied to the backup?
|
||||
const Variant *backupOptionStandby; // Will the backup be performed from a standby?
|
||||
@ -216,7 +218,8 @@ void manifestBuildComplete(
|
||||
Manifest *this, time_t timestampStart, const String *lsnStart, const String *archiveStart, time_t timestampStop,
|
||||
const String *lsnStop, const String *archiveStop, unsigned int pgId, uint64_t pgSystemId, const Pack *dbList,
|
||||
bool optionArchiveCheck, bool optionArchiveCopy, size_t optionBufferSize, unsigned int optionCompressLevel,
|
||||
unsigned int optionCompressLevelNetwork, bool optionHardLink, unsigned int optionProcessMax, bool optionStandby);
|
||||
unsigned int optionCompressLevelNetwork, bool optionHardLink, unsigned int optionProcessMax, bool optionStandby,
|
||||
const KeyValue *annotation);
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Functions
|
||||
|
@ -7,6 +7,7 @@ Main
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "command/annotate/annotate.h"
|
||||
#include "command/archive/get/get.h"
|
||||
#include "command/archive/push/push.h"
|
||||
#include "command/backup/backup.h"
|
||||
@ -133,6 +134,12 @@ main(int argListSize, const char *argList[])
|
||||
{
|
||||
switch (cfgCommand())
|
||||
{
|
||||
// Annotate command
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
case cfgCmdAnnotate:
|
||||
cmdAnnotate();
|
||||
break;
|
||||
|
||||
// Archive get command
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
case cfgCmdArchiveGet:
|
||||
|
@ -91,6 +91,7 @@ subdir('postgres')
|
||||
# pgBackRest target
|
||||
####################################################################################################################################
|
||||
src_pgbackrest = [
|
||||
'command/annotate/annotate.c',
|
||||
'command/archive/common.c',
|
||||
'command/archive/get/file.c',
|
||||
'command/archive/get/get.c',
|
||||
|
@ -695,6 +695,13 @@ unit:
|
||||
- command/control/start
|
||||
- command/control/stop
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------------------------
|
||||
- name: annotate
|
||||
total: 1
|
||||
|
||||
coverage:
|
||||
- command/annotate/annotate
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------------------------
|
||||
- name: archive-common
|
||||
total: 9
|
||||
|
215
test/src/module/command/annotateTest.c
Normal file
215
test/src/module/command/annotateTest.c
Normal file
@ -0,0 +1,215 @@
|
||||
/***********************************************************************************************************************************
|
||||
Test Annotate Command
|
||||
***********************************************************************************************************************************/
|
||||
#include "common/io/bufferRead.h"
|
||||
#include "common/io/bufferWrite.h"
|
||||
#include "storage/posix/storage.h"
|
||||
|
||||
#include "common/harnessConfig.h"
|
||||
#include "common/harnessInfo.h"
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Test Run
|
||||
***********************************************************************************************************************************/
|
||||
static void
|
||||
testRun(void)
|
||||
{
|
||||
FUNCTION_HARNESS_VOID();
|
||||
|
||||
// *****************************************************************************************************************************
|
||||
if (testBegin("cmdAnnotate()"))
|
||||
{
|
||||
StringList *argList = strLstNew();
|
||||
hrnCfgArgRawZ(argList, cfgOptRepoPath, TEST_PATH "/repo");
|
||||
hrnCfgArgRawZ(argList, cfgOptStanza, "stanza1");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("backup.info file missing");
|
||||
|
||||
StringList *argListAnnotation = strLstDup(argList);
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptAnnotation, "key1=value1");
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptRepo, "1");
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptSet, "20201116-200000F");
|
||||
HRN_CFG_LOAD(cfgCmdAnnotate, argListAnnotation);
|
||||
|
||||
TEST_ERROR(
|
||||
cmdAnnotate(), CommandError, CFGCMD_ANNOTATE " command encountered 1 error(s), check the log file for details");
|
||||
|
||||
TEST_RESULT_LOG(
|
||||
"P00 ERROR: [055]: repo1: unable to load info file '" TEST_PATH "/repo/backup/stanza1/backup.info' or"
|
||||
" '" TEST_PATH "/repo/backup/stanza1/backup.info.copy':\n"
|
||||
" FileMissingError: unable to open missing file '" TEST_PATH "/repo/backup/stanza1/backup.info' for read\n"
|
||||
" FileMissingError: unable to open missing file '" TEST_PATH
|
||||
"/repo/backup/stanza1/backup.info.copy' for read\n"
|
||||
" HINT: backup.info cannot be opened and is required to perform a backup.\n"
|
||||
" HINT: has a stanza-create been performed?");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("annotate backup success");
|
||||
|
||||
// Add backup info
|
||||
HRN_INFO_PUT(
|
||||
storageRepoWrite(), STORAGE_REPO_BACKUP "/" INFO_BACKUP_FILE,
|
||||
"[db]\n"
|
||||
"db-catalog-version=201510051\n"
|
||||
"db-control-version=942\n"
|
||||
"db-id=1\n"
|
||||
"db-system-id=6626363367545678089\n"
|
||||
"db-version=\"9.5\"\n"
|
||||
"\n"
|
||||
"[backup:current]\n"
|
||||
"20201116-200000F={\"backrest-format\":5,\"backrest-version\":\"2.30\","
|
||||
"\"backup-archive-start\":\"000000010000000000000004\",\"backup-archive-stop\":\"000000010000000000000004\","
|
||||
"\"backup-error\":true,"
|
||||
"\"backup-info-repo-size\":3159000,\"backup-info-repo-size-delta\":3100,\"backup-info-size\":26897000,"
|
||||
"\"backup-info-size-delta\":26897020,\"backup-timestamp-start\":1605556800,\"backup-timestamp-stop\":1605556802,"
|
||||
"\"backup-type\":\"full\",\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,"
|
||||
"\"option-backup-standby\":false,\"option-checksum-page\":false,\"option-compress\":false,\"option-hardlink\":true,"
|
||||
"\"option-online\":true}\n"
|
||||
"\n"
|
||||
"[db:history]\n"
|
||||
"1={\"db-catalog-version\":201510051,\"db-control-version\":942,\"db-system-id\":6626363367545678089,"
|
||||
"\"db-version\":\"9.5\"}\n",
|
||||
.comment = "write backup info - stanza1, repo1");
|
||||
|
||||
// Add backup manifest
|
||||
#define TEST_MANIFEST_HEADER \
|
||||
"[backup]\n" \
|
||||
"backup-archive-start=\"000000010000000000000004\"\n" \
|
||||
"backup-archive-stop=\"000000010000000000000004\"\n" \
|
||||
"backup-label=\"20201116-200000F\"\n" \
|
||||
"backup-timestamp-copy-start=1605556800\n" \
|
||||
"backup-timestamp-start=1605556800\n" \
|
||||
"backup-timestamp-stop=1605556802\n" \
|
||||
"backup-type=\"full\"\n" \
|
||||
"\n" \
|
||||
"[backup:db]\n" \
|
||||
"db-catalog-version=201510051\n" \
|
||||
"db-control-version=942\n" \
|
||||
"db-id=1\n" \
|
||||
"db-system-id=6626363367545678089\n" \
|
||||
"db-version=\"9.5\"\n" \
|
||||
"\n" \
|
||||
"[backup:option]\n" \
|
||||
"option-archive-check=true\n" \
|
||||
"option-archive-copy=false\n" \
|
||||
"option-backup-standby=false\n" \
|
||||
"option-buffer-size=16384\n" \
|
||||
"option-checksum-page=false\n" \
|
||||
"option-compress=false\n" \
|
||||
"option-compress-level=3\n" \
|
||||
"option-compress-level-network=3\n" \
|
||||
"option-delta=false\n" \
|
||||
"option-hardlink=true\n" \
|
||||
"option-online=true\n" \
|
||||
"option-process-max=32\n" \
|
||||
|
||||
#define TEST_MANIFEST_TARGET \
|
||||
"\n" \
|
||||
"[backup:target]\n" \
|
||||
"pg_data={\"path\":\"/pg/base\",\"type\":\"path\"}\n" \
|
||||
"pg_data/pg_hba.conf={\"file\":\"pg_hba.conf\",\"path\":\"../pg_config\",\"type\":\"link\"}\n" \
|
||||
"pg_data/pg_stat={\"path\":\"../pg_stat\",\"type\":\"link\"}\n" \
|
||||
"pg_tblspc/1={\"path\":\"/tblspc/ts1\",\"tablespace-id\":\"1\",\"tablespace-name\":\"ts1\",\"type\":\"link\"}\n" \
|
||||
"pg_tblspc/12={\"path\":\"/tblspc/ts12\",\"tablespace-id\":\"12\",\"tablespace-name\":\"ts12\",\"type\":\"link\"}\n" \
|
||||
|
||||
#define TEST_MANIFEST_DB \
|
||||
"\n" \
|
||||
"[db]\n" \
|
||||
"mail={\"db-id\":16456,\"db-last-system-id\":12168}\n" \
|
||||
"postgres={\"db-id\":12173,\"db-last-system-id\":12168}\n" \
|
||||
"template0={\"db-id\":12168,\"db-last-system-id\":12168}\n" \
|
||||
"template1={\"db-id\":1,\"db-last-system-id\":12168}\n" \
|
||||
|
||||
#define TEST_MANIFEST_FILE \
|
||||
"\n" \
|
||||
"[target:file]\n" \
|
||||
"pg_data/PG_VERSION={\"checksum\":\"184473f470864e067ee3a22e64b47b0a1c356f29\"" \
|
||||
",\"reference\":\"20190818-084502F_20190819-084506D\",\"size\":4,\"timestamp\":1565282114}\n" \
|
||||
"pg_data/base/16384/17000={\"checksum\":\"e0101dd8ffb910c9c202ca35b5f828bcb9697bed\",\"checksum-page\":false" \
|
||||
",\"checksum-page-error\":[1],\"repo-size\":4096,\"size\":8192,\"timestamp\":1565282114}\n" \
|
||||
"pg_data/base/16384/PG_VERSION={\"checksum\":\"184473f470864e067ee3a22e64b47b0a1c356f29\",\"group\":false,\"size\":4" \
|
||||
",\"timestamp\":1565282115}\n" \
|
||||
"pg_data/base/32768/33000={\"checksum\":\"7a16d165e4775f7c92e8cdf60c0af57313f0bf90\",\"checksum-page\":true" \
|
||||
",\"reference\":\"20190818-084502F\",\"size\":1073741824,\"timestamp\":1565282116}\n" \
|
||||
"pg_data/base/32768/33000.32767={\"checksum\":\"6e99b589e550e68e934fd235ccba59fe5b592a9e\",\"checksum-page\":true" \
|
||||
",\"reference\":\"20190818-084502F\",\"size\":32768,\"timestamp\":1565282114}\n" \
|
||||
"pg_data/postgresql.conf={\"checksum\":\"6721d92c9fcdf4248acff1f9a1377127d9064807\",\"size\":4457" \
|
||||
",\"timestamp\":1565282114}\n" \
|
||||
"pg_data/special={\"mode\":\"0640\",\"size\":0,\"timestamp\":1565282120,\"user\":false}\n" \
|
||||
|
||||
#define TEST_MANIFEST_FILE_DEFAULT \
|
||||
"\n" \
|
||||
"[target:file:default]\n" \
|
||||
"group=\"group1\"\n" \
|
||||
"mode=\"0600\"\n" \
|
||||
"user=\"user1\"\n" \
|
||||
|
||||
#define TEST_MANIFEST_LINK \
|
||||
"\n" \
|
||||
"[target:link]\n" \
|
||||
"pg_data/pg_stat={\"destination\":\"../pg_stat\"}\n" \
|
||||
"pg_data/postgresql.conf={\"destination\":\"../pg_config/postgresql.conf\",\"group\":false,\"user\":\"user1\"}\n" \
|
||||
|
||||
#define TEST_MANIFEST_LINK_DEFAULT \
|
||||
"\n" \
|
||||
"[target:link:default]\n" \
|
||||
"group=\"group1\"\n" \
|
||||
"user=false\n" \
|
||||
|
||||
#define TEST_MANIFEST_PATH \
|
||||
"\n" \
|
||||
"[target:path]\n" \
|
||||
"pg_data={\"user\":\"user2\"}\n" \
|
||||
"pg_data/base={\"group\":\"group2\"}\n" \
|
||||
"pg_data/base/16384={\"mode\":\"0750\"}\n" \
|
||||
"pg_data/base/32768={}\n" \
|
||||
"pg_data/base/65536={\"user\":false}\n" \
|
||||
|
||||
#define TEST_MANIFEST_PATH_DEFAULT \
|
||||
"\n" \
|
||||
"[target:path:default]\n" \
|
||||
"group=false\n" \
|
||||
"mode=\"0700\"\n" \
|
||||
"user=\"user1\"\n" \
|
||||
|
||||
// Create manifest file
|
||||
HRN_INFO_PUT(
|
||||
storageRepoWrite(), STORAGE_REPO_BACKUP "/20201116-200000F/" BACKUP_MANIFEST_FILE,
|
||||
TEST_MANIFEST_HEADER
|
||||
TEST_MANIFEST_TARGET
|
||||
TEST_MANIFEST_DB
|
||||
TEST_MANIFEST_FILE
|
||||
TEST_MANIFEST_FILE_DEFAULT
|
||||
TEST_MANIFEST_LINK
|
||||
TEST_MANIFEST_LINK_DEFAULT
|
||||
TEST_MANIFEST_PATH
|
||||
TEST_MANIFEST_PATH_DEFAULT,
|
||||
.comment = "write backup manifest - stanza1, repo1");
|
||||
|
||||
TEST_RESULT_VOID(cmdAnnotate(), "annotate 20201116-200000F backup set");
|
||||
TEST_RESULT_LOG("P00 INFO: backup set '20201116-200000F' to annotate found in repo1");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("wrong backup label format");
|
||||
|
||||
argListAnnotation = strLstDup(argList);
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptAnnotation, "key1=value1");
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptSet, "backuplabel");
|
||||
HRN_CFG_LOAD(cfgCmdAnnotate, argListAnnotation);
|
||||
|
||||
TEST_ERROR(cmdAnnotate(), OptionInvalidValueError, "'backuplabel' is not a valid backup label format");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("backup set not found");
|
||||
|
||||
argListAnnotation = strLstDup(argList);
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptAnnotation, "key1=value1");
|
||||
hrnCfgArgRawZ(argListAnnotation, cfgOptSet, "20201116-200001F");
|
||||
HRN_CFG_LOAD(cfgCmdAnnotate, argListAnnotation);
|
||||
|
||||
TEST_ERROR(cmdAnnotate(), BackupSetInvalidError, "no backup set to annotate found");
|
||||
}
|
||||
|
||||
FUNCTION_HARNESS_RETURN_VOID();
|
||||
}
|
@ -3133,7 +3133,7 @@ testRun(void)
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("online 11 full backup with tablespaces and bundles");
|
||||
TEST_TITLE("online 11 full backup with tablespaces, bundles and annotations");
|
||||
|
||||
backupTimeStart = BACKUP_EPOCH + 2400000;
|
||||
|
||||
@ -3150,6 +3150,8 @@ testRun(void)
|
||||
hrnCfgArgRawZ(argList, cfgOptBufferSize, "16K");
|
||||
hrnCfgArgRawBool(argList, cfgOptRepoBundle, true);
|
||||
hrnCfgArgRawBool(argList, cfgOptResume, false);
|
||||
hrnCfgArgRawZ(argList, cfgOptAnnotation, "extra key=this is an annotation");
|
||||
hrnCfgArgRawZ(argList, cfgOptAnnotation, "source=this is another annotation");
|
||||
HRN_CFG_LOAD(cfgCmdBackup, argList);
|
||||
|
||||
// Set to a smaller values than the defaults allow
|
||||
@ -3227,6 +3229,9 @@ testRun(void)
|
||||
"pg_tblspc/32768={\"path\":\"../../pg1-tblspc/32768\",\"tablespace-id\":\"32768\""
|
||||
",\"tablespace-name\":\"tblspc32768\",\"type\":\"link\"}\n"
|
||||
"\n"
|
||||
"[metadata]\n"
|
||||
"annotation={\"extra key\":\"this is an annotation\",\"source\":\"this is another annotation\"}\n"
|
||||
"\n"
|
||||
"[target:file]\n"
|
||||
"pg_data/PG_VERSION={\"checksum\":\"17ba0791499db908433b80f37c5fbc89b870084b\",\"size\":2"
|
||||
",\"timestamp\":1572200000}\n"
|
||||
|
@ -52,6 +52,7 @@ testRun(void)
|
||||
" pgbackrest [options] [command]\n"
|
||||
"\n"
|
||||
"Commands:\n"
|
||||
" annotate Add or modify backup annotation.\n"
|
||||
" archive-get Get a WAL segment from the archive.\n"
|
||||
" archive-push Push a WAL segment to the archive.\n"
|
||||
" backup Backup a database cluster.\n"
|
||||
|
@ -652,7 +652,8 @@ testRun(void)
|
||||
"\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false,"
|
||||
"\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n"
|
||||
"20181119-152138F_20181119-152155I={"
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000003\","
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.08dev\","
|
||||
"\"backup-archive-start\":\"000000010000000000000003\","
|
||||
"\"backup-info-repo-size\":2369186,"
|
||||
"\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428,"
|
||||
"\"backup-lsn-start\":\"285/89000028\",\"backup-lsn-stop\":\"285/89001F88\","
|
||||
@ -671,6 +672,7 @@ testRun(void)
|
||||
"\"option-online\":true}\n"
|
||||
"20201116-155000F_20201119-152100I={"
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.30\","
|
||||
"\"backup-annotation\":{\"extra key\":\"this is an annotation\",\"source\":\"this is another annotation\"},"
|
||||
"\"backup-archive-start\":\"000000010000000000000005\",\"backup-archive-stop\":\"000000010000000000000005\","
|
||||
"\"backup-error\":false,\"backup-info-repo-size\":2369186,"
|
||||
"\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428,"
|
||||
@ -1228,6 +1230,10 @@ testRun(void)
|
||||
"\"type\":\"full\""
|
||||
"},"
|
||||
"{"
|
||||
"\"annotation\":{"
|
||||
"\"extra key\":\"this is an annotation\","
|
||||
"\"source\":\"this is another annotation\""
|
||||
"},"
|
||||
"\"archive\":{"
|
||||
"\"start\":\"000000010000000000000005\","
|
||||
"\"stop\":\"000000010000000000000005\""
|
||||
@ -1856,7 +1862,10 @@ testRun(void)
|
||||
" database size: 19.2MB, database backup size: 8.2KB\n"
|
||||
" repo1: backup set size: 2.3MB, backup size: 346B\n"
|
||||
" backup reference list: 20201116-155000F\n"
|
||||
" database list: none\n",
|
||||
" database list: none\n"
|
||||
" annotation(s)\n"
|
||||
" extra key: this is an annotation\n"
|
||||
" source: this is another annotation\n",
|
||||
"text - backup set requested, no lsn start/stop location");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
@ -2071,6 +2080,63 @@ testRun(void)
|
||||
" backup reference list: 20201116-155000F\n",
|
||||
"text - multi-repo, prior backup: no archives but backups (code coverage)");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("Annotation assert not null value");
|
||||
|
||||
argList2 = strLstDup(argListMultiRepo);
|
||||
hrnCfgArgRawZ(argList2, cfgOptStanza, "stanza1");
|
||||
hrnCfgArgRawZ(argList2, cfgOptSet, "20181119-152138F_20181119-152155I");
|
||||
hrnCfgArgRawZ(argList2, cfgOptRepo, "1");
|
||||
HRN_CFG_LOAD(cfgCmdInfo, argList2);
|
||||
|
||||
HRN_INFO_PUT(
|
||||
storageTest, TEST_PATH "/repo/" STORAGE_PATH_BACKUP "/stanza1/" INFO_BACKUP_FILE,
|
||||
"[backup:current]\n"
|
||||
"20181119-152138F={"
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.08dev\","
|
||||
"\"backup-archive-start\":\"000000010000000000000002\",\"backup-archive-stop\":\"000000010000000000000002\","
|
||||
"\"backup-info-repo-size\":2369186,\"backup-info-repo-size-delta\":2369186,"
|
||||
"\"backup-info-size\":20162900,\"backup-info-size-delta\":20162900,"
|
||||
"\"backup-timestamp-start\":1542640898,\"backup-timestamp-stop\":1542640899,\"backup-type\":\"full\","
|
||||
"\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false,"
|
||||
"\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n"
|
||||
"20181119-152138F_20181119-152152D={"
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.08dev\",\"backup-archive-start\":\"000000010000000000000003\","
|
||||
"\"backup-archive-stop\":\"000000020000000000000003\",\"backup-info-repo-size\":2369186,"
|
||||
"\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428,"
|
||||
"\"backup-prior\":\"20181119-152138F\",\"backup-reference\":[\"20181119-152138F\"],"
|
||||
"\"backup-timestamp-start\":1542640912,\"backup-timestamp-stop\":1542640915,\"backup-type\":\"diff\","
|
||||
"\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false,"
|
||||
"\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n"
|
||||
"20181119-152138F_20181119-152155I={"
|
||||
"\"backrest-format\":5,\"backrest-version\":\"2.08dev\","
|
||||
"\"backup-annotation\":{\"key1\":null},"
|
||||
"\"backup-archive-start\":\"000000010000000000000003\","
|
||||
"\"backup-info-repo-size\":2369186,"
|
||||
"\"backup-info-repo-size-delta\":346,\"backup-info-size\":20162900,\"backup-info-size-delta\":8428,"
|
||||
"\"backup-lsn-start\":\"285/89000028\",\"backup-lsn-stop\":\"285/89001F88\","
|
||||
"\"backup-prior\":\"20181119-152138F_20181119-152152D\","
|
||||
"\"backup-reference\":[\"20181119-152138F\",\"20181119-152138F_20181119-152152D\"],"
|
||||
"\"backup-timestamp-start\":1542640915,\"backup-timestamp-stop\":1542640917,\"backup-type\":\"incr\","
|
||||
"\"db-id\":1,\"option-archive-check\":true,\"option-archive-copy\":false,\"option-backup-standby\":false,"
|
||||
"\"option-checksum-page\":true,\"option-compress\":true,\"option-hardlink\":false,\"option-online\":true}\n"
|
||||
"\n"
|
||||
"[db]\n"
|
||||
"db-catalog-version=201510051\n"
|
||||
"db-control-version=942\n"
|
||||
"db-id=2\n"
|
||||
"db-system-id=6626363367545678089\n"
|
||||
"db-version=\"9.5\"\n"
|
||||
"\n"
|
||||
"[db:history]\n"
|
||||
"1={\"db-catalog-version\":201409291,\"db-control-version\":942,\"db-system-id\":6625592122879095702,"
|
||||
"\"db-version\":\"9.4\"}\n"
|
||||
"2={\"db-catalog-version\":201510051,\"db-control-version\":942,\"db-system-id\":6626363367545678089,"
|
||||
"\"db-version\":\"9.5\"}\n",
|
||||
.comment = "put backup info to file - stanza1, repo1");
|
||||
|
||||
TEST_ERROR(infoRender(), AssertError, "assertion 'value != NULL' failed");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("multi-repo, stanza requested does not exist, but other stanzas do");
|
||||
|
||||
|
@ -23,7 +23,7 @@ testRun(void)
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------------------
|
||||
if (testBegin("kvPut(), kvAdd(), kvKeyExists(), kvKeyList(), kvGet(), kvGetDefault(), kvGetList(), and kvDup()"))
|
||||
if (testBegin("kvPut(), kvAdd(), kvKeyExists(), kvKeyList(), kvGet(), kvGetDefault(), kvGetList(), kvDup(), and kvRemove()"))
|
||||
{
|
||||
KeyValue *store = NULL;
|
||||
|
||||
@ -105,6 +105,16 @@ testRun(void)
|
||||
varStr(kvGet(varKv(kvGet(storeDup, VARSTRDEF("kv-key"))), VARSTRDEF("str-sub-key"))),
|
||||
"str-sub-value", "get string/kv");
|
||||
|
||||
// Remove a kv
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
const Variant *key = VARSTRDEF("str-key-to-remove");
|
||||
|
||||
kvPut(store, key, VARSTRDEF("str-value"));
|
||||
TEST_RESULT_STR_Z(varStr(kvGet(store, key)), "str-value", "get string/kv");
|
||||
TEST_RESULT_PTR(kvRemove(store, key), store, "remove string/kv");
|
||||
TEST_RESULT_BOOL(kvKeyExists(store, key), false, "key does not exist");
|
||||
TEST_RESULT_PTR(kvRemove(store, key), store, "don't fail to remove key that doesn't exist");
|
||||
|
||||
TEST_RESULT_VOID(kvFree(storeDup), "free dup store");
|
||||
TEST_RESULT_VOID(kvFree(store), "free store");
|
||||
}
|
||||
|
@ -456,6 +456,27 @@ testRun(void)
|
||||
TEST_RESULT_UINT(backupData.backupInfoRepoSize, 1073783153, "repo size");
|
||||
TEST_RESULT_UINT(backupData.backupInfoRepoSizeDelta, 8557, "repo backup size");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("infoBackupDataAnnotationSet()");
|
||||
|
||||
KeyValue *annotationKV = kvNew();
|
||||
kvPut(annotationKV, VARSTRDEF("empty key"), VARSTRDEF(""));
|
||||
kvPut(annotationKV, VARSTRDEF("key to remove"), VARSTRDEF("step 1"));
|
||||
TEST_RESULT_VOID(
|
||||
infoBackupDataAnnotationSet(
|
||||
infoBackup, STRDEF("20190818-084502F_20190820-084502I"), annotationKV), "add annotation");
|
||||
|
||||
kvPut(annotationKV, VARSTRDEF("key to remove"), VARSTRDEF(""));
|
||||
TEST_RESULT_VOID(
|
||||
infoBackupDataAnnotationSet(
|
||||
infoBackup, STRDEF("20190818-084502F_20190820-084502I"), annotationKV), "remove empty annotation");
|
||||
|
||||
kvPut(annotationKV, VARSTRDEF("extra key"), VARSTRDEF("this is an annotation"));
|
||||
kvPut(annotationKV, VARSTRDEF("source"), VARSTRDEF("this is another annotation"));
|
||||
TEST_RESULT_VOID(
|
||||
infoBackupDataAnnotationSet(
|
||||
infoBackup, STRDEF("20190818-084502F_20190820-084502I"), annotationKV), "add annotations");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("infoBackupLoadFileReconstruct - skip/add backups");
|
||||
|
||||
|
@ -1491,6 +1491,11 @@ testRun(void)
|
||||
"template1={\"db-id\":1,\"db-last-system-id\":99999}\n" \
|
||||
SHRUG_EMOJI "={\"db-id\":18000,\"db-last-system-id\":99999}\n"
|
||||
|
||||
#define TEST_MANIFEST_METADATA \
|
||||
"\n" \
|
||||
"[metadata]\n" \
|
||||
"annotation={\"extra key\":\"this is an annotation\",\"source\":\"this is another annotation\"}\n"
|
||||
|
||||
#define TEST_MANIFEST_FILE \
|
||||
"\n" \
|
||||
"[target:file]\n" \
|
||||
@ -1628,9 +1633,19 @@ testRun(void)
|
||||
TEST_TITLE("manifest complete");
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
manifestBuildComplete(manifest, 0, NULL, NULL, 0, NULL, NULL, 0, 0, NULL, false, false, 0, 0, 0, false, 0, false),
|
||||
manifestBuildComplete(manifest, 0, NULL, NULL, 0, NULL, NULL, 0, 0, NULL, false, false, 0, 0, 0, false, 0, false, NULL),
|
||||
"manifest complete without db");
|
||||
|
||||
// Create empty annotations
|
||||
KeyValue *annotationKV = kvNew();
|
||||
kvPut(annotationKV, VARSTRDEF("empty key"), VARSTRDEF(""));
|
||||
kvPut(annotationKV, VARSTRDEF("empty key2"), VARSTRDEF(""));
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
manifestBuildComplete(
|
||||
manifest, 0, NULL, NULL, 0, NULL, NULL, 0, 0, NULL, false, false, 0, 0, 0, false, 0, false, annotationKV),
|
||||
"manifest complete without db and empty annotations");
|
||||
|
||||
// Create db list
|
||||
PackWrite *dbList = pckWriteNewP();
|
||||
|
||||
@ -1654,11 +1669,15 @@ testRun(void)
|
||||
|
||||
pckWriteEndP(dbList);
|
||||
|
||||
// Add annotations
|
||||
kvPut(annotationKV, VARSTRDEF("extra key"), VARSTRDEF("this is an annotation"));
|
||||
kvPut(annotationKV, VARSTRDEF("source"), VARSTRDEF("this is another annotation"));
|
||||
|
||||
TEST_RESULT_VOID(
|
||||
manifestBuildComplete(
|
||||
manifest, 1565282140, STRDEF("285/89000028"), STRDEF("000000030000028500000089"), 1565282142,
|
||||
STRDEF("285/89001F88"), STRDEF("000000030000028500000089"), 1, 1000000000000000094, pckWriteResult(dbList),
|
||||
true, true, 16384, 3, 6, true, 32, false),
|
||||
true, true, 16384, 3, 6, true, 32, false, annotationKV),
|
||||
"manifest complete with db");
|
||||
|
||||
TEST_RESULT_STR_Z(manifestPathPg(STRDEF("pg_data")), NULL, "check pg_data path");
|
||||
@ -1841,6 +1860,7 @@ testRun(void)
|
||||
"[cipher]\n"
|
||||
"cipher-pass=\"supersecret\"\n"
|
||||
TEST_MANIFEST_DB
|
||||
TEST_MANIFEST_METADATA
|
||||
TEST_MANIFEST_FILE
|
||||
TEST_MANIFEST_FILE_DEFAULT
|
||||
TEST_MANIFEST_LINK
|
||||
@ -1921,6 +1941,10 @@ testRun(void)
|
||||
"[ignore-section]\n" \
|
||||
"ignore-key=\"ignore-value\"\n" \
|
||||
"\n" \
|
||||
"[metadata]\n" \
|
||||
"annotation={\"key\":\"value\"}\n" \
|
||||
"ignore-key=\"ignore-value\"\n" \
|
||||
"\n" \
|
||||
"[target:file]\n" \
|
||||
"pg_data/PG_VERSION={\"checksum\":\"184473f470864e067ee3a22e64b47b0a1c356f29\",\"size\":4,\"timestamp\":1565282114}\n" \
|
||||
"\n" \
|
||||
|
Loading…
Reference in New Issue
Block a user