Merge pull request #1686 from calmh/major-upgrade-v11

Allow major upgrades
This commit is contained in:
Audrius Butkevicius 2015-04-23 09:31:58 +01:00
commit f8f1c72b44
4 changed files with 49 additions and 2 deletions

View File

@ -686,7 +686,8 @@ func restGetSystemUpgrade(w http.ResponseWriter, r *http.Request) {
res := make(map[string]interface{}) res := make(map[string]interface{})
res["running"] = Version res["running"] = Version
res["latest"] = rel.Tag res["latest"] = rel.Tag
res["newer"] = upgrade.CompareVersions(rel.Tag, Version) == 1 res["newer"] = upgrade.CompareVersions(rel.Tag, Version) == upgrade.Newer
res["majorNewer"] = upgrade.CompareVersions(rel.Tag, Version) == upgrade.MajorNewer
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
json.NewEncoder(w).Encode(res) json.NewEncoder(w).Encode(res)
@ -727,7 +728,7 @@ func restPostSystemUpgrade(w http.ResponseWriter, r *http.Request) {
return return
} }
if upgrade.CompareVersions(rel.Tag, Version) == 1 { if upgrade.CompareVersions(rel.Tag, Version) > upgrade.Equal {
err = upgrade.To(rel) err = upgrade.To(rel)
if err != nil { if err != nil {
l.Warnln("upgrading:", err) l.Warnln("upgrading:", err)

View File

@ -1,4 +1,5 @@
{ {
"A new major version may not be compatible with previous versions.": "A new major version may not be compatible with previous versions.",
"API Key": "API Key", "API Key": "API Key",
"About": "About", "About": "About",
"Add": "Add", "Add": "Add",
@ -71,6 +72,7 @@
"Later": "Later", "Later": "Later",
"Local Discovery": "Local Discovery", "Local Discovery": "Local Discovery",
"Local State": "Local State", "Local State": "Local State",
"Major Upgrade": "Major Upgrade",
"Maximum Age": "Maximum Age", "Maximum Age": "Maximum Age",
"Metadata Only": "Metadata Only", "Metadata Only": "Metadata Only",
"Move to top of queue": "Move to top of queue", "Move to top of queue": "Move to top of queue",
@ -89,11 +91,13 @@
"Override Changes": "Override Changes", "Override Changes": "Override Changes",
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for", "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for",
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Path where versions should be stored (leave empty for the default .stversions folder in the folder).", "Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Path where versions should be stored (leave empty for the default .stversions folder in the folder).",
"Please consult the release notes before performing a major upgrade.": "Please consult the release notes before performing a major upgrade.",
"Please wait": "Please wait", "Please wait": "Please wait",
"Preview": "Preview", "Preview": "Preview",
"Preview Usage Report": "Preview Usage Report", "Preview Usage Report": "Preview Usage Report",
"Quick guide to supported patterns": "Quick guide to supported patterns", "Quick guide to supported patterns": "Quick guide to supported patterns",
"RAM Utilization": "RAM Utilization", "RAM Utilization": "RAM Utilization",
"Release Notes": "Release Notes",
"Rescan": "Rescan", "Rescan": "Rescan",
"Rescan All": "Rescan All", "Rescan All": "Rescan All",
"Rescan Interval": "Rescan Interval", "Rescan Interval": "Rescan Interval",
@ -151,10 +155,12 @@
"The number of versions must be a number and cannot be blank.": "The number of versions must be a number and cannot be blank.", "The number of versions must be a number and cannot be blank.": "The number of versions must be a number and cannot be blank.",
"The path cannot be blank.": "The path cannot be blank.", "The path cannot be blank.": "The path cannot be blank.",
"The rescan interval must be a non-negative number of seconds.": "The rescan interval must be a non-negative number of seconds.", "The rescan interval must be a non-negative number of seconds.": "The rescan interval must be a non-negative number of seconds.",
"This is a major version upgrade.": "This is a major version upgrade.",
"Unknown": "Unknown", "Unknown": "Unknown",
"Unshared": "Unshared", "Unshared": "Unshared",
"Unused": "Unused", "Unused": "Unused",
"Up to Date": "Up to Date", "Up to Date": "Up to Date",
"Upgrade": "Upgrade",
"Upgrade To {%version%}": "Upgrade To {{version}}", "Upgrade To {%version%}": "Upgrade To {{version}}",
"Upgrading": "Upgrading", "Upgrading": "Upgrading",
"Upload Rate": "Upload Rate", "Upload Rate": "Upload Rate",

View File

@ -38,6 +38,12 @@
<span translate translate-value-version="{{upgradeInfo.latest}}">Upgrade To {%version%}</span> <span translate translate-value-version="{{upgradeInfo.latest}}">Upgrade To {%version%}</span>
</button> </button>
</li> </li>
<li ng-if="upgradeInfo && upgradeInfo.majorNewer">
<button type="button" class="btn navbar-btn btn-danger btn-sm" href="" ng-click="upgradeMajor()">
<span class="glyphicon glyphicon-chevron-up"></span>&emsp;
<span translate translate-value-version="{{upgradeInfo.latest}}">Upgrade To {%version%}</span>
</button>
</li>
<li class="dropdown" language-select></li> <li class="dropdown" language-select></li>
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog" aria-label="Edit"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog" aria-label="Edit"></span></a>
@ -466,6 +472,35 @@
<img ng-if="myID" class="center-block img-thumbnail" ng-src="qr/?text={{myID}}"/> <img ng-if="myID" class="center-block img-thumbnail" ng-src="qr/?text={{myID}}"/>
</modal> </modal>
<!-- Major upgrade modal -->
<div id="majorUpgrade" class="modal fade" tabindex="-1" data-backdrop="true" data-keyboard="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header alert alert-danger">
<h4 class="modal-title">
<span ng-if="icon" class="glyphicon glyphicon-chevron-up"></span>
<span translate>Major Upgrade</span>
</h4>
</div>
<div class="modal-body">
<p>
<span translate>This is a major version upgrade.</span>
<span translate>A new major version may not be compatible with previous versions.</span>
<span translate>Please consult the release notes before performing a major upgrade.</span>
</p>
<p>
<a href="https://github.com/syncthing/syncthing/releases/latest" target="_blank" translate>Release Notes</a>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary btn-sm" ng-click="upgrade()"><span class="glyphicon glyphicon-ok"></span>&emsp;<span translate>Upgrade</span></button>
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&emsp;<span translate>Close</span></button>
</div>
</div>
</div>
</div>
<!-- Device editor modal --> <!-- Device editor modal -->
<div id="editDevice" class="modal fade" tabindex="-1"> <div id="editDevice" class="modal fade" tabindex="-1">

View File

@ -698,6 +698,7 @@ angular.module('syncthing.core')
$scope.upgrade = function () { $scope.upgrade = function () {
restarting = true; restarting = true;
$('#majorUpgrade').modal('hide');
$('#upgrading').modal(); $('#upgrading').modal();
$http.post(urlbase + '/system/upgrade').success(function () { $http.post(urlbase + '/system/upgrade').success(function () {
$('#restarting').modal(); $('#restarting').modal();
@ -707,6 +708,10 @@ angular.module('syncthing.core')
}); });
}; };
$scope.upgradeMajor = function () {
$('#majorUpgrade').modal();
};
$scope.shutdown = function () { $scope.shutdown = function () {
restarting = true; restarting = true;
$http.post(urlbase + '/system/shutdown').success(function () { $http.post(urlbase + '/system/shutdown').success(function () {