mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-07 19:22:17 +01:00
Merge #12878: [refactor] Config handling refactoring in preparation for network-specific sections
77a733a99[tests] Add additional unit tests for -nofoo edge cases (Anthony Towns)af173c2be[tests] Check GetChainName works with config entries (Anthony Towns)fa27f1c23[tests] Add unit tests for ReadConfigStream (Anthony Towns)087c5d204ReadConfigStream: assume the stream is good (Anthony Towns)6d5815aadSeparate out ReadConfigStream from ReadConfigFile (Anthony Towns)834d30341[tests] Add unit tests for GetChainName (Anthony Towns)11b6b5b86Move ChainNameFromCommandLine into ArgsManager and rename to GetChainName (Anthony Towns) Pull request description: This does a bit of refactoring of the configuration handling code in order to add additional tests to make adding support for [test]/[regtest] sections in the config file in #11862 easier. Should not cause any behaviour changes. Tree-SHA512: 8d2ce1449fc180de03414e7e569d1a21ba1e9f6564e13d3faf3961f710adc725fa0d4ab49b89ebd2baa11ea36ac5018377f693a84037d386a8b8697c9d6db3e9
This commit is contained in:
56
src/util.cpp
56
src/util.cpp
@@ -736,28 +736,34 @@ fs::path GetConfigFile(const std::string& confPath)
|
||||
return AbsPathForConfigVal(fs::path(confPath), false);
|
||||
}
|
||||
|
||||
void ArgsManager::ReadConfigStream(std::istream& stream)
|
||||
{
|
||||
LOCK(cs_args);
|
||||
|
||||
std::set<std::string> setOptions;
|
||||
setOptions.insert("*");
|
||||
|
||||
for (boost::program_options::detail::config_file_iterator it(stream, setOptions), end; it != end; ++it)
|
||||
{
|
||||
// Don't overwrite existing settings so command line settings override bitcoin.conf
|
||||
std::string strKey = std::string("-") + it->string_key;
|
||||
std::string strValue = it->value[0];
|
||||
InterpretNegatedOption(strKey, strValue);
|
||||
if (mapArgs.count(strKey) == 0)
|
||||
mapArgs[strKey] = strValue;
|
||||
mapMultiArgs[strKey].push_back(strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void ArgsManager::ReadConfigFile(const std::string& confPath)
|
||||
{
|
||||
fs::ifstream streamConfig(GetConfigFile(confPath));
|
||||
if (!streamConfig.good())
|
||||
return; // No bitcoin.conf file is OK
|
||||
fs::ifstream stream(GetConfigFile(confPath));
|
||||
|
||||
{
|
||||
LOCK(cs_args);
|
||||
std::set<std::string> setOptions;
|
||||
setOptions.insert("*");
|
||||
|
||||
for (boost::program_options::detail::config_file_iterator it(streamConfig, setOptions), end; it != end; ++it)
|
||||
{
|
||||
// Don't overwrite existing settings so command line settings override bitcoin.conf
|
||||
std::string strKey = std::string("-") + it->string_key;
|
||||
std::string strValue = it->value[0];
|
||||
InterpretNegatedOption(strKey, strValue);
|
||||
if (mapArgs.count(strKey) == 0)
|
||||
mapArgs[strKey] = strValue;
|
||||
mapMultiArgs[strKey].push_back(strValue);
|
||||
}
|
||||
// ok to not have a config file
|
||||
if (stream.good()) {
|
||||
ReadConfigStream(stream);
|
||||
}
|
||||
|
||||
// If datadir is changed in .conf file:
|
||||
ClearDatadirCache();
|
||||
if (!fs::is_directory(GetDataDir(false))) {
|
||||
@@ -765,6 +771,20 @@ void ArgsManager::ReadConfigFile(const std::string& confPath)
|
||||
}
|
||||
}
|
||||
|
||||
std::string ArgsManager::GetChainName() const
|
||||
{
|
||||
bool fRegTest = GetBoolArg("-regtest", false);
|
||||
bool fTestNet = GetBoolArg("-testnet", false);
|
||||
|
||||
if (fTestNet && fRegTest)
|
||||
throw std::runtime_error("Invalid combination of -regtest and -testnet.");
|
||||
if (fRegTest)
|
||||
return CBaseChainParams::REGTEST;
|
||||
if (fTestNet)
|
||||
return CBaseChainParams::TESTNET;
|
||||
return CBaseChainParams::MAIN;
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
fs::path GetPidFile()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user