Fix -ignore-config flag behavior (#134)

* Fix the behavior of the -ignore-config command line flag

* Fix the bug with determining which flags are actually provided in the command line
This commit is contained in:
Max Risuhin 2019-01-09 09:21:10 +02:00 committed by nikitar020
parent ab80fcd44e
commit 76f883032f
1 changed files with 41 additions and 14 deletions

View File

@ -11,24 +11,31 @@ import (
"github.com/liamg/aminal/version"
)
func getActuallyProvidedFlags() map[string]bool {
result := make(map[string]bool)
flag.Visit(func(f *flag.Flag) {
result[f.Name] = true
})
return result
}
func getConfig() *config.Config {
showVersion := false
ignoreConfig := false
shell := ""
debugMode := false
slomo := false
flag.BoolVar(&showVersion, "version", showVersion, "Output version information")
flag.BoolVar(&ignoreConfig, "ignore-config", ignoreConfig, "Ignore user config files and use defaults")
flag.StringVar(&shell, "shell", shell, "Specify the shell to use")
flag.BoolVar(&debugMode, "debug", debugMode, "Enable debug logging")
flag.BoolVar(&slomo, "slomo", slomo, "Render in slow motion (useful for debugging)")
ignore := false
flag.BoolVar(&ignore, "ignore-config", ignore, "Ignore user config files and use defaults")
if ignore {
return &config.DefaultConfig
}
conf := loadConfigFile()
flag.StringVar(&conf.Shell, "shell", conf.Shell, "Specify the shell to use")
flag.BoolVar(&conf.DebugMode, "debug", conf.DebugMode, "Enable debug logging")
flag.BoolVar(&conf.Slomo, "slomo", conf.Slomo, "Render in slow motion (useful for debugging)")
flag.Parse()
flag.Parse() // actual parsing and fetching flags from the command line
actuallyProvidedFlags := getActuallyProvidedFlags()
if showVersion {
v := version.Version
@ -39,6 +46,26 @@ func getConfig() *config.Config {
os.Exit(0)
}
var conf *config.Config
if ignoreConfig {
conf = &config.DefaultConfig
} else {
conf = loadConfigFile()
}
// Override values in the configuration file with the values specified in the command line, if any.
if actuallyProvidedFlags["shell"] {
conf.Shell = shell
}
if actuallyProvidedFlags["debug"] {
conf.DebugMode = debugMode
}
if actuallyProvidedFlags["slomo"] {
conf.Slomo = slomo
}
return conf
}