Do not clear isSet before parsing ini
Fixes #221.
diff --git a/ini.go b/ini.go
index f9aea2e..e714d3d 100644
--- a/ini.go
+++ b/ini.go
@@ -98,8 +98,6 @@
// information on the ini file format. The returned errors can be of the type
// flags.Error or flags.IniError.
func (i *IniParser) ParseFile(filename string) error {
- i.parser.clearIsSet()
-
ini, err := readIniFromFile(filename)
if err != nil {
@@ -134,8 +132,6 @@
//
// The returned errors can be of the type flags.Error or flags.IniError.
func (i *IniParser) Parse(reader io.Reader) error {
- i.parser.clearIsSet()
-
ini, err := readIni(reader, "")
if err != nil {
diff --git a/ini_test.go b/ini_test.go
index 1d25d45..e1f22ce 100644
--- a/ini_test.go
+++ b/ini_test.go
@@ -846,6 +846,29 @@
assertString(t, opts.ValueWithDefaultOverrideCli, "cli-value")
}
+func TestIniRequired(t *testing.T) {
+ var opts struct {
+ Required string `short:"r" required:"yes" description:"required"`
+ Config func(s string) error `long:"config" default:"no-ini-file" no-ini:"true"`
+ }
+
+ p := NewParser(&opts, Default)
+
+ opts.Config = func(s string) error {
+ inip := NewIniParser(p)
+ inip.ParseAsDefaults = true
+ return inip.Parse(strings.NewReader("Required = ini-value\n"))
+ }
+
+ _, err := p.ParseArgs([]string{"-r", "cli-value"})
+
+ if err != nil {
+ t.Fatalf("Failed to parse arguments: %s", err)
+ }
+
+ assertString(t, opts.Required, "cli-value")
+}
+
func TestWriteFile(t *testing.T) {
file, err := ioutil.TempFile("", "")
if err != nil {