Preserve unknown keys in JSON_SETTINGS

Fixes https://gitlab.com/kicad/code/kicad/-/issues/13847
This commit is contained in:
Jon Evans 2023-02-16 23:15:44 -05:00
parent 4917abe655
commit f076f6fb46
2 changed files with 12 additions and 1 deletions

View File

@ -269,6 +269,9 @@ bool JSON_SETTINGS::LoadFromFile( const wxString& aDirectory )
/* allow_exceptions = */ true, /* allow_exceptions = */ true,
/* ignore_comments = */ true ); /* ignore_comments = */ true );
// Save whatever we loaded, before doing any migration etc
m_internals->m_original = *static_cast<nlohmann::json*>( m_internals.get() );
// If parse succeeds, check if schema migration is required // If parse succeeds, check if schema migration is required
int filever = -1; int filever = -1;
@ -438,10 +441,14 @@ bool JSON_SETTINGS::SaveToFile( const wxString& aDirectory, bool aForce )
LOCALE_IO dummy; LOCALE_IO dummy;
bool success = true; bool success = true;
nlohmann::json toSave = m_internals->m_original;
toSave.update( m_internals->begin(), m_internals->end(), /* merge_objects = */ true );
try try
{ {
std::stringstream buffer; std::stringstream buffer;
buffer << std::setw( 2 ) << *m_internals << std::endl; buffer << std::setw( 2 ) << toSave << std::endl;
wxFFileOutputStream fileStream( path.GetFullPath(), "wb" ); wxFFileOutputStream fileStream( path.GetFullPath(), "wb" );

View File

@ -73,6 +73,10 @@ public:
nlohmann::json::json_pointer root( "" ); nlohmann::json::json_pointer root( "" );
this->nlohmann::json::operator[]( root ) = aOther.nlohmann::json::operator[]( root ); this->nlohmann::json::operator[]( root ) = aOther.nlohmann::json::operator[]( root );
} }
private:
nlohmann::json m_original;
}; };
#endif // KICAD_JSON_SETTINGS_INTERNALS_H #endif // KICAD_JSON_SETTINGS_INTERNALS_H