From c21acdd4223dc62c65227e265de0fcb4d35b1493 Mon Sep 17 00:00:00 2001 From: koooge Date: Wed, 23 May 2018 18:01:59 +0000 Subject: [PATCH 1/2] Use defaultConfigFile if configFile is not exist --- viper.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 907a102..3d71fa6 100644 --- a/viper.go +++ b/viper.go @@ -1211,7 +1211,10 @@ func WriteConfig() error { return v.WriteConfig() } func (v *Viper) WriteConfig() error { filename, err := v.getConfigFile() if err != nil { - return err + filename, err = v.getDefaultConfigFile() + if err != nil { + return err + } } return v.writeConfig(filename, true) } @@ -1221,11 +1224,26 @@ func SafeWriteConfig() error { return v.SafeWriteConfig() } func (v *Viper) SafeWriteConfig() error { filename, err := v.getConfigFile() if err != nil { - return err + filename, err = v.getDefaultConfigFile() + if err != nil { + return err + } } return v.writeConfig(filename, false) } +func (v *Viper) getDefaultConfigFile() (string, error) { + if v.configName == "" { + return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)} + } + + if len(v.configPaths) == 0 { + return v.configName + "." + SupportedExts[0], nil + } else { + return filepath.Join(v.configPaths[0], v.configName+"."+SupportedExts[0]), nil + } +} + // WriteConfigAs writes current configuration to a given filename. func WriteConfigAs(filename string) error { return v.WriteConfigAs(filename) } func (v *Viper) WriteConfigAs(filename string) error { From aa2bb3a53792fc6437ba324072cfa1660f9e4f04 Mon Sep 17 00:00:00 2001 From: koooge Date: Thu, 24 May 2018 18:05:24 +0000 Subject: [PATCH 2/2] Create getDefaultConfigFile() test --- viper_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/viper_test.go b/viper_test.go index 60543f5..4d8f3ff 100644 --- a/viper_test.go +++ b/viper_test.go @@ -12,6 +12,7 @@ import ( "io/ioutil" "os" "path" + "path/filepath" "reflect" "sort" "strings" @@ -1032,6 +1033,22 @@ func TestWriteConfigYAML(t *testing.T) { assert.Equal(t, yamlWriteExpected, read) } +func TestGetDefaultConfigFile(t *testing.T) { + v := New() + home, err := filepath.Abs("/homedir") + if err != nil { + t.Fatal(err) + } + v.AddConfigPath(home) + v.SetConfigName("c") + filename, err := v.getDefaultConfigFile() + if err != nil { + t.Fatal(err) + } + ext := "json" + assert.Equal(t, filename, filepath.Join("/homedir", "c"+"."+ext)) +} + var yamlMergeExampleTgt = []byte(` hello: pop: 37890