Archived
Merge pull request #750 from AudriusButkevicius/upgrades
Autoupgrades (fixes #727)
This commit is contained in:
commit
a76efd4166
9 files changed
+121
-51
No files matched your search
@@ -620,6 +620,10 @@ nextFolder:
|
||||
go standbyMonitor()
|
||||
}
|
||||
|
||||
if cfg.Options.AutoUpgradeIntervalH > 0 {
|
||||
go autoUpgrade()
|
||||
}
|
||||
|
||||
events.Default.Log(events.StartupComplete, nil)
|
||||
go generateEvents()
|
||||
|
||||
@@ -1172,3 +1176,36 @@ func standbyMonitor() {
|
||||
now = time.Now()
|
||||
}
|
||||
}
|
||||
|
||||
func autoUpgrade() {
|
||||
var skipped bool
|
||||
interval := time.Duration(cfg.Options.AutoUpgradeIntervalH) * time.Hour
|
||||
for {
|
||||
if skipped {
|
||||
time.Sleep(interval)
|
||||
} else {
|
||||
skipped = true
|
||||
}
|
||||
|
||||
rel, err := upgrade.LatestRelease(strings.Contains(Version, "-beta"))
|
||||
if err != nil {
|
||||
l.Warnln("Automatic upgrade:", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if upgrade.CompareVersions(rel.Tag, Version) <= 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
l.Infof("Automatic upgrade (current %q < latest %q)", Version, rel.Tag)
|
||||
err = upgrade.UpgradeTo(rel, GoArchExtra)
|
||||
if err != nil {
|
||||
l.Warnln("Automatic upgrade:", err)
|
||||
continue
|
||||
}
|
||||
l.Warnf("Automatically upgraded to version %q. Restarting in 1 minute.", rel.Tag)
|
||||
time.Sleep(time.Minute)
|
||||
stop <- exitUpgrading
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -533,6 +533,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
|
||||
$scope.tmpOptions = angular.copy($scope.config.Options);
|
||||
$scope.tmpOptions.UREnabled = ($scope.tmpOptions.URAccepted > 0);
|
||||
$scope.tmpOptions.DeviceName = $scope.thisDevice().Name;
|
||||
$scope.tmpOptions.AutoUpgradeEnabled = ($scope.tmpOptions.AutoUpgradeIntervalH > 0);
|
||||
$scope.tmpGUI = angular.copy($scope.config.GUI);
|
||||
$('#settings').modal();
|
||||
};
|
||||
@@ -563,6 +564,13 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
|
||||
$scope.tmpOptions.URAccepted = -1;
|
||||
}
|
||||
|
||||
// Check if auto-upgrade has been enabled or disabled
|
||||
if ($scope.tmpOptions.AutoUpgradeEnabled) {
|
||||
$scope.tmpOptions.AutoUpgradeIntervalH = $scope.tmpOptions.AutoUpgradeIntervalH || 12;
|
||||
} else {
|
||||
$scope.tmpOptions.AutoUpgradeIntervalH = 0;
|
||||
}
|
||||
|
||||
// Check if protocol will need to be changed on restart
|
||||
if ($scope.config.GUI.UseTLS !== $scope.tmpGUI.UseTLS) {
|
||||
$scope.protocolChanged = true;
|
||||
|
||||
+27
-17
@@ -606,26 +606,36 @@
|
||||
<label translate for="MaxSendKbps">Outgoing Rate Limit (KiB/s)</label>
|
||||
<input id="MaxSendKbps" class="form-control" type="number" ng-model="tmpOptions.MaxSendKbps">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Enable UPnP</span> <input id="UPnPEnabled" type="checkbox" ng-model="tmpOptions.UPnPEnabled">
|
||||
</label>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Enable UPnP</span> <input id="UPnPEnabled" type="checkbox" ng-model="tmpOptions.UPnPEnabled">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Global Discovery</span> <input id="GlobalAnnEnabled" type="checkbox" ng-model="tmpOptions.GlobalAnnEnabled">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Local Discovery</span> <input id="LocalAnnEnabled" type="checkbox" ng-model="tmpOptions.LocalAnnEnabled">
|
||||
</label>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Automatic upgrades</span> <input id="AutoUpgradeEnabled" type="checkbox" ng-model="tmpOptions.AutoUpgradeEnabled">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Global Discovery</span> <input id="GlobalAnnEnabled" type="checkbox" ng-model="tmpOptions.GlobalAnnEnabled">
|
||||
</label>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<span translate>Local Discovery</span> <input id="LocalAnnEnabled" type="checkbox" ng-model="tmpOptions.LocalAnnEnabled">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
@@ -27,7 +27,7 @@ func Assets() map[string][]byte {
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
assets["angular/angular.min.js"] = bs
|
||||
|
||||
bs, _ = base64.StdEncoding.DecodeString("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 truncated
|
||||
bs, _ = base64.StdEncoding.DecodeString("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 truncated
|
||||
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
assets["app.js"] = bs
|
||||
@@ -92,7 +92,7 @@ func Assets() map[string][]byte {
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
assets["img/logo-text-64.png"] = bs
|
||||
|
||||
bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x9e3fbNrL4//0UCLdt7N+xJDtJ89ub2t7jR9q6zetazvbu7endA5GQxJoiGQK0rbrez35nBuCbFKmHHe/d7Tl1RBIYYAaDmcFgMNh/cvr+5OJvH16zqZp5h1/sP+n1vhgM2EkQziN3MlVs62SbPdvde8F+5JfBiB0H0YRx34ESvorcUayCSLItKQRTU8FO3r+7OD87/njx/nzIxq4ntvsI7sjzGIGTLBJSRFfC6bOPUrBgDNVcyWQQR7ZgduAIBo+T4EpEvnDYaA6NsbdnFz2p5p5AWJ5rC19ic1wxG76OBBsHMXTJ9akPb85OXr8bvqbm+1/0eoAVIsc87k8OLOFbzJ/0eBgeWHLu29C8P6FXNmIUeJ6IDqxh8uVERZ7FbI9LeWBhIS/glxaCFNw5/IKx/ZlQnNlTHkmhDqxYjXt/trIPU6XCnvgUu1cH1n/1Ph71ToJZyJU78gSAhRaFD7XOXh8IZyJy9Xw+EwfWlSuuwyBSuaLXrqOmB464AjL06GEHEHeVy72etLknDvb6uxVAjpB25IbKDfwcrEoxHqtpEFVKeK5/CQPnAcXgs7JjxVwbIU0jMT6w3NlkMOZX+KofAjEPv8BKylWeOEwJyf5gt7c41qfU9XfQ3tb23d3+QJdLm9EgR0GgpIp4OLClHKRP/Znr9+GNZXqDPCGnQiirDGAMGAwiIMc1n3ergSwXuUCopuL7Az3mX+yPAmdO1R33qsw5r6+AcMQ1h/sD+K6JAdOKXQQhG/GIIUfiO59fpYzFr/CL/qenoKD56Ygxjz0YfwAvqJw74TSK2L7pgQGCveCuLyLzDb7KEOZHoY3eKILZC32DQUu+eMEksJiMbD2U+NhT4kb1Xr6g8WRTgXP3wHr+zGKa/6y9vf9vDQBDbCFtLiy1hUDY1HUc4fdupHVYzwBhWj/2cgASEuR+kghJsaPhQ/K7MHpxOIm4I878cdD3xXWOCFQQ5JQKQDzMQ6Cifkhn9Uj5SQP4E/7vhZE749GcfstZwudaSoD8uUzb29outFMi+cSbh1OcFiz91bOn4iqCf+PQSsj3tZjJ8NsaMMDyvvS4Etmv3hX3YvgrIglccGDd3uYxxxJS3d1Zhx/1W2A6dvuVKf3VXXG8qKGBpkaOqAPPLZLYYONEQegE136RstwQ509WuRzw8WSCYs7hipuHPJR2UgWTlEb7A15oNmOVtLmZ8OPyaAAqaQ/zwyccVw2FUiCYJI7hUn3R41UaosMEXK7DRVIu7JDr6GnRqTOfIlSUbf2ZBtfs7LStOykZ3SsQfpG1TKflNFZI+k6dDsbj1h5rcKtREAwLxSPVqS9QGYpPW/pzriHeJwX5KIi7dRl0T6R6YhaqeUu3jxDmgk7vD2KvfrpnX4zqwh8gGrW+alA1ujwquO/cSCrQVNc7LPC9OQNj4dpn7pj5whZSgkD9lhmasmse+WgVGGWY6VIU5k8A/tidnPloPaRyBQBnmq3QGa83c3p7z/KaIfcd6CA8Rn97ptmiCCuXRVo7VGp/+jwnhAtlyGyxEh5h74RwhAMmwvPDlHbNDaABURZVYW4IL6ZoCyMN4ojUPZtyCYau8JnkV2gXgwnmB4pxW7lXUAPM6czSmsU4DKZjKkgLkXUMyrEIup/TwIWhb+7+GOyxkobtoGO1MqV/jFnDwtjzjFZ/0Jlc1nkVlvJgto3dG6tmMIsvCo+5h8z2K04OMYk9sPSAl0usX2DyBB5VDDyQKrDsgepbaBp6Yqy2s9q1k+HlornQm0QBmB/MddBORuhy8YQwk+f2Vpc+wU9b+nf/7BSMOBq9SISCqwQkrsb0rzfQ86qd1DjpiuYC4OPxUCZWRMgjWpf8Kel3Yn3oZ+jil67viBvsEhnvACGOZBC9YmHg+lWuhZ7AHK+b2aViHUy7qeOU+DChGFDp7m4xwGwq5CxmJKu8dpU9Tcg6VFzFeeLXdLRqPqZgetdTAVZj7F/6ZIN91D+qdmFXSBI4MhSA91D/WAMSrOW1bB6aX22wKhBAApaFe2P7tDJd2AhjW7e3CPODiGzgOj4RBab/aruuZ0v22XVqea2uw2dQ9IF6W/+etFtxFpelo5nYmWQpzMjCNEtmNsumOKkAKnLr+q+YrsgODg7Y7l113nbRqlRQ8ZGXam/9QH9x3e6gL8kxz1JFLjFzHalUsuqv+xbVf8BP03YlBoPVosCMEsiZ8wC3sUknRRZX8WbVXJBFUN9pwGXQhMy6WBqGCELhd8P2A1fTDeCLYFbGODFJZ7Dg8n5JKfhr3/VhJe7W80pnkhhztCfdSRtNXkdREK1DjSYMPg8zTLxg1LaC/R7KcI+hyhMbxXxCgL9zPSHZH4x713wu38WzkYju7ipi11XQOdP8DvtHI7jjuSJwI9eHlc7d3fHnIOs0mLVR9U1g3wtRPYS7MZoStEdBUtsLYqeHfgkv4GUDr4zYe1iXvR/TWmx14jaUJmdbkzjyYf2piX/Idos+muAaF6d5kzFxRNQNYwZoA6OIwGoGkS9AMbGSWrBEm8A63G3p0y47XmQxEds8OEMBa192U4BvuYQVy30wUtUWd8eJydY/h5XYe98DW+pvQi6mXyOoJxVY74LHNxSxb0+FfSnapvXZxA8iwcC0nrkSXenywQdFdwF7IDcxLgVwj3FoOjt2cAv4DFf2YM1swFrUEBOAQxB78nOgL6c8Ej3uqVafOZRz2M/ueqYyNSe12DGaYnsVwxDe1y+T4AMusapLysoCsrPDkYoap2ODm5H7E6jWIN7Y11+z7no02R6u1aPtgibsYjyYJtjJFDsuF7orCft6B1L9+nUxpZJ95twWBVoOjW4nVMBP0XnxtOS5hclTYCPto9rodG+lyyrY5jYGi9OgQ+dhRWu7XtsCDiC3j2iTQ6abc7phSi3lxC42Ng6imfEX122or+Le545jKNyJtl4s2za8HMd4yRfQtxMFy4/TKKly5UqXXEQza1By9+ed9XoTN+esJ+yL3nqKBcGgJx3Es44n3zjmU37OeeE18JPxBB3xv2RxF1vbv3bc/WpyxBuPuwlBQsgdfe0dPe2rLHJvb50sqiRFfbvkdC87MOu3utB5WUBusdsS6Nu6t1HrmdyEX7LZK9logGx+0XtqirHzLj6FRhsE2vWFjVuS8penKlDce4pOqlGIq8eZABrYd3f4tNVQ9synteYFPuYXnNtNdkyjFbMB2nXS+B/D+6JbEKvuhHsfq0dBOdWq/4/eso/K9dzfaet6dZrJOaysZ334p4t76X6wdbicjgIetTHJyYePG0XaDmOzR1Ry8cCjD2ZexL1Xe3d3X61AjcTSNi1B60e+H8AqW7z/iT05YDHItbHrN2yxdKTbCKyKaRC1OcyN9/jUlTba7nM2xLjjdm/Kcsv2Qm9RYTKqJGMbQ16sRQRJjJ/cAsD3gDhpDxcuyevbLa14nnRsdzzu2PADy4PWfbG/6sjG1eeECY1sXuvWY9awzq1d5Xa0vrNnNBDPxQyWvMZElHkbsc6+yAV0mBodAzqMqUQBHXmzqdmUDNRURNqUlBuP6kg6X7IxP2tURyTUNQWAr2BwVhqojfJYGC2A0zivtNO2+noQzk5/RUeGHcxCT2CRuhL9v5Oqx0X73u5ux3iDjyEGj51mtgnbgsqrRj1sFI/9JdAoxnloG6hLG6AMSSu+2l0x1KPqe23B3zokZUVlmiNpNhGbUTOvWmIzHnf0RUcGW2+z/h7XRB2t+zpu7bBAqqu29Fqpxdn9gCOw8ZXVGtTvssyqq7f8iutedyRdv21H8shxIjBo16GlpgMCKijMR81wwWwGlknbHgxomGkU+F0XaAv5rZtqKi/bMk31WUIkoNfIHa37qHjk88QU7k6piiLNSJMDZtVRlDZKmwjSAP1Jd/C4cfrw5FZTGG5ZPUFW2bXGU4lObHcOIVhA6AzWfdC5BfrKZH4QIbG5VeoaiujEc0FQ/bVtNduRXu2W6joEE3PRJQr0DZeKSSFWFhNPpOKqnlwIewigTzl6AP9gHUseHrDnL7+p51FBzqXFcyDxBnVrbb+xsdvbdhCgFmBxLV5Zc/iv9/Ztz3HYDz+8ms2sf4qN/aat7X2+2qau2f3KLI972dfljd6z/2M7uEucVu24g6shbnQHt3IeS/vWBsXTV/iKoqtl/WlEgd/0Iaa+J/yJmurYkM97LLHOuVUm67tA5Um6ztnEnDsQ6IGOwBxZsOUZ9zyQS/C2f+HORCp9UOK8khKEzivoCJVit7fjCNSV480TRyJWozEoZgSoZ/0NnEfM+eGaxEjG7sRsmkO6nXRuW0y9/+mznEQszIH0CG+ajwJfHwfQnVm3NBWJjDCP0EnhAPcQgLJzsyVPRVPih2Kuh5zsN0Vo4WoEPmZaeTUAFKUdxJEU/TS7S98XalCdHcM4xNwqbMC+C6J41nhiulPLEpqeuGCZj/qwGhqkbed+RQLGUqJrvmrpYNoGdq4LrNeRBSSwoZlJEM0HTmDHuK41mUSqvqvc53sniytlXEeU43hBLoUNNV7DFDoR0UngNI3D4kPyOIneCXUdRJdaQmKIISzZk9mkn9AH6+tSJFcsMkBj2srTG3goSEDU3gCGMxoHfUaIkaTHtB9PT1ITXWuvpyByUzzukvNyhWPlBoPspDhY1zOJXv6RYOjY3GHQYdzgoSxMnIVRALbdjF0DFdkcSKMjbaHrLFsh9IFxVTQHeF9Phee5JpWJEeP7A0I5o445i00H1RtIE6VFEkIk4YE5/DM4ZcxTYrr+OEjpUB3qlAyuZFmT/WSnoFz+A81Ods1Te6/f7zdhqfOvLEIyTkoswDGFsgkU0wY3g2GSraMRwSQ7SIIfJgBJ+51ukBtkU2gn2gMm6vg3QydLhwD1iHUb+3l22thD1/kEU83j0QR6MBeyRFYQL4FMvmgcTOaV3BCZiL8zUHfKHbs2TdbScLGvZxjs8S0r7BrmY/K2swmb0Line truncated
|
||||
bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x9/XfbtrLg7/0rEL7bxt5jSXaSZt/m2n7HH2nrNl9rObfb7eneA5GQxJoiGQK0o7p+f/vODMDvT8my4/d6e04dkQQGmMFgZjAYDPafnL4/ufjlw2s2Vwvv8Kv9J4PBV6MROwnCZeTO5optnWyzZ7t7L9iP/DKYsOMgmjHuO1DCV5E7iVUQSbYlhWBqLtjJ+3cX52fHHy/en4/Z1PXE9hDBHXkeI3CSRUKK6Eo4Q/ZRChZMoZormQziyBbMDhzB4HEWXInIFw6bLKEx9vbsYiDV0hMIy3Nt4Utsjitmw9eJYNMghi65PvXhzdnJ63fj19T88KvBALBC5JjH/dmBJXyL+bMBD8MDSy59G5r3Z/TKRowCzxPRgTVOvpyoyLOY7XEpDyws5AX80kKQgjuHXzG2vxCKM3vOIynUgRWr6eDfrezDXKlwID7F7tWB9X8GH48GJ8Ei5MqdeALAQovCh1pnrw+EMxO5ej5fiAPryhXXYRCpXNFr11HzA0dcARkG9LADiLvK5d5A2twTB3vD3QogR0g7ckPlBn4OVqUYj9U8iColPNe/hIHzgGLwWdmxYq6NkOaRmB5Y7mI2mvIrfDUMgZiHX2El5SpPHKaEZH+ymxsc61Pq+jtob2v79nZ/pMulzWiQkyBQUkU8HNlSjtKn4cL1h/DGMr1BnpBzIZRVBjAFDEYRkOOaL/vVQJaLXCBUU/H9kR7zr/YngbOk6o57Veac11dAOOKaw/0RfNfEgGnFLoKQTXjEkCPxnc+vUsbiV/hF/zNQUND8dMSUxx6MP4AXVM6dcRpFbN/0wADBXnDXF5H5Bl9lCPOj0MZgEsHshb7BoCVfvGAWWExGth5KfBwo8VkNXr6g8WRzgXP3wHr+zGKa/6y9vf9pjQBDbCFtLiy1hUDY3HUc4Q8+S+uwngHCtH7s5QAkJMj9JBGSYkfDh+R3YfTicBZxR5z502Doi+scEaggyCkVgHhYhkBF/ZDO6onykwbwJ/w/CCN3waMl/ZaLhM+1lAD5c5m2t7VdaKdE8pm3DOc4LVj6a2DPxVUE/8ahlZDvG7GQ4d9rwADL+9LjSmS/Blfci+GviCRwwYF1c5PHHEtIdXtrHX7Ub4Hp2M3XpvTXt8XxooZGmho5oo48t0hig40TBaETXPtFynJDnH+zyuWAj2czFHMOV9w85KF0kyqYpTTaH/FCsxmrpM0thB+XRwNQSXuYHz7huGoslALBJHEMV+qLHq/SEB0m4HIdLpKytUOuo6dFr858ilBRdvVnHlyzs9Ou7qRkdK9A+EXWKp2W81gh6Xt1OphOO3uswa1HQTAsFI9Ur75AZSg+7+jPuYZ4nxTkkyDu12XQPZEaiEWolh3dPkKYLZ3eH8Ve/XTPvhjVhT9ANGp91aBqdHlUcN+5kVSgqa53WOB7SwbGwrXP3CnzhS2kBIH6d2Zoyq555KNVYJRhpktRmD8B+FN3duaj9ZDKFQCcabZCZ7zBwhnsPctrhtx3oIPwGP0dmGaLIqxcFmntUKn9+fOcEC6UIbPFSniEvRPCEQ6YCM8PU9o1N4AGRFlUhbkhvJijLYw0iCNS92zOJRi6wmeSX6FdDCaYHyjGbeVeQQ0wpzNLaxHjMJiOqSAtRNYxKMci6GFOAxeGvrn7U7DHShq2h47VypT+MWYNC2PPM1r9QWdyWedVWMqD2TZ1P1s1g1l8UXjMPWS2X3FyiFnsgaUHvFxi/QKTJ/CoYuCBVIFlD1TfQtPQE1O1ndWunQwv2+bCYBYFYH4w10E7GaHL9glhJs/NjS59gp+29O/h2SkYcTR6kQgFVwlIXI3pX2+g51U7qXHSFc0FwMfjoUysiJBHtC75t6TfifWhn6GLf3N9R3zGLpHxDhDiSAbRKxYGrl/lWugJzPG6mV0q1sO0mztOiQ8TigGVbm/bAWZTIWcxI1nltavseULWseIqzhO/pqNV8zEFM7ieC7AaY//SJxvso/5RtQv7QpLAkaEAvMf6xx0gwVpey+ax+dUFqwIBJGBZuDe2TyvT1kYY27q5QZgfRGQD1/GZKDD919t1PVuxz65Ty2t1HT6Dog/U2/r3pN2Ks7gsHc3EziRLYUYWplkys1k2xUkFUJEb13/FdEV2cHDAdm+r87aPVqWCik+8VHvrB/qL63YHfUmOeZYqcomZ60ilklV/3beo/gN+mncrMRisDgVmlEDOnAe4jU06KbK4ijer5oIsgvpOAy6jJmTuiqVhiCAUfj9sP3A13wC+CGZtjBOTdAELLu/XlIK/DV0fVuJuPa/0JokxRwfSnXXR5HUUBdFdqNGEwZdhhpkXTLpWsN9DGe4xVHlio5jPCPB3rick+5Nx75ov5bt4MRHR7W1F7LoKOmea32H/2QjueKkI3MT1YaVze3v8Jcg6DxZdVH0T2PdCVA/hboymBO1RkNT2gtgZoF/CC3jZwCsj9h7WZe+ntBZbn7gNpcnZ1iSOfFh/auIfst2ijya4xsVp3mRMHBF1w5gB2sAoIrCaQeQtKCZWUgeWaBNYh7sdfdplx20WE7HNgzMUsPZlPwX4lktYsdwHI1VtcXeamGzDc1iJvfc9sKV+EbKdfo2gnlRgvQse31DEvj0X9qXomtZnMz+IBAPTeuFKdKXLBx8U3QXsgdzEuBTAPcah6e3YwS3gM1zZgzWzAWtRQ0wAjkHsyS+BvpzzSAy4pzp95lDOYT+7dzOVqTmpxY7RFNvrGIbwvn6ZBB9wiVVdUlYWkL0djlTUOB0b3Izcn0G1BvHGvvmG9dejyfZwrR7tFjRhH+PBNMFO5thx2equJOzrHUj169d2SiX7zLktCrQcGt1OqICfovPiaclzC5OnwEbaR7XR6d5Jl3WwzW0MFqdBj87DitZ2va4FHEDuHtEmh0w/53TDlFrJiV1sbBpEC+MvrttQX8e9zx3HULgXbb1Ydm14OY7xkrfQtxcFy4/zKKly5UqXXEQLa1Ry9+ed9XoTN+esJ+yL3nqKBcGgJx3EcxdPvnHMp/yc88Jr4CfTGTrif83iLra2f+u5+9XkiDcedxOChJB7+tp7etrXWeTe3DhZVEmK+nbJ6V52YNZvdaHzsoBcu9sS6Nu5t1HrmdyEX7LZK9logGx+0XtqirHzPj6FRhsE2vWFjVuS8tenKlDce4pOqkmIq8eFABrYt7f4tNVQ9synteYFPuYXnNtNdkyjFbMB2vXS+B/D+6JbEKv+hHsfq0dBOdWp/4/eso/K9dw/aOt6fZrJJaysF0P4p4976X6wdbicTwIedTHJyYePG0XaDmOzR1Ry8cCjD2ZexL1Xe7e3X69BjcTSNi1B60e+H8AqW7z/iT05YDHItanrN2yx9KTbBKyKeRB1OcyN9/jUlTba7ks2xrjjbm/Kasv2Qm9RYTKqJGMbQ16sNoIkxk9uAeB7QJy0h61L8vp2SyueJz3bnU57NvzA8qBzX+wfOrJx/TlhQiOb17r1mDWsc2tXuT2t7+wZDcRzsYAlrzERZd5GrLMvcgEdpkbPgA5jKlFAR95sajYlAzUXkTYl5cajOpLOl2zMLxrVEQl1TQHgaxiclQZqozxaowVwGueVdtrWUA/C2elv6Miwg0XoCSxSV2L4T1L1uGjf293tGW/wMcTgsdPMNmFbUHndqIeN4rG/AhrFOA9tA/VpA5QhacVXu2uGelR9rx34W4ekrKhMcyTNJmIzauZVR2zG446+6Mlgd9usv8c1UU/rvo5beyyQ6qqtvFbqcHY/4AhsfGV1B+r3WWbV1Vt9xXWvO5Ku37UjeeQ4ERi0d6GlpgMCKijMR81wwWIBlknXHgxomHkU+H0XaK381k81lZdtmab6IiES0Gvkjs59VDzyeWIK96dURZFmpMkBs+ooShulTQRpgP6kP3jcOH14cqs5DLesniCr7FrjqUQntnuHELQQOoN1H3TugL42mR9ESGxulXoHRXTiuSCo/tG1mu1Jr25L9S4EE0vRJwr0DZeKSSHWFhNPpOKqnlwIewygTzl6AP9kPUseHrDnL7+t51FBzqX2OZB4g/q1tt/Y2M1NNwhQC7C4Fq+sJfw3ePt24Djshx9eLRbWf4mN/aat7X2+3qau2f3KLI972dfljd6z/2Y7uCucVu25g6shbnQHt3IeS/vWRsXTV/iKoqtl/WlEgd/0IaahJ/yZmuvYkC97LLHOuVUm67tA5Ul6l7OJOXcg0AMdgTmyYMsL7nkgl+Dt8MJdiFT6oMR5JSUInVfQESrFbm6mEagrx1smjkSsRmNQzAhQz/obOI+Y88M1iZGM3YnZNIf0O+nctZh6/9MXOYlYmAPpEd40HwW+Pg6gO4t+aSoSGWEeoZPCAe4hAGXnZkeeiqbED8VcDznZb4rQwtUIfMy08moEKEo7iCMphml2l6Ev1Kg6O8ZxiLlV2Ih9F0TxovHEdK+WJTQ9c8EynwxhNTRK2879igSMpUTXfNXSwbQN7FwXuFtHWkhgQzOzIFqOnMCOcV1rMolUfVe5z/dOFlfKuI4ox3FLLoUNNV7DFDoR0UngNI1D+yF5nETvhLoOokstITHEEJbsyWzST+iD9XUpkisWGaAxbeXpDTwUJCBqPwOGCxoHfUaIkaTHtB9PT1ITXWuvpyByUzxuk/NyhWPlBoPspDhY1wuJXv6JYOjY3GHQYdzgoSxMnIVRALbdgl0DFdkSSKMjbaHrLFshDIFxVbQEeN/Mhee5JpWJEeP7I0I5o445i00H1RtIE6VFEkIk4YE5/DM4ZcxTYrr+NEjpUB3qlAyuZFmTw2SnoFz+A81Ods1Te284HDZhqfOvtCEZJyVacEyhbALFtMHNYJhk62hEMMkOkuCHCUDSfqcb5AbZFNqJ9oCJOv7N0MnSIUA9Yt3Gfp6dNvbQdT7BVPN4NIMeLIUskRXESyCTLxoHk3klN0Qm4u8M1J1yp65Nk7U0XOybBQZ7/J0Vdg3zMXnb2YTNaLine truncated
|
||||
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
assets["index.html"] = bs
|
||||
|
||||
+16
-15
@@ -118,21 +118,22 @@ type FolderDeviceConfiguration struct {
|
||||
}
|
||||
|
||||
type OptionsConfiguration struct {
|
||||
ListenAddress []string `xml:"listenAddress" default:"0.0.0.0:22000"`
|
||||
GlobalAnnServer string `xml:"globalAnnounceServer" default:"announce.syncthing.net:22026"`
|
||||
GlobalAnnEnabled bool `xml:"globalAnnounceEnabled" default:"true"`
|
||||
LocalAnnEnabled bool `xml:"localAnnounceEnabled" default:"true"`
|
||||
LocalAnnPort int `xml:"localAnnouncePort" default:"21025"`
|
||||
LocalAnnMCAddr string `xml:"localAnnounceMCAddr" default:"[ff32::5222]:21026"`
|
||||
MaxSendKbps int `xml:"maxSendKbps"`
|
||||
MaxRecvKbps int `xml:"maxRecvKbps"`
|
||||
ReconnectIntervalS int `xml:"reconnectionIntervalS" default:"60"`
|
||||
StartBrowser bool `xml:"startBrowser" default:"true"`
|
||||
UPnPEnabled bool `xml:"upnpEnabled" default:"true"`
|
||||
UPnPLease int `xml:"upnpLeaseMinutes" default:"0"`
|
||||
UPnPRenewal int `xml:"upnpRenewalMinutes" default:"30"`
|
||||
URAccepted int `xml:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently)
|
||||
RestartOnWakeup bool `xml:"restartOnWakeup" default:"true"`
|
||||
ListenAddress []string `xml:"listenAddress" default:"0.0.0.0:22000"`
|
||||
GlobalAnnServer string `xml:"globalAnnounceServer" default:"announce.syncthing.net:22026"`
|
||||
GlobalAnnEnabled bool `xml:"globalAnnounceEnabled" default:"true"`
|
||||
LocalAnnEnabled bool `xml:"localAnnounceEnabled" default:"true"`
|
||||
LocalAnnPort int `xml:"localAnnouncePort" default:"21025"`
|
||||
LocalAnnMCAddr string `xml:"localAnnounceMCAddr" default:"[ff32::5222]:21026"`
|
||||
MaxSendKbps int `xml:"maxSendKbps"`
|
||||
MaxRecvKbps int `xml:"maxRecvKbps"`
|
||||
ReconnectIntervalS int `xml:"reconnectionIntervalS" default:"60"`
|
||||
StartBrowser bool `xml:"startBrowser" default:"true"`
|
||||
UPnPEnabled bool `xml:"upnpEnabled" default:"true"`
|
||||
UPnPLease int `xml:"upnpLeaseMinutes" default:"0"`
|
||||
UPnPRenewal int `xml:"upnpRenewalMinutes" default:"30"`
|
||||
URAccepted int `xml:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently)
|
||||
RestartOnWakeup bool `xml:"restartOnWakeup" default:"true"`
|
||||
AutoUpgradeIntervalH int `xml:"autoUpgradeIntervalH" default:"12"` // 0 for off
|
||||
|
||||
Deprecated_RescanIntervalS int `xml:"rescanIntervalS,omitempty" json:"-"`
|
||||
Deprecated_UREnabled bool `xml:"urEnabled,omitempty" json:"-"`
|
||||
|
||||
@@ -9,6 +9,8 @@ import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"bitbucket.org/kardianos/osext"
|
||||
)
|
||||
|
||||
type Release struct {
|
||||
@@ -26,8 +28,34 @@ var (
|
||||
ErrVersionUpToDate = errors.New("current version is up to date")
|
||||
ErrVersionUnknown = errors.New("couldn't fetch release information")
|
||||
ErrUpgradeUnsupported = errors.New("upgrade unsupported")
|
||||
ErrUpgradeInProgress = errors.New("upgrade already in progress")
|
||||
upgradeUnlocked = make(chan bool, 1)
|
||||
)
|
||||
|
||||
func init() {
|
||||
upgradeUnlocked <- true
|
||||
}
|
||||
|
||||
// A wrapper around actual implementations
|
||||
func UpgradeTo(rel Release, archExtra string) error {
|
||||
select {
|
||||
case <-upgradeUnlocked:
|
||||
path, err := osext.Executable()
|
||||
if err != nil {
|
||||
upgradeUnlocked <- true
|
||||
return err
|
||||
}
|
||||
err = upgradeTo(path, rel, archExtra)
|
||||
// If we've failed to upgrade, unlock so that another attempt could be made
|
||||
if err != nil {
|
||||
upgradeUnlocked <- true
|
||||
}
|
||||
return err
|
||||
default:
|
||||
return ErrUpgradeInProgress
|
||||
}
|
||||
}
|
||||
|
||||
// Returns 1 if a>b, -1 if a<b and 0 if they are equal
|
||||
func CompareVersions(a, b string) int {
|
||||
arel, apre := versionParts(a)
|
||||
|
||||
@@ -19,17 +19,10 @@ import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"bitbucket.org/kardianos/osext"
|
||||
)
|
||||
|
||||
// Upgrade to the given release, saving the previous binary with a ".old" extension.
|
||||
func UpgradeTo(rel Release, archExtra string) error {
|
||||
path, err := osext.Executable()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func upgradeTo(path string, rel Release, archExtra string) error {
|
||||
osName := runtime.GOOS
|
||||
if osName == "darwin" {
|
||||
// We call the darwin release bundles macosx because that makes more
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
package upgrade
|
||||
|
||||
func UpgradeTo(rel Release, extra string) error {
|
||||
func upgradeTo(path string, rel Release, extra string) error {
|
||||
return ErrUpgradeUnsupported
|
||||
}
|
||||
|
||||
|
||||
@@ -19,17 +19,10 @@ import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"bitbucket.org/kardianos/osext"
|
||||
)
|
||||
|
||||
// Upgrade to the given release, saving the previous binary with a ".old" extension.
|
||||
func UpgradeTo(rel Release, archExtra string) error {
|
||||
path, err := osext.Executable()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func upgradeTo(path string, rel Release, archExtra string) error {
|
||||
expectedRelease := fmt.Sprintf("syncthing-%s-%s%s-%s.", runtime.GOOS, runtime.GOARCH, archExtra, rel.Tag)
|
||||
if debug {
|
||||
l.Debugf("expected release asset %q", expectedRelease)
|
||||
|
||||
Reference in new issue
Block a user