Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLipu Fei <lipu.fei815@gmail.com>2017-07-06 15:07:42 +0300
committerLipu Fei <lipu.fei815@gmail.com>2017-07-06 15:19:26 +0300
commit5bf080950ff9cb5f5f51dbac13df07ef91343545 (patch)
tree23f322f7b96efc2e62dfea8b0ff24c48f3ca636f /plugins/VersionUpgrade/VersionUpgrade26to27
parent3983da30aa356242374843cfe96cbb8f1beb6ec8 (diff)
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
Diffstat (limited to 'plugins/VersionUpgrade/VersionUpgrade26to27')
-rw-r--r--plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py55
-rw-r--r--plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py31
2 files changed, 82 insertions, 4 deletions
diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py
index 38031765d5..e2d7817077 100644
--- a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py
+++ b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py
@@ -87,6 +87,50 @@ class VersionUpgrade26to27(VersionUpgrade):
setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
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.
#
# \param serialised The serialised form of a container stack.
@@ -108,12 +152,15 @@ class VersionUpgrade26to27(VersionUpgrade):
if not parser.has_section(each_section):
parser.add_section(each_section)
- # Change the version number in the file.
- parser["metadata"]["setting_version"] = str(CuraApplication.SettingVersion)
-
- # Update version
+ # Update version numbers
+ if "general" not in parser:
+ parser["general"] = {}
parser["general"]["version"] = "3"
+ if "metadata" not in parser:
+ parser["metadata"] = {}
+ parser["metadata"]["setting_version"] = "2"
+
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
index 8ddf4aa7ea..b0c0d70ae2 100644
--- a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
@@ -14,6 +14,21 @@ def getMetaData():
# From To Upgrade function
("machine_stack", 3000000): ("machine_stack", 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": {
"machine_stack": {
@@ -24,6 +39,22 @@ def getMetaData():
"get_version": upgrade.getCfgVersion,
"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"}
+ }
}
}