mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-10 13:20:33 +02:00
cmd/ctrld: factor out code to read config file
So start/run command will use the same code path, prevent mismatch from reading/searching/writing config file.
This commit is contained in:
+26
-22
@@ -146,26 +146,7 @@ func initCLI() {
|
|||||||
}
|
}
|
||||||
noConfigStart := isNoConfigStart(cmd)
|
noConfigStart := isNoConfigStart(cmd)
|
||||||
writeDefaultConfig := !noConfigStart && configBase64 == ""
|
writeDefaultConfig := !noConfigStart && configBase64 == ""
|
||||||
configs := []struct {
|
tryReadingConfig(writeDefaultConfig)
|
||||||
name string
|
|
||||||
written bool
|
|
||||||
}{
|
|
||||||
// For compatibility, we check for config.toml first, but only read it if exists.
|
|
||||||
{"config", false},
|
|
||||||
{"ctrld", writeDefaultConfig},
|
|
||||||
}
|
|
||||||
|
|
||||||
dir, err := userHomeDir()
|
|
||||||
if err != nil {
|
|
||||||
mainLog.Fatal().Msgf("failed to get config dir: %v", err)
|
|
||||||
}
|
|
||||||
for _, config := range configs {
|
|
||||||
ctrld.SetConfigNameWithPath(v, config.name, dir)
|
|
||||||
v.SetConfigFile(configPath)
|
|
||||||
if readConfigFile(config.written) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
readBase64Config(configBase64)
|
readBase64Config(configBase64)
|
||||||
processNoConfigFlags(noConfigStart)
|
processNoConfigFlags(noConfigStart)
|
||||||
@@ -285,12 +266,12 @@ func initCLI() {
|
|||||||
setWorkingDirectory(sc, dir)
|
setWorkingDirectory(sc, dir)
|
||||||
if configPath == "" && writeDefaultConfig {
|
if configPath == "" && writeDefaultConfig {
|
||||||
defaultConfigFile = filepath.Join(dir, defaultConfigFile)
|
defaultConfigFile = filepath.Join(dir, defaultConfigFile)
|
||||||
v.SetConfigFile(defaultConfigFile)
|
|
||||||
}
|
}
|
||||||
sc.Arguments = append(sc.Arguments, "--homedir="+dir)
|
sc.Arguments = append(sc.Arguments, "--homedir="+dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
readConfigFile(writeDefaultConfig && cdUID == "")
|
tryReadingConfig(writeDefaultConfig)
|
||||||
|
|
||||||
if err := v.Unmarshal(&cfg); err != nil {
|
if err := v.Unmarshal(&cfg); err != nil {
|
||||||
mainLog.Fatal().Msgf("failed to unmarshal config: %v", err)
|
mainLog.Fatal().Msgf("failed to unmarshal config: %v", err)
|
||||||
}
|
}
|
||||||
@@ -909,3 +890,26 @@ func userHomeDir() (string, error) {
|
|||||||
}
|
}
|
||||||
return dir, nil
|
return dir, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tryReadingConfig(writeDefaultConfig bool) {
|
||||||
|
configs := []struct {
|
||||||
|
name string
|
||||||
|
written bool
|
||||||
|
}{
|
||||||
|
// For compatibility, we check for config.toml first, but only read it if exists.
|
||||||
|
{"config", false},
|
||||||
|
{"ctrld", writeDefaultConfig},
|
||||||
|
}
|
||||||
|
|
||||||
|
dir, err := userHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
mainLog.Fatal().Msgf("failed to get config dir: %v", err)
|
||||||
|
}
|
||||||
|
for _, config := range configs {
|
||||||
|
ctrld.SetConfigNameWithPath(v, config.name, dir)
|
||||||
|
v.SetConfigFile(configPath)
|
||||||
|
if readConfigFile(config.written) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user