1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-06-27 00:21:08 +02:00

Fix issue passing --no-config to embedded Perl.

Reported by Ibrahim Edib Kokdemir.
This commit is contained in:
David Steele
2018-03-08 10:43:09 -05:00
parent 5e0ce3e996
commit 62a9bdbd4c
3 changed files with 58 additions and 32 deletions

View File

@ -22,6 +22,14 @@
<p>Fix <br-option>--target-action</br-option> and <br-option>--recovery-option</br-option> options being reported as invalid when restoring with <br-option>--type=immediate</br-option>.</p> <p>Fix <br-option>--target-action</br-option> and <br-option>--recovery-option</br-option> options being reported as invalid when restoring with <br-option>--type=immediate</br-option>.</p>
</release-item> </release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="kokdemir.ibrahim.edib"/>
</release-item-contributor-list>
<p>Fix issue passing <br-option>--no-config</br-option> to embedded Perl.</p>
</release-item>
</release-bug-list> </release-bug-list>
<release-improvement-list> <release-improvement-list>
@ -4198,6 +4206,11 @@
<contributor-id type="github">nikhilchandra-kulkarni</contributor-id> <contributor-id type="github">nikhilchandra-kulkarni</contributor-id>
</contributor> </contributor>
<contributor id="kokdemir.ibrahim.edib">
<contributor-name-display>Ibrahim Edib Kokdemir</contributor-name-display>
<contributor-id type="github">Edib</contributor-id>
</contributor>
<contributor id="lardiere.sebastien"> <contributor id="lardiere.sebastien">
<contributor-name-display>Lardi&amp;egrave;re S&amp;eacute;bastien</contributor-name-display> <contributor-name-display>Lardi&amp;egrave;re S&amp;eacute;bastien</contributor-name-display>
<contributor-id type="github">slardiere</contributor-id> <contributor-id type="github">slardiere</contributor-id>

View File

@ -20,46 +20,50 @@ perlOptionJson()
if (!cfgOptionValid(optionId)) if (!cfgOptionValid(optionId))
continue; continue;
// Output option String *option = strNew("");
if (strSize(result) != 1)
strCat(result, ",");
strCatFmt(result, "\"%s\":{", cfgOptionName(optionId));
// Output source unless it is default // Output source unless it is default
if (cfgOptionSource(optionId) != cfgSourceDefault) if (cfgOptionSource(optionId) != cfgSourceDefault)
{ {
strCat(result, "\"source\":\""); strCat(option, "\"source\":\"");
if (cfgOptionSource(optionId) == cfgSourceParam) if (cfgOptionSource(optionId) == cfgSourceParam)
strCat(result, "param"); strCat(option, "param");
else else
strCat(result, "config"); strCat(option, "config");
strCat(result, "\""); strCat(option, "\"");
// Add a comma if another define will be added
if (cfgOptionTest(optionId))
strCat(result, ",");
} }
// If option was negated // If option was negated
if (cfgOptionNegate(optionId)) if (cfgOptionNegate(optionId))
strCatFmt(result, "\"negate\":%s", strPtr(varStrForce(varNewBool(true)))); {
// Add comma if needed
if (strSize(option) != 0)
strCat(option, ",");
strCatFmt(option, "\"negate\":%s", strPtr(varStrForce(varNewBool(true))));
}
else else
{ {
// If option is reset then add flag // If option is reset then add flag
if (cfgOptionReset(optionId)) if (cfgOptionReset(optionId))
strCatFmt(result, "\"reset\":%s", strPtr(varStrForce(varNewBool(true)))); {
// Add comma if needed
if (strSize(option) != 0)
strCat(option, ",");
strCatFmt(option, "\"reset\":%s", strPtr(varStrForce(varNewBool(true))));
}
// If has a value // If has a value
if (cfgOptionTest(optionId)) if (cfgOptionTest(optionId))
{ {
// If option is reset, then add a comma separator before setting the value // Add comma if needed
if (cfgOptionReset(optionId)) if (strSize(option) != 0)
strCat(result, ","); strCat(option, ",");
strCat(result, "\"value\":"); strCat(option, "\"value\":");
switch (cfgDefOptionType(cfgOptionDefIdFromId(optionId))) switch (cfgDefOptionType(cfgOptionDefIdFromId(optionId)))
{ {
@ -67,13 +71,13 @@ perlOptionJson()
case cfgDefOptTypeFloat: case cfgDefOptTypeFloat:
case cfgDefOptTypeInteger: case cfgDefOptTypeInteger:
{ {
strCat(result, strPtr(varStrForce(cfgOption(optionId)))); strCat(option, strPtr(varStrForce(cfgOption(optionId))));
break; break;
} }
case cfgDefOptTypeString: case cfgDefOptTypeString:
{ {
strCatFmt(result, "\"%s\"", strPtr(cfgOptionStr(optionId))); strCatFmt(option, "\"%s\"", strPtr(cfgOptionStr(optionId)));
break; break;
} }
@ -82,19 +86,19 @@ perlOptionJson()
const KeyValue *valueKv = cfgOptionKv(optionId); const KeyValue *valueKv = cfgOptionKv(optionId);
const VariantList *keyList = kvKeyList(valueKv); const VariantList *keyList = kvKeyList(valueKv);
strCat(result, "{"); strCat(option, "{");
for (unsigned int listIdx = 0; listIdx < varLstSize(keyList); listIdx++) for (unsigned int listIdx = 0; listIdx < varLstSize(keyList); listIdx++)
{ {
if (listIdx != 0) if (listIdx != 0)
strCat(result, ","); strCat(option, ",");
strCatFmt( strCatFmt(
result, "\"%s\":\"%s\"", strPtr(varStr(varLstGet(keyList, listIdx))), option, "\"%s\":\"%s\"", strPtr(varStr(varLstGet(keyList, listIdx))),
strPtr(varStr(kvGet(valueKv, varLstGet(keyList, listIdx))))); strPtr(varStr(kvGet(valueKv, varLstGet(keyList, listIdx)))));
} }
strCat(result, "}"); strCat(option, "}");
break; break;
} }
@ -103,17 +107,17 @@ perlOptionJson()
{ {
StringList *valueList = strLstNewVarLst(cfgOptionLst(optionId)); StringList *valueList = strLstNewVarLst(cfgOptionLst(optionId));
strCat(result, "{"); strCat(option, "{");
for (unsigned int listIdx = 0; listIdx < strLstSize(valueList); listIdx++) for (unsigned int listIdx = 0; listIdx < strLstSize(valueList); listIdx++)
{ {
if (listIdx != 0) if (listIdx != 0)
strCat(result, ","); strCat(option, ",");
strCatFmt(result, "\"%s\":true", strPtr(strLstGet(valueList, listIdx))); strCatFmt(option, "\"%s\":true", strPtr(strLstGet(valueList, listIdx)));
} }
strCat(result, "}"); strCat(option, "}");
break; break;
} }
@ -121,7 +125,11 @@ perlOptionJson()
} }
} }
strCat(result, "}"); // Add option to main JSON blob
if (strSize(result) != 1)
strCat(result, ",");
strCatFmt(result, "\"%s\":{%s}", cfgOptionName(optionId), strPtr(option));
} }
strCat(result, "}"); strCat(result, "}");

View File

@ -21,6 +21,10 @@ testRun()
cfgOptionValidSet(cfgOptCompress, true); cfgOptionValidSet(cfgOptCompress, true);
cfgOptionSet(cfgOptCompress, cfgSourceParam, varNewBool(true)); cfgOptionSet(cfgOptCompress, cfgSourceParam, varNewBool(true));
cfgOptionValidSet(cfgOptConfig, true);
cfgOptionNegateSet(cfgOptConfig, true);
cfgOptionSet(cfgOptConfig, cfgSourceParam, NULL);
cfgOptionValidSet(cfgOptOnline, true); cfgOptionValidSet(cfgOptOnline, true);
cfgOptionNegateSet(cfgOptOnline, true); cfgOptionNegateSet(cfgOptOnline, true);
cfgOptionSet(cfgOptOnline, cfgSourceParam, varNewBool(false)); cfgOptionSet(cfgOptOnline, cfgSourceParam, varNewBool(false));
@ -30,7 +34,7 @@ testRun()
cfgOptionValidSet(cfgOptBackupStandby, true); cfgOptionValidSet(cfgOptBackupStandby, true);
cfgOptionResetSet(cfgOptBackupStandby, true); cfgOptionResetSet(cfgOptBackupStandby, true);
cfgOptionSet(cfgOptBackupStandby, cfgSourceDefault, varNewBool(false)); cfgOptionSet(cfgOptBackupStandby, cfgSourceParam, varNewBool(false));
cfgOptionValidSet(cfgOptProtocolTimeout, true); cfgOptionValidSet(cfgOptProtocolTimeout, true);
cfgOptionSet(cfgOptProtocolTimeout, cfgSourceParam, varNewDbl(1.1)); cfgOptionSet(cfgOptProtocolTimeout, cfgSourceParam, varNewDbl(1.1));
@ -48,9 +52,10 @@ testRun()
strPtr(perlOptionJson()), strPtr(perlOptionJson()),
"{" "{"
"\"archive-queue-max\":{\"source\":\"param\",\"value\":999999999999}," "\"archive-queue-max\":{\"source\":\"param\",\"value\":999999999999},"
"\"backup-standby\":{\"reset\":true,\"value\":false}," "\"backup-standby\":{\"source\":\"param\",\"reset\":true,\"value\":false},"
"\"compress\":{\"source\":\"param\",\"value\":true}," "\"compress\":{\"source\":\"param\",\"value\":true},"
"\"compress-level\":{\"source\":\"config\",\"value\":3}," "\"compress-level\":{\"source\":\"config\",\"value\":3},"
"\"config\":{\"source\":\"param\",\"negate\":true},"
"\"online\":{\"source\":\"param\",\"negate\":true}," "\"online\":{\"source\":\"param\",\"negate\":true},"
"\"pg1-host\":{\"reset\":true}," "\"pg1-host\":{\"reset\":true},"
"\"protocol-timeout\":{\"source\":\"param\",\"value\":1.1}," "\"protocol-timeout\":{\"source\":\"param\",\"value\":1.1},"