forked from qt-creator/qt-creator
SettingsAccessor: Relax old version validation for shared files
Settings with older versions will not necessarily fail on upgrade. Let the upgrader assume they're using the oldest supported version, and continue from there. The logic with an appropriate message was already there, but it was never reached due to several bugs. Change-Id: Ie4d840a29d9aec7be7763111269f7bed81a8cbe3 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
committed by
Orgad Shaneh
parent
d582cc3328
commit
558ff1fd93
@@ -535,6 +535,8 @@ SettingsAccessor::RestoreData
|
|||||||
UpgradingSettingsAccessor::validateVersionRange(const RestoreData &data) const
|
UpgradingSettingsAccessor::validateVersionRange(const RestoreData &data) const
|
||||||
{
|
{
|
||||||
RestoreData result = data;
|
RestoreData result = data;
|
||||||
|
if (data.data.isEmpty())
|
||||||
|
return result;
|
||||||
const int version = versionFromMap(result.data);
|
const int version = versionFromMap(result.data);
|
||||||
if (version < firstSupportedVersion() || version > currentVersion()) {
|
if (version < firstSupportedVersion() || version > currentVersion()) {
|
||||||
Issue i(QApplication::translate("Utils::SettingsAccessor", "No Valid Settings Found"),
|
Issue i(QApplication::translate("Utils::SettingsAccessor", "No Valid Settings Found"),
|
||||||
@@ -548,7 +550,8 @@ UpgradingSettingsAccessor::validateVersionRange(const RestoreData &data) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.path != baseFilePath() && version < currentVersion()) {
|
if (result.path != baseFilePath() && !result.path.endsWith(".shared")
|
||||||
|
&& version < currentVersion()) {
|
||||||
Issue i(QApplication::translate("Utils::SettingsAccessor", "Using Old Settings"),
|
Issue i(QApplication::translate("Utils::SettingsAccessor", "Using Old Settings"),
|
||||||
QApplication::translate("Utils::SettingsAccessor",
|
QApplication::translate("Utils::SettingsAccessor",
|
||||||
"<p>The versioned backup \"%1\" of the settings "
|
"<p>The versioned backup \"%1\" of the settings "
|
||||||
@@ -578,6 +581,7 @@ UpgradingSettingsAccessor::validateVersionRange(const RestoreData &data) const
|
|||||||
.arg(applicationDisplayName).arg(result.path.toUserOutput()), Issue::Type::WARNING);
|
.arg(applicationDisplayName).arg(result.path.toUserOutput()), Issue::Type::WARNING);
|
||||||
i.defaultButton = QMessageBox::No;
|
i.defaultButton = QMessageBox::No;
|
||||||
i.escapeButton = QMessageBox::No;
|
i.escapeButton = QMessageBox::No;
|
||||||
|
i.buttons.clear();
|
||||||
i.buttons.insert(QMessageBox::Yes, Continue);
|
i.buttons.insert(QMessageBox::Yes, Continue);
|
||||||
i.buttons.insert(QMessageBox::No, DiscardAndContinue);
|
i.buttons.insert(QMessageBox::No, DiscardAndContinue);
|
||||||
result.issue = i;
|
result.issue = i;
|
||||||
@@ -615,6 +619,7 @@ SettingsAccessor::RestoreData MergingSettingsAccessor::readData(const FileName &
|
|||||||
RestoreData secondaryData
|
RestoreData secondaryData
|
||||||
= m_secondaryAccessor ? m_secondaryAccessor->readData(m_secondaryAccessor->baseFilePath(), parent)
|
= m_secondaryAccessor ? m_secondaryAccessor->readData(m_secondaryAccessor->baseFilePath(), parent)
|
||||||
: RestoreData();
|
: RestoreData();
|
||||||
|
secondaryData.data = preprocessReadSettings(secondaryData.data);
|
||||||
int secondaryVersion = versionFromMap(secondaryData.data);
|
int secondaryVersion = versionFromMap(secondaryData.data);
|
||||||
if (secondaryVersion == -1)
|
if (secondaryVersion == -1)
|
||||||
secondaryVersion = currentVersion(); // No version information, use currentVersion since
|
secondaryVersion = currentVersion(); // No version information, use currentVersion since
|
||||||
@@ -635,10 +640,12 @@ SettingsAccessor::RestoreData MergingSettingsAccessor::readData(const FileName &
|
|||||||
"Do you want to try loading it anyway?")
|
"Do you want to try loading it anyway?")
|
||||||
.arg(secondaryData.path.toUserOutput())
|
.arg(secondaryData.path.toUserOutput())
|
||||||
.arg(applicationDisplayName), Issue::Type::WARNING);
|
.arg(applicationDisplayName), Issue::Type::WARNING);
|
||||||
|
secondaryData.issue->buttons.clear();
|
||||||
secondaryData.issue->buttons.insert(QMessageBox::Yes, Continue);
|
secondaryData.issue->buttons.insert(QMessageBox::Yes, Continue);
|
||||||
secondaryData.issue->buttons.insert(QMessageBox::No, DiscardAndContinue);
|
secondaryData.issue->buttons.insert(QMessageBox::No, DiscardAndContinue);
|
||||||
secondaryData.issue->defaultButton = QMessageBox::No;
|
secondaryData.issue->defaultButton = QMessageBox::No;
|
||||||
secondaryData.issue->escapeButton = QMessageBox::No;
|
secondaryData.issue->escapeButton = QMessageBox::No;
|
||||||
|
setVersionInMap(secondaryData.data, std::max(secondaryVersion, firstSupportedVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (secondaryData.hasIssue()) {
|
if (secondaryData.hasIssue()) {
|
||||||
|
Reference in New Issue
Block a user