mirror of
https://github.com/octoleo/syncthing.git
synced 2025-02-13 00:58:32 +00:00
Upgrade debugging, fix upgrade on ARM (fixes #482)
This commit is contained in:
parent
6af9fa4b81
commit
28db264e90
@ -515,7 +515,7 @@ func restPostUpgrade(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if upgrade.CompareVersions(rel.Tag, Version) == 1 {
|
if upgrade.CompareVersions(rel.Tag, Version) == 1 {
|
||||||
err = upgrade.UpgradeTo(rel)
|
err = upgrade.UpgradeTo(rel, GoArchExtra)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Warnln(err)
|
l.Warnln(err)
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
|
@ -47,6 +47,7 @@ var (
|
|||||||
BuildHost = "unknown"
|
BuildHost = "unknown"
|
||||||
BuildUser = "unknown"
|
BuildUser = "unknown"
|
||||||
LongVersion string
|
LongVersion string
|
||||||
|
GoArchExtra string // "", "v5", "v6", "v7"
|
||||||
)
|
)
|
||||||
|
|
||||||
var l = logger.DefaultLogger
|
var l = logger.DefaultLogger
|
||||||
@ -194,7 +195,7 @@ func main() {
|
|||||||
l.Infof("Upgrade available (current %q < latest %q)", Version, rel.Tag)
|
l.Infof("Upgrade available (current %q < latest %q)", Version, rel.Tag)
|
||||||
|
|
||||||
if doUpgrade {
|
if doUpgrade {
|
||||||
err = upgrade.UpgradeTo(rel)
|
err = upgrade.UpgradeTo(rel, GoArchExtra)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Fatalln("Upgrade:", err) // exits 1
|
l.Fatalln("Upgrade:", err) // exits 1
|
||||||
}
|
}
|
||||||
|
17
upgrade/debug.go
Normal file
17
upgrade/debug.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
|
||||||
|
// All rights reserved. Use of this source code is governed by an MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package upgrade
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/syncthing/syncthing/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
debug = strings.Contains(os.Getenv("STTRACE"), "upgrade") || os.Getenv("STTRACE") == "all"
|
||||||
|
l = logger.DefaultLogger
|
||||||
|
)
|
@ -23,10 +23,8 @@ import (
|
|||||||
"bitbucket.org/kardianos/osext"
|
"bitbucket.org/kardianos/osext"
|
||||||
)
|
)
|
||||||
|
|
||||||
var GoArchExtra string // "", "v5", "v6", "v7"
|
|
||||||
|
|
||||||
// Upgrade to the given release, saving the previous binary with a ".old" extension.
|
// Upgrade to the given release, saving the previous binary with a ".old" extension.
|
||||||
func UpgradeTo(rel Release) error {
|
func UpgradeTo(rel Release, archExtra string) error {
|
||||||
path, err := osext.Executable()
|
path, err := osext.Executable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -38,8 +36,14 @@ func UpgradeTo(rel Release) error {
|
|||||||
// sense for people downloading them
|
// sense for people downloading them
|
||||||
osName = "macosx"
|
osName = "macosx"
|
||||||
}
|
}
|
||||||
expectedRelease := fmt.Sprintf("syncthing-%s-%s%s-%s.", osName, runtime.GOARCH, GoArchExtra, rel.Tag)
|
expectedRelease := fmt.Sprintf("syncthing-%s-%s%s-%s.", osName, runtime.GOARCH, archExtra, rel.Tag)
|
||||||
|
if debug {
|
||||||
|
l.Debugf("expected release asset %q", expectedRelease)
|
||||||
|
}
|
||||||
for _, asset := range rel.Assets {
|
for _, asset := range rel.Assets {
|
||||||
|
if debug {
|
||||||
|
l.Debugln("considering release", asset)
|
||||||
|
}
|
||||||
if strings.HasPrefix(asset.Name, expectedRelease) {
|
if strings.HasPrefix(asset.Name, expectedRelease) {
|
||||||
if strings.HasSuffix(asset.Name, ".tar.gz") {
|
if strings.HasSuffix(asset.Name, ".tar.gz") {
|
||||||
fname, err := readTarGZ(asset.URL, filepath.Dir(path))
|
fname, err := readTarGZ(asset.URL, filepath.Dir(path))
|
||||||
@ -97,6 +101,10 @@ func LatestRelease(prerelease bool) (Release, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func readTarGZ(url string, dir string) (string, error) {
|
func readTarGZ(url string, dir string) (string, error) {
|
||||||
|
if debug {
|
||||||
|
l.Debugf("loading %q", url)
|
||||||
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@ -129,6 +137,9 @@ func readTarGZ(url string, dir string) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
if debug {
|
||||||
|
l.Debugf("considering file %q", hdr.Name)
|
||||||
|
}
|
||||||
|
|
||||||
if path.Base(hdr.Name) == "syncthing" {
|
if path.Base(hdr.Name) == "syncthing" {
|
||||||
of, err := ioutil.TempFile(dir, "syncthing")
|
of, err := ioutil.TempFile(dir, "syncthing")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user