Ver código fonte

Add autoUpgrade coroutine (fixes #727)

Audrius Butkevicius 11 anos atrás
pai
commit
997692b494
2 arquivos alterados com 53 adições e 15 exclusões
  1. 37 0
      cmd/syncthing/main.go
  2. 16 15
      internal/config/config.go

+ 37 - 0
cmd/syncthing/main.go

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

+ 16 - 15
internal/config/config.go

@@ -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:"-"`