Browse Source

Upgrade debugging, fix upgrade on ARM (fixes #482)

Jakob Borg 11 years ago
parent
commit
28db264e90
4 changed files with 35 additions and 6 deletions
  1. 1 1
      cmd/syncthing/gui.go
  2. 2 1
      cmd/syncthing/main.go
  3. 17 0
      upgrade/debug.go
  4. 15 4
      upgrade/upgrade_supported.go

+ 1 - 1
cmd/syncthing/gui.go

@@ -515,7 +515,7 @@ func restPostUpgrade(w http.ResponseWriter, r *http.Request) {
 	}
 
 	if upgrade.CompareVersions(rel.Tag, Version) == 1 {
-		err = upgrade.UpgradeTo(rel)
+		err = upgrade.UpgradeTo(rel, GoArchExtra)
 		if err != nil {
 			l.Warnln(err)
 			http.Error(w, err.Error(), 500)

+ 2 - 1
cmd/syncthing/main.go

@@ -47,6 +47,7 @@ var (
 	BuildHost   = "unknown"
 	BuildUser   = "unknown"
 	LongVersion string
+	GoArchExtra string // "", "v5", "v6", "v7"
 )
 
 var l = logger.DefaultLogger
@@ -194,7 +195,7 @@ func main() {
 		l.Infof("Upgrade available (current %q < latest %q)", Version, rel.Tag)
 
 		if doUpgrade {
-			err = upgrade.UpgradeTo(rel)
+			err = upgrade.UpgradeTo(rel, GoArchExtra)
 			if err != nil {
 				l.Fatalln("Upgrade:", err) // exits 1
 			}

+ 17 - 0
upgrade/debug.go

@@ -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
+)

+ 15 - 4
upgrade/upgrade_supported.go

@@ -23,10 +23,8 @@ import (
 	"bitbucket.org/kardianos/osext"
 )
 
-var GoArchExtra string // "", "v5", "v6", "v7"
-
 // 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()
 	if err != nil {
 		return err
@@ -38,8 +36,14 @@ func UpgradeTo(rel Release) error {
 		// sense for people downloading them
 		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 {
+		if debug {
+			l.Debugln("considering release", asset)
+		}
 		if strings.HasPrefix(asset.Name, expectedRelease) {
 			if strings.HasSuffix(asset.Name, ".tar.gz") {
 				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) {
+	if debug {
+		l.Debugf("loading %q", url)
+	}
+
 	req, err := http.NewRequest("GET", url, nil)
 	if err != nil {
 		return "", err
@@ -129,6 +137,9 @@ func readTarGZ(url string, dir string) (string, error) {
 		if err != nil {
 			return "", err
 		}
+		if debug {
+			l.Debugf("considering file %q", hdr.Name)
+		}
 
 		if path.Base(hdr.Name) == "syncthing" {
 			of, err := ioutil.TempFile(dir, "syncthing")