|
|
@@ -14,6 +14,7 @@ import (
|
|
|
"io/ioutil"
|
|
|
"net/url"
|
|
|
"os"
|
|
|
+ "path"
|
|
|
"sort"
|
|
|
"strings"
|
|
|
|
|
|
@@ -23,7 +24,7 @@ import (
|
|
|
|
|
|
const (
|
|
|
OldestHandledVersion = 10
|
|
|
- CurrentVersion = 14
|
|
|
+ CurrentVersion = 15
|
|
|
MaxRescanIntervalS = 365 * 24 * 60 * 60
|
|
|
)
|
|
|
|
|
|
@@ -201,6 +202,9 @@ func (cfg *Configuration) prepare(myID protocol.DeviceID) {
|
|
|
if cfg.Version == 13 {
|
|
|
convertV13V14(cfg)
|
|
|
}
|
|
|
+ if cfg.Version == 14 {
|
|
|
+ convertV14V15(cfg)
|
|
|
+ }
|
|
|
|
|
|
// Build a list of available devices
|
|
|
existingDevices := make(map[protocol.DeviceID]bool)
|
|
|
@@ -254,6 +258,21 @@ func (cfg *Configuration) prepare(myID protocol.DeviceID) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func convertV14V15(cfg *Configuration) {
|
|
|
+ // Undo v0.13.0 broken migration
|
|
|
+
|
|
|
+ for i, addr := range cfg.Options.GlobalAnnServers {
|
|
|
+ switch addr {
|
|
|
+ case "default-v4v2/":
|
|
|
+ cfg.Options.GlobalAnnServers[i] = "default-v4"
|
|
|
+ case "default-v6v2/":
|
|
|
+ cfg.Options.GlobalAnnServers[i] = "default-v6"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.Version = 15
|
|
|
+}
|
|
|
+
|
|
|
func convertV13V14(cfg *Configuration) {
|
|
|
// Not using the ignore cache is the new default. Disable it on existing
|
|
|
// configurations.
|
|
|
@@ -307,12 +326,13 @@ func convertV13V14(cfg *Configuration) {
|
|
|
|
|
|
var newAddrs []string
|
|
|
for _, addr := range cfg.Options.GlobalAnnServers {
|
|
|
- if addr != "default" {
|
|
|
- uri, err := url.Parse(addr)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- uri.Path += "v2/"
|
|
|
+ uri, err := url.Parse(addr)
|
|
|
+ if err != nil {
|
|
|
+ // That's odd. Skip the broken address.
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if uri.Scheme == "https" {
|
|
|
+ uri.Path = path.Join(uri.Path, "v2") + "/"
|
|
|
addr = uri.String()
|
|
|
}
|
|
|
|