Do not apply defaults if option value was set from ini
Fixes #120.
diff --git a/ini_test.go b/ini_test.go
index c0073e7..941735e 100644
--- a/ini_test.go
+++ b/ini_test.go
@@ -720,6 +720,46 @@
}
}
+func TestIniOverrides(t *testing.T) {
+ file, err := ioutil.TempFile("", "")
+
+ if err != nil {
+ t.Fatalf("Cannot create temporary file: %s", err)
+ }
+
+ defer os.Remove(file.Name())
+
+ _, err = file.WriteString("value-with-default = \"ini-value\"\n")
+ _, err = file.WriteString("value-with-default-override-cli = \"ini-value\"\n")
+
+ if err != nil {
+ t.Fatalf("Cannot write to temporary file: %s", err)
+ }
+
+ file.Close()
+
+ var opts struct {
+ ValueWithDefault string `long:"value-with-default" default:"value"`
+ ValueWithDefaultOverrideCli string `long:"value-with-default-override-cli" default:"value"`
+ }
+
+ p := NewParser(&opts, Default)
+ err = NewIniParser(p).ParseFile(file.Name())
+
+ if err != nil {
+ t.Fatalf("Could not parse ini: %s", err)
+ }
+
+ _, err = p.ParseArgs([]string{"--value-with-default-override-cli", "cli-value"})
+
+ if err != nil {
+ t.Fatalf("Failed to parse arguments: %s", err)
+ }
+
+ assertString(t, opts.ValueWithDefault, "ini-value")
+ assertString(t, opts.ValueWithDefaultOverrideCli, "cli-value")
+}
+
func TestWriteFile(t *testing.T) {
file, err := ioutil.TempFile("", "")
if err != nil {
diff --git a/option.go b/option.go
index b4b867d..a7f4f9a 100644
--- a/option.go
+++ b/option.go
@@ -79,8 +79,9 @@
// Determines if the option will be always quoted in the INI output
iniQuote bool
- tag multiTag
- isSet bool
+ tag multiTag
+ isSet bool
+ preventDefault bool
defaultLiteral string
}
@@ -182,6 +183,7 @@
}
option.isSet = true
+ option.preventDefault = true
if len(option.Choices) != 0 {
found := false
@@ -245,6 +247,7 @@
func (option *Option) clearDefault() {
usedDefault := option.Default
+
if envKey := option.EnvDefaultKey; envKey != "" {
// os.Getenv() makes no distinction between undefined and
// empty values, so we use syscall.Getenv()
diff --git a/parser.go b/parser.go
index 2f74b9a..f2de72c 100644
--- a/parser.go
+++ b/parser.go
@@ -281,7 +281,7 @@
if s.err == nil {
p.eachOption(func(c *Command, g *Group, option *Option) {
- if option.isSet {
+ if option.preventDefault {
return
}