vendor/github.com/spf13/viper/viper_go1_15.go
changeset 260 445e01aede7e
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
       
     1 //go:build !go1.16 || !finder
       
     2 // +build !go1.16 !finder
       
     3 
       
     4 package viper
       
     5 
       
     6 import (
       
     7 	"fmt"
       
     8 	"os"
       
     9 	"path/filepath"
       
    10 
       
    11 	"github.com/spf13/afero"
       
    12 )
       
    13 
       
    14 // Search all configPaths for any config file.
       
    15 // Returns the first path that exists (and is a config file).
       
    16 func (v *Viper) findConfigFile() (string, error) {
       
    17 	v.logger.Info("searching for config in paths", "paths", v.configPaths)
       
    18 
       
    19 	for _, cp := range v.configPaths {
       
    20 		file := v.searchInPath(cp)
       
    21 		if file != "" {
       
    22 			return file, nil
       
    23 		}
       
    24 	}
       
    25 	return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)}
       
    26 }
       
    27 
       
    28 func (v *Viper) searchInPath(in string) (filename string) {
       
    29 	v.logger.Debug("searching for config in path", "path", in)
       
    30 	for _, ext := range SupportedExts {
       
    31 		v.logger.Debug("checking if file exists", "file", filepath.Join(in, v.configName+"."+ext))
       
    32 		if b, _ := exists(v.fs, filepath.Join(in, v.configName+"."+ext)); b {
       
    33 			v.logger.Debug("found file", "file", filepath.Join(in, v.configName+"."+ext))
       
    34 			return filepath.Join(in, v.configName+"."+ext)
       
    35 		}
       
    36 	}
       
    37 
       
    38 	if v.configType != "" {
       
    39 		if b, _ := exists(v.fs, filepath.Join(in, v.configName)); b {
       
    40 			return filepath.Join(in, v.configName)
       
    41 		}
       
    42 	}
       
    43 
       
    44 	return ""
       
    45 }
       
    46 
       
    47 // Check if file Exists
       
    48 func exists(fs afero.Fs, path string) (bool, error) {
       
    49 	stat, err := fs.Stat(path)
       
    50 	if err == nil {
       
    51 		return !stat.IsDir(), nil
       
    52 	}
       
    53 	if os.IsNotExist(err) {
       
    54 		return false, nil
       
    55 	}
       
    56 	return false, err
       
    57 }