浏览代码

fix: allow upgrade without config dir (fixes #10240) (#10241)

Jakob Borg 2 月之前
父节点
当前提交
fcf4916086
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      cmd/syncthing/main.go

+ 7 - 3
cmd/syncthing/main.go

@@ -868,12 +868,16 @@ func (u upgradeCmd) Run() error {
 		lf := flock.New(locations.Get(locations.LockFile))
 		lf := flock.New(locations.Get(locations.LockFile))
 		var locked bool
 		var locked bool
 		locked, err = lf.TryLock()
 		locked, err = lf.TryLock()
-		if err != nil {
+		// ErrNotExist is a valid error if this is a new/blank installation
+		// without a config dir, in which case we can proceed with a normal
+		// non-API upgrade.
+		switch {
+		case err != nil && !os.IsNotExist(err):
 			slog.Error("Failed to lock for upgrade", slogutil.Error(err))
 			slog.Error("Failed to lock for upgrade", slogutil.Error(err))
 			os.Exit(1)
 			os.Exit(1)
-		} else if locked {
+		case locked:
 			err = upgradeViaRest()
 			err = upgradeViaRest()
-		} else {
+		default:
 			err = upgrade.To(release)
 			err = upgrade.To(release)
 		}
 		}
 	}
 	}