From 57f874bd3fd69ddb83aaced146fe742bb4b9bd9d Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Fri, 17 Feb 2023 10:14:09 +0000 Subject: [PATCH] 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. --- libgnucash/app-utils/gnc-gsettings.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libgnucash/app-utils/gnc-gsettings.cpp b/libgnucash/app-utils/gnc-gsettings.cpp index c3ac46284e..c5f9a58427 100644 --- a/libgnucash/app-utils/gnc-gsettings.cpp +++ b/libgnucash/app-utils/gnc-gsettings.cpp @@ -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 node) + [&old_maj_min, &cur_maj_min] (std::pair node) { if (node.first != "release") { @@ -829,6 +829,11 @@ transform_settings (int old_maj_min) DEBUG ("Skipping node - version %i is less than current compatibility level %i", *version, old_maj_min); return; } + if (*version > cur_maj_min) + { + DEBUG ("Skipping 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; + + PINFO ("Previous setting compatibility level: %i, Current version: %i", old_maj_min, cur_maj_min); - transform_settings (old_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);