diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 6ab3fc01..ed82dc28 100644 --- a/cmd/syncthing/gui.go +++ b/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) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 254623f3..0115b2ef 100644 --- a/cmd/syncthing/main.go +++ b/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 } diff --git a/upgrade/debug.go b/upgrade/debug.go new file mode 100644 index 00000000..552993da --- /dev/null +++ b/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 +) diff --git a/upgrade/upgrade_supported.go b/upgrade/upgrade_supported.go index a2deae87..3bd9a4aa 100644 --- a/upgrade/upgrade_supported.go +++ b/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")