Fix upgrade from 2.5 to 2.6 to 2.7

CURA-3975

- Set Preferences setting_version in CuraApplication so Preferences can
  get upgraded correctly
- Fix upgrade script for 2.5 to 2.6
- Fix upgrade script for 2.6 to 2.7 which relies on the upgrade of 2.5
  to 2.6
This commit is contained in:
Lipu Fei 2017-07-06 14:07:42 +02:00
parent 3983da30aa
commit 5bf080950f
4 changed files with 91 additions and 6 deletions

View file

@ -26,7 +26,6 @@ from UM.Settings.Validator import Validator
from UM.Message import Message from UM.Message import Message
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Workspace.WorkspaceReader import WorkspaceReader from UM.Workspace.WorkspaceReader import WorkspaceReader
from UM.Platform import Platform
from UM.Decorators import deprecated from UM.Decorators import deprecated
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
@ -268,6 +267,9 @@ class CuraApplication(QtApplication):
with ContainerRegistry.getInstance().lockFile(): with ContainerRegistry.getInstance().lockFile():
ContainerRegistry.getInstance().load() ContainerRegistry.getInstance().load()
# set the setting version for Preferences
Preferences.getInstance().setSettingVersion(CuraApplication.SettingVersion)
Preferences.getInstance().addPreference("cura/active_mode", "simple") Preferences.getInstance().addPreference("cura/active_mode", "simple")
Preferences.getInstance().addPreference("cura/categories_expanded", "") Preferences.getInstance().addPreference("cura/categories_expanded", "")

View file

@ -61,8 +61,13 @@ class VersionUpgrade25to26(VersionUpgrade):
parser["general"]["visible_settings"] = ";".join(new_visible_settings) parser["general"]["visible_settings"] = ";".join(new_visible_settings)
#Change the version number in the file. #Change the version number in the file.
if "general" not in parser:
parser["general"] = {}
parser.set("general", "version", "4") parser.set("general", "version", "4")
parser.set("general", "setting_version", "1")
if "metadata" not in parser:
parser["metadata"] = {}
parser.set("metadata", "setting_version", "1")
#Re-serialise the file. #Re-serialise the file.
output = io.StringIO() output = io.StringIO()

View file

@ -87,6 +87,50 @@ class VersionUpgrade26to27(VersionUpgrade):
setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
return format_version * 1000000 + setting_version return format_version * 1000000 + setting_version
## Upgrades a preferences file from version 2.6 to 2.7.
#
# \param serialised The serialised form of a preferences file.
# \param filename The name of the file to upgrade.
def upgradePreferences(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
# Update version numbers
if "general" not in parser:
parser["general"] = {}
parser["general"]["version"] = "4"
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "2"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]
## Upgrades a container file other than a container stack file from version 2.6 to 2.7.
#
# \param serialised The serialised form of a container file.
# \param filename The name of the file to upgrade.
def upgradeOtherContainer(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
# Update version numbers
if "general" not in parser:
parser["general"] = {}
parser["general"]["version"] = "2"
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "2"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]
## Upgrades a container stack from version 2.6 to 2.7. ## Upgrades a container stack from version 2.6 to 2.7.
# #
# \param serialised The serialised form of a container stack. # \param serialised The serialised form of a container stack.
@ -108,12 +152,15 @@ class VersionUpgrade26to27(VersionUpgrade):
if not parser.has_section(each_section): if not parser.has_section(each_section):
parser.add_section(each_section) parser.add_section(each_section)
# Change the version number in the file. # Update version numbers
parser["metadata"]["setting_version"] = str(CuraApplication.SettingVersion) if "general" not in parser:
parser["general"] = {}
# Update version
parser["general"]["version"] = "3" parser["general"]["version"] = "3"
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "2"
# Re-serialise the file. # Re-serialise the file.
output = io.StringIO() output = io.StringIO()
parser.write(output) parser.write(output)

View file

@ -14,6 +14,21 @@ def getMetaData():
# From To Upgrade function # From To Upgrade function
("machine_stack", 3000000): ("machine_stack", 3000002, upgrade.upgradeStack), ("machine_stack", 3000000): ("machine_stack", 3000002, upgrade.upgradeStack),
("extruder_train", 3000000): ("extruder_train", 3000002, upgrade.upgradeStack), ("extruder_train", 3000000): ("extruder_train", 3000002, upgrade.upgradeStack),
# In 2.6.x, Preferences are saved with "version = 4" and no setting_version.
# This means those Preferences files will still be treated as "4.0" as defined in VersionUpgrade25to26,
# so the 25to26 upgrade routine will be called again.
#
# To fix this, we first fix the upgrade routine for 25to26 so it actually upgrades to "4.1", and then
# here we can upgrade from "4.1" to "4.2" safely.
#
("preferences", 4000001): ("preferences", 4000002, upgrade.upgradePreferences),
# NOTE: All the instance containers share the same general/version, so we have to update all of them
# if any is updated.
("quality_changes", 2000001): ("quality_changes", 2000002, upgrade.upgradeOtherContainer),
("user", 2000001): ("user", 2000002, upgrade.upgradeOtherContainer),
("quality", 2000001): ("quality", 2000002, upgrade.upgradeOtherContainer),
("definition_changes", 2000001): ("definition_changes", 2000002, upgrade.upgradeOtherContainer),
}, },
"sources": { "sources": {
"machine_stack": { "machine_stack": {
@ -24,6 +39,22 @@ def getMetaData():
"get_version": upgrade.getCfgVersion, "get_version": upgrade.getCfgVersion,
"location": {"./extruders"} "location": {"./extruders"}
}, },
"preferences": {
"get_version": upgrade.getCfgVersion,
"location": {"."}
},
"quality_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality"}
},
"user": {
"get_version": upgrade.getCfgVersion,
"location": {"./user"}
},
"definition_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./machine_instances"}
}
} }
} }