mirror of
https://github.com/spf13/viper
synced 2025-05-11 22:57:21 +00:00
When config type is unset and filename provided with extension viper failed to properly find that file. According to the docs, having set file name with extension is not required to provide config type.
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
//go:build !go1.16 || !finder
|
|
// +build !go1.16 !finder
|
|
|
|
package viper
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/spf13/afero"
|
|
)
|
|
|
|
// Search all configPaths for any config file.
|
|
// Returns the first path that exists (and is a config file).
|
|
func (v *Viper) findConfigFile() (string, error) {
|
|
v.logger.Info("searching for config in paths", "paths", v.configPaths)
|
|
|
|
for _, cp := range v.configPaths {
|
|
file := v.searchInPath(cp)
|
|
if file != "" {
|
|
return file, nil
|
|
}
|
|
}
|
|
return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)}
|
|
}
|
|
|
|
func (v *Viper) searchInPath(in string) (filename string) {
|
|
v.logger.Debug("searching for config in path", "path", in)
|
|
for _, ext := range SupportedExts {
|
|
v.logger.Debug("checking if file exists", "file", filepath.Join(in, v.configName+"."+ext))
|
|
if b, _ := exists(v.fs, filepath.Join(in, v.configName+"."+ext)); b {
|
|
v.logger.Debug("found file", "file", filepath.Join(in, v.configName+"."+ext))
|
|
return filepath.Join(in, v.configName+"."+ext)
|
|
}
|
|
}
|
|
|
|
if v.configType == "" {
|
|
if b, _ := exists(v.fs, filepath.Join(in, v.configName)); b {
|
|
return filepath.Join(in, v.configName)
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// Check if file Exists
|
|
func exists(fs afero.Fs, path string) (bool, error) {
|
|
stat, err := fs.Stat(path)
|
|
if err == nil {
|
|
return !stat.IsDir(), nil
|
|
}
|
|
if os.IsNotExist(err) {
|
|
return false, nil
|
|
}
|
|
return false, err
|
|
}
|