You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
package main
import (
"errors""fmt""log""path/filepath""github.com/spf13/afero""github.com/spf13/viper"
)
typeConfigstruct {
Versionint`json:"version"`
}
funcLoad(fs afero.Fs, cfgDest...*Config) error {
// Defaults set here will be used if they do not exist in the config fileviper.SetFs(fs)
// Set up the config file detailsviper.SetConfigName("config")
viper.SetConfigType("json")
viper.AddConfigPath(".")
viper.AddConfigPath(".viper")
// Retrieve from EnvVars if they exist...viper.AutomaticEnv()
// Read from the config file patherr:=viper.ReadInConfig()
iferr!=nil {
returnfmt.Errorf("error with viper.ReadInConfig(): %w", err)
}
ifcfgDest==nil {
returnerrors.New("cfg cannot be nil")
}
returnviper.Unmarshal(cfgDest[0])
}
funcload(createFnfunc(fs afero.Fs, namestring) (afero.File, error)) error {
fs:=afero.NewMemMapFs()
err:=fs.Mkdir(".viper", 0o777)
iferr!=nil {
returnerr
}
file, err:=createFn(fs, ".viper/config")
iferr!=nil {
returnerr
}
cfg:=Config{}
_, err=file.Write([]byte(`{ "version": 1 }`),
)
iferr!=nil {
returnerr
}
file.Close()
err=Load(fs, &cfg)
iferr!=nil {
returnerr
}
returnnil
}
funcmain() {
createWithAbsolute:=func(fs afero.Fs, namestring) (afero.File, error) {
s, err:=filepath.Abs(name)
iferr!=nil {
returnnil, fmt.Errorf("createWithAbsolute failed: %w", err)
}
returnfs.Create(s)
}
iferr:=load(createWithAbsolute); err!=nil {
log.Fatal(err)
}
fmt.Println("load with createWithAbsolute succeeded")
createWithoutAbsolute:=func(fs afero.Fs, namestring) (afero.File, error) {
returnfs.Create(name)
}
iferr:=load(createWithoutAbsolute); err!=nil {
log.Fatal(err)
}
/* load with createWithAbsolute succeeded 2023/10/22 21:54:33 error with viper.ReadInConfig(): Config File "config" Not Found in "[/Users/bk/project /Users/home/project/.viper]" exit status 1 */fmt.Println("load with createWithoutAbsolute succeeded")
}
Expected Behavior
The second call to load() with createWithoutAbsolute is expected to fail but it should not mention my real OsFs in the error message. Instead I expect the error message to only reference the in memory filesystem. It seems viper.ReadInConfig() has some fallback behavior maybe? If such behavior exists as a feature, fallback should be off by default.
Actual Behavior
2023/10/22 21:54:33 error with viper.ReadInConfig(): Config File "config" Not Found in "[/Users/bk/project /Users/home/project/.viper]"
exit status 1
The error message from viper.ReadInConfig() is referencing filepaths on my real OsFs even though I told viper to only read from in-mem
Steps To Reproduce
No response
Additional Information
No response
The text was updated successfully, but these errors were encountered:
A maintainer will take a look at your issue shortly. 👀
In the meantime: We are working on Viper v2 and we would love to hear your thoughts about what you like or don't like about Viper, so we can improve or fix those issues.
📣 If you've already given us your feedback, you can still help by spreading the news,
either by sharing the above link or telling people about this on Twitter:
Preflight Checklist
Viper Version
1.17.0
Go Version
1.21
Config Source
Files
Format
JSON
Repl.it link
https://replit.com/@kurtzbrandon/viperreadinconfigbug
Code reproducing the issue
Expected Behavior
The second call to
load()
withcreateWithoutAbsolute
is expected to fail but it should not mention my real OsFs in the error message. Instead I expect the error message to only reference the in memory filesystem. It seems viper.ReadInConfig() has some fallback behavior maybe? If such behavior exists as a feature, fallback should be off by default.Actual Behavior
The error message from
viper.ReadInConfig()
is referencing filepaths on my real OsFs even though I told viper to only read from in-memSteps To Reproduce
No response
Additional Information
No response
The text was updated successfully, but these errors were encountered: