1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-19 21:53:51 +00:00

Merge all composing variables, not just those in destination already

This resolves a regression where the local openmw.cfg doesn't exist, so
we fall back to the global openmw.cfg, but because we've not loaded
anything from the local openmw.cfg, there are no variables with which to
merge.
This commit is contained in:
AnyOldName3 2020-10-28 00:36:49 +00:00
parent 74dfc09e2d
commit 5869ac71e3

View file

@ -87,7 +87,7 @@ boost::program_options::variables_map ConfigurationManager::separateComposingVar
boost::program_options::variables_map composingVariables;
for (auto itr = variables.begin(); itr != variables.end();)
{
if (description.find((*itr).first, false).semantic()->is_composing())
if (description.find(itr->first, false).semantic()->is_composing())
{
composingVariables.emplace(*itr);
itr = variables.erase(itr);
@ -100,14 +100,23 @@ boost::program_options::variables_map ConfigurationManager::separateComposingVar
void ConfigurationManager::mergeComposingVariables(boost::program_options::variables_map & first, boost::program_options::variables_map & second, boost::program_options::options_description& description)
{
for (auto& [name, variableValue] : first)
for (const auto& option : description.options())
{
if (description.find(name, false).semantic()->is_composing())
if (option->semantic()->is_composing())
{
std::string name = option->canonical_display_name();
auto firstPosition = first.find(name);
if (firstPosition == first.end())
{
first.emplace(name, second[name]);
continue;
}
if (second[name].defaulted() || second[name].empty())
continue;
boost::any& firstValue = variableValue.value();
boost::any& firstValue = firstPosition->second.value();
const boost::any& secondValue = second[name].value();
if (firstValue.type() == typeid(Files::EscapePathContainer))