1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-07-15 01:04:37 +02:00

Make --repo optional for remaining commands except stanza-delete.

Some commands (repo-*, verify) still required the --repo option but it makes sense to give them the same treatment as backup and simply use the first repo when one is not specified.

This leaves stanza-delete as the only remaining command that requires --repo. This is by design to enhance safe usage.
This commit is contained in:
David Steele
2021-03-03 09:21:06 -05:00
parent cb26e8c72d
commit 95063f6812
4 changed files with 19 additions and 17 deletions

View File

@ -66,6 +66,7 @@
<commit subject="Make --repo optional for backup command."/> <commit subject="Make --repo optional for backup command."/>
<commit subject="Refactor archive-push command warnings to work like archive-get."/> <commit subject="Refactor archive-push command warnings to work like archive-get."/>
<commit subject="Add write fault-tolerance to archive-push command."/> <commit subject="Add write fault-tolerance to archive-push command."/>
<commit subject="Make --repo optional for remaining commands except stanza-delete."/>
<release-item-contributor-list> <release-item-contributor-list>
<release-item-contributor id="cynthia.shang"/> <release-item-contributor id="cynthia.shang"/>

View File

@ -68,10 +68,9 @@ cfgLoadUpdateOption(void)
{ {
FUNCTION_LOG_VOID(logLevelTrace); FUNCTION_LOG_VOID(logLevelTrace);
// Make sure repo option is set for the default command role when it is not internal and more than one repo is configured or the // Make sure the repo option is set for the stanza-delete command when more than one repo is configured or the first configured
// first configured repo is not key 1. Filter out any commands where this does not apply. // repo is not key 1.
if (!cfgCommandHelp() && cfgCommand() != cfgCmdBackup && cfgCommand() != cfgCmdInfo && cfgCommand() != cfgCmdExpire && if (!cfgCommandHelp() && cfgOptionValid(cfgOptRepo) && cfgCommand() == cfgCmdStanzaDelete &&
cfgCommand() != cfgCmdArchiveGet && cfgCommand() != cfgCmdRestore && cfgOptionValid(cfgOptRepo) &&
!cfgOptionTest(cfgOptRepo) && (cfgOptionGroupIdxTotal(cfgOptGrpRepo) > 1 || cfgOptionGroupIdxToKey(cfgOptGrpRepo, 0) != 1)) !cfgOptionTest(cfgOptRepo) && (cfgOptionGroupIdxTotal(cfgOptGrpRepo) > 1 || cfgOptionGroupIdxToKey(cfgOptGrpRepo, 0) != 1))
{ {
THROW_FMT( THROW_FMT(

View File

@ -190,7 +190,9 @@ testRun(void)
// File // File
// ------------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------------
argList = strLstNew(); argList = strLstNew();
strLstAdd(argList, strNewFmt("--repo-path=%s/repo/aaa", testPath())); hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 1, TEST_PATH "/bogus");
hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 2, TEST_PATH_REPO "/aaa");
hrnCfgArgRawZ(argList, cfgOptRepo, "2");
strLstAddZ(argList, "--output=json"); strLstAddZ(argList, "--output=json");
harnessCfgLoad(cfgCmdRepoLs, argList); harnessCfgLoad(cfgCmdRepoLs, argList);
@ -228,6 +230,7 @@ testRun(void)
// Needed for tests // Needed for tests
setenv("PGBACKREST_REPO1_CIPHER_PASS", "xxx", true); setenv("PGBACKREST_REPO1_CIPHER_PASS", "xxx", true);
setenv("PGBACKREST_REPO2_CIPHER_PASS", "xxx", true);
// Test files and buffers // Test files and buffers
const String *fileName = STRDEF("file.txt"); const String *fileName = STRDEF("file.txt");
@ -434,8 +437,10 @@ testRun(void)
TEST_TITLE("put encrypted backup.history manifest"); TEST_TITLE("put encrypted backup.history manifest");
argList = strLstNew(); argList = strLstNew();
hrnCfgArgRawFmt(argList, cfgOptRepoPath, "%s/repo", testPath()); hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 1, TEST_PATH "/bogus");
hrnCfgArgRawZ(argList, cfgOptRepoCipherType, CIPHER_TYPE_AES_256_CBC); hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 2, TEST_PATH_REPO);
hrnCfgArgRawZ(argList, cfgOptRepo, "2");
hrnCfgArgKeyRawZ(argList, cfgOptRepoCipherType, 2, CIPHER_TYPE_AES_256_CBC);
strLstAddZ(argList, "--" CFGOPT_CIPHER_PASS "=custom"); strLstAddZ(argList, "--" CFGOPT_CIPHER_PASS "=custom");
strLstAddZ(argList, STORAGE_PATH_BACKUP "/test/backup.history/2020/label.manifest.gz"); strLstAddZ(argList, STORAGE_PATH_BACKUP "/test/backup.history/2020/label.manifest.gz");
harnessCfgLoad(cfgCmdRepoPut, argList); harnessCfgLoad(cfgCmdRepoPut, argList);
@ -542,7 +547,9 @@ testRun(void)
TEST_TITLE("get file outside of the repo error"); TEST_TITLE("get file outside of the repo error");
argList = strLstNew(); argList = strLstNew();
hrnCfgArgRawFmt(argList, cfgOptRepoPath, "%s/repo", testPath()); hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 1, TEST_PATH "/bogus");
hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 2, TEST_PATH_REPO);
hrnCfgArgRawZ(argList, cfgOptRepo, "2");
hrnCfgArgRawZ(argList, cfgOptRepoCipherType, CIPHER_TYPE_AES_256_CBC); hrnCfgArgRawZ(argList, cfgOptRepoCipherType, CIPHER_TYPE_AES_256_CBC);
strLstAddZ(argList, "/somewhere/" INFO_ARCHIVE_FILE); strLstAddZ(argList, "/somewhere/" INFO_ARCHIVE_FILE);
harnessCfgLoad(cfgCmdRepoGet, argList); harnessCfgLoad(cfgCmdRepoGet, argList);
@ -757,7 +764,9 @@ testRun(void)
TEST_TITLE("remove file"); TEST_TITLE("remove file");
argList = strLstNew(); argList = strLstNew();
strLstAdd(argList, strNewFmt("--repo-path=%s/repo", testPath())); hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 1, TEST_PATH "/bogus");
hrnCfgArgKeyRawZ(argList, cfgOptRepoPath, 2, TEST_PATH_REPO);
hrnCfgArgRawZ(argList, cfgOptRepo, "2");
strLstAddZ(argList, "path/aaa.txt"); strLstAddZ(argList, "path/aaa.txt");
harnessCfgLoad(cfgCmdRepoRm, argList); harnessCfgLoad(cfgCmdRepoRm, argList);

View File

@ -938,16 +938,9 @@ testRun(void)
if (testBegin("cmdVerify(), verifyProcess() - errors")) if (testBegin("cmdVerify(), verifyProcess() - errors"))
{ {
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
// Load Parameters with multi-repo
StringList *argList = strLstDup(argListBase); StringList *argList = strLstDup(argListBase);
hrnCfgArgKeyRawFmt(argList, cfgOptRepoPath, 4, "%s/repo4", testPath()); hrnCfgArgKeyRawFmt(argList, cfgOptRepoPath, 4, "%s/repo4", testPath());
TEST_ERROR_FMT(
harnessCfgLoad(cfgCmdVerify, argList), OptionRequiredError, "verify command requires option: repo\n"
"HINT: this command requires a specific repository to operate on");
//--------------------------------------------------------------------------------------------------------------------------
// Load Parameters with multi-repo
hrnCfgArgRawZ(argList, cfgOptRepo, "1");
harnessCfgLoad(cfgCmdVerify, argList); harnessCfgLoad(cfgCmdVerify, argList);
// Store valid archive/backup info files // Store valid archive/backup info files