all: Add build constants for runtime.GOOS comparisons (#8442)
all: Add package runtimeos for runtime.GOOS comparisons I grew tired of hand written string comparisons. This adds generated constants for the GOOS values, and predefined Is$OS constants that can be iffed on. In a couple of places I rewrote trivial switch:es to if:s, and added Illumos where we checked for Solaris (because they are effectively the same, and if we're going to target one of them that would be Illumos...).
This commit is contained in:
+23
-24
@@ -14,6 +14,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/build"
|
||||
"github.com/syncthing/syncthing/lib/fs"
|
||||
)
|
||||
|
||||
@@ -133,13 +134,13 @@ func expandLocations() error {
|
||||
// trying.
|
||||
func defaultConfigDir(userHome string) string {
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
case build.Windows:
|
||||
if p := os.Getenv("LocalAppData"); p != "" {
|
||||
return filepath.Join(p, "Syncthing")
|
||||
}
|
||||
return filepath.Join(os.Getenv("AppData"), "Syncthing")
|
||||
|
||||
case "darwin":
|
||||
case build.Darwin:
|
||||
return filepath.Join(userHome, "Library/Application Support/Syncthing")
|
||||
|
||||
default:
|
||||
@@ -153,30 +154,28 @@ func defaultConfigDir(userHome string) string {
|
||||
// defaultDataDir returns the default data directory, which usually is the
|
||||
// config directory but might be something else.
|
||||
func defaultDataDir(userHome, config string) string {
|
||||
switch runtime.GOOS {
|
||||
case "windows", "darwin":
|
||||
return config
|
||||
|
||||
default:
|
||||
// If a database exists at the "normal" location, use that anyway.
|
||||
if _, err := os.Lstat(filepath.Join(config, LevelDBDir)); err == nil {
|
||||
return config
|
||||
}
|
||||
// Always use this env var, as it's explicitly set by the user
|
||||
if xdgHome := os.Getenv("XDG_DATA_HOME"); xdgHome != "" {
|
||||
return filepath.Join(xdgHome, "syncthing")
|
||||
}
|
||||
// Only use the XDG default, if a syncthing specific dir already
|
||||
// exists. Existence of ~/.local/share is not deemed enough, as
|
||||
// it may also exist erroneously on non-XDG systems.
|
||||
xdgDefault := filepath.Join(userHome, ".local/share/syncthing")
|
||||
if _, err := os.Lstat(xdgDefault); err == nil {
|
||||
return xdgDefault
|
||||
}
|
||||
// FYI: XDG_DATA_DIRS is not relevant, as it is for system-wide
|
||||
// data dirs, not user specific ones.
|
||||
if build.IsWindows || build.IsDarwin {
|
||||
return config
|
||||
}
|
||||
|
||||
// If a database exists at the "normal" location, use that anyway.
|
||||
if _, err := os.Lstat(filepath.Join(config, LevelDBDir)); err == nil {
|
||||
return config
|
||||
}
|
||||
// Always use this env var, as it's explicitly set by the user
|
||||
if xdgHome := os.Getenv("XDG_DATA_HOME"); xdgHome != "" {
|
||||
return filepath.Join(xdgHome, "syncthing")
|
||||
}
|
||||
// Only use the XDG default, if a syncthing specific dir already
|
||||
// exists. Existence of ~/.local/share is not deemed enough, as
|
||||
// it may also exist erroneously on non-XDG systems.
|
||||
xdgDefault := filepath.Join(userHome, ".local/share/syncthing")
|
||||
if _, err := os.Lstat(xdgDefault); err == nil {
|
||||
return xdgDefault
|
||||
}
|
||||
// FYI: XDG_DATA_DIRS is not relevant, as it is for system-wide
|
||||
// data dirs, not user specific ones.
|
||||
return config
|
||||
}
|
||||
|
||||
// userHomeDir returns the user's home directory, or dies trying.
|
||||
|
||||
Reference in New Issue
Block a user