Prechádzať zdrojové kódy

Allow major upgrades

Jakob Borg 10 rokov pred
rodič
commit
542716e216

+ 3 - 2
cmd/syncthing/gui.go

@@ -686,7 +686,8 @@ func restGetSystemUpgrade(w http.ResponseWriter, r *http.Request) {
 	res := make(map[string]interface{})
 	res["running"] = Version
 	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")
 	json.NewEncoder(w).Encode(res)
@@ -727,7 +728,7 @@ func restPostSystemUpgrade(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	if upgrade.CompareVersions(rel.Tag, Version) == 1 {
+	if upgrade.CompareVersions(rel.Tag, Version) > upgrade.Equal {
 		err = upgrade.To(rel)
 		if err != nil {
 			l.Warnln("upgrading:", err)

+ 6 - 0
gui/assets/lang/lang-en.json

@@ -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",
    "About": "About",
    "Add": "Add",
@@ -71,6 +72,7 @@
    "Later": "Later",
    "Local Discovery": "Local Discovery",
    "Local State": "Local State",
+   "Major Upgrade": "Major Upgrade",
    "Maximum Age": "Maximum Age",
    "Metadata Only": "Metadata Only",
    "Move to top of queue": "Move to top of queue",
@@ -89,11 +91,13 @@
    "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 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",
    "Preview": "Preview",
    "Preview Usage Report": "Preview Usage Report",
    "Quick guide to supported patterns": "Quick guide to supported patterns",
    "RAM Utilization": "RAM Utilization",
+   "Release Notes": "Release Notes",
    "Rescan": "Rescan",
    "Rescan All": "Rescan All",
    "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 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.",
+   "This is a major version upgrade.": "This is a major version upgrade.",
    "Unknown": "Unknown",
    "Unshared": "Unshared",
    "Unused": "Unused",
    "Up to Date": "Up to Date",
+   "Upgrade": "Upgrade",
    "Upgrade To {%version%}": "Upgrade To {{version}}",
    "Upgrading": "Upgrading",
    "Upload Rate": "Upload Rate",

+ 35 - 0
gui/index.html

@@ -38,6 +38,12 @@
             <span translate translate-value-version="{{upgradeInfo.latest}}">Upgrade To {%version%}</span>
           </button>
         </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">
           <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}}"/>
   </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 -->
 
   <div id="editDevice" class="modal fade" tabindex="-1">

+ 5 - 0
gui/scripts/syncthing/core/controllers/syncthingController.js

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