Change the behaviour of the gseettings migration

function

In the pref_transformations.xml file, when the release version is
greater than the current GnuCash version, do not process those changes.
This commit is contained in:
Robert Fewell 2023-02-17 10:14:09 +00:00
parent ac0532bf5c
commit 57f874bd3f

View File

@ -779,7 +779,7 @@ parse_one_release_node (bpt::ptree &pt)
}
static void
transform_settings (int old_maj_min)
transform_settings (int old_maj_min, int cur_maj_min)
{
bpt::ptree pt;
@ -811,7 +811,7 @@ transform_settings (int old_maj_min)
/* loop over top-level property tree */
std::for_each (pt.begin(), pt.end(),
[&old_maj_min] (std::pair<bpt::ptree::key_type, bpt::ptree> node)
[&old_maj_min, &cur_maj_min] (std::pair<bpt::ptree::key_type, bpt::ptree> node)
{
if (node.first != "release")
{
@ -829,6 +829,11 @@ transform_settings (int old_maj_min)
DEBUG ("Skipping <release> node - version %i is less than current compatibility level %i", *version, old_maj_min);
return;
}
if (*version > cur_maj_min)
{
DEBUG ("Skipping <release> node - version %i is greater than current version level %i", *version, cur_maj_min);
return;
}
DEBUG ("Retrieved version value '%i'", *version);
parse_one_release_node (node.second);
@ -865,16 +870,16 @@ void gnc_gsettings_version_upgrade (void)
auto ogG_maj_min = gnc_gsettings_get_user_value (GNC_PREFS_GROUP_GENERAL, GNC_PREF_VERSION);
auto og_maj_min = gnc_gsettings_get_user_value (GSET_SCHEMA_OLD_PREFIX "." GNC_PREFS_GROUP_GENERAL, GNC_PREF_VERSION);
if (!ogG_maj_min && !og_maj_min)
if (!ogG_maj_min && !og_maj_min) // new install
{
LEAVE("");
return;
}
auto old_maj_min = 0;
if (!ogG_maj_min)
if (!ogG_maj_min) // old preference location
old_maj_min = gnc_gsettings_get_int (GSET_SCHEMA_OLD_PREFIX "." GNC_PREFS_GROUP_GENERAL, GNC_PREF_VERSION);
else
else // new preference location
{
g_variant_unref (ogG_maj_min);
old_maj_min = gnc_gsettings_get_int (GNC_PREFS_GROUP_GENERAL, GNC_PREF_VERSION);
@ -882,12 +887,13 @@ void gnc_gsettings_version_upgrade (void)
if (og_maj_min)
g_variant_unref (og_maj_min);
PINFO ("Previous setting compatibility level: %i", old_maj_min);
auto cur_maj_min = PROJECT_VERSION_MAJOR * 1000 + PROJECT_VERSION_MINOR;
transform_settings (old_maj_min);
PINFO ("Previous setting compatibility level: %i, Current version: %i", old_maj_min, cur_maj_min);
transform_settings (old_maj_min, cur_maj_min);
/* Only write current version if it's more recent than what was set */
auto cur_maj_min = PROJECT_VERSION_MAJOR * 1000 + PROJECT_VERSION_MINOR;
if (cur_maj_min > old_maj_min)
gnc_gsettings_set_int (GNC_PREFS_GROUP_GENERAL, GNC_PREF_VERSION, cur_maj_min);