From 15be5e8700efc0dda7c8ff5c334bca619e504728 Mon Sep 17 00:00:00 2001 From: Daniel Einspanjer Date: Tue, 31 Jul 2018 18:32:14 -0400 Subject: [PATCH] Fix for #549 Add O_CREATE flag to the non-force branch of writeConfig Also add test for the method --- viper.go | 2 +- viper_test.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/viper.go b/viper.go index a32ab73..bad2df8 100644 --- a/viper.go +++ b/viper.go @@ -1310,7 +1310,7 @@ func (v *Viper) writeConfig(filename string, force bool) error { flags = os.O_CREATE | os.O_TRUNC | os.O_WRONLY } else { if _, err := os.Stat(filename); os.IsNotExist(err) { - flags = os.O_WRONLY + flags = os.O_CREATE | os.O_WRONLY } else { return fmt.Errorf("File: %s exists. Use WriteConfig to overwrite.", filename) } diff --git a/viper_test.go b/viper_test.go index c8fa1f4..74db59b 100644 --- a/viper_test.go +++ b/viper_test.go @@ -987,6 +987,26 @@ p_ppu = 0.55 p_batters.batter.type = Regular `) +func TestSafeWriteConfigProperties(t *testing.T) { + v := New() + fs := afero.NewMemMapFs() + v.SetFs(fs) + v.SetConfigName("c") + v.SetConfigType("properties") + err := v.ReadConfig(bytes.NewBuffer(propertiesExample)) + if err != nil { + t.Fatal(err) + } + if err := v.SafeWriteConfigAs("c.properties"); err != nil { + t.Fatal(err) + } + read, err := afero.ReadFile(fs, "c.properties") + if err != nil { + t.Fatal(err) + } + assert.Equal(t, propertiesWriteExpected, read) +} + func TestWriteConfigProperties(t *testing.T) { v := New() fs := afero.NewMemMapFs()