forked from mirror/viper
Improve lint rules
Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
This commit is contained in:
parent
ae12c841bc
commit
a5152092c6
|
@ -1,6 +1,8 @@
|
||||||
linters-settings:
|
linters-settings:
|
||||||
|
gci:
|
||||||
|
local-prefixes: github.com/spf13/viper
|
||||||
golint:
|
golint:
|
||||||
min-confidence: 0.1
|
min-confidence: 0
|
||||||
goimports:
|
goimports:
|
||||||
local-prefixes: github.com/spf13/viper
|
local-prefixes: github.com/spf13/viper
|
||||||
|
|
||||||
|
@ -13,8 +15,10 @@ linters:
|
||||||
- dupl
|
- dupl
|
||||||
- exhaustive
|
- exhaustive
|
||||||
- exportloopref
|
- exportloopref
|
||||||
|
- gci
|
||||||
- goconst
|
- goconst
|
||||||
- gofmt
|
- gofmt
|
||||||
|
- gofumpt
|
||||||
- goimports
|
- goimports
|
||||||
- golint
|
- golint
|
||||||
- goprintffuncname
|
- goprintffuncname
|
||||||
|
@ -39,14 +43,12 @@ linters:
|
||||||
|
|
||||||
# fixme
|
# fixme
|
||||||
# - errcheck
|
# - errcheck
|
||||||
# - gci
|
|
||||||
# - gochecknoglobals
|
# - gochecknoglobals
|
||||||
# - gochecknoinits
|
# - gochecknoinits
|
||||||
# - gocognit
|
# - gocognit
|
||||||
# - gocritic
|
# - gocritic
|
||||||
# - gocyclo
|
# - gocyclo
|
||||||
# - godot
|
# - godot
|
||||||
# - gofumpt
|
|
||||||
# - gosec
|
# - gosec
|
||||||
# - gosimple
|
# - gosimple
|
||||||
# - lll
|
# - lll
|
||||||
|
|
|
@ -10,13 +10,13 @@ import (
|
||||||
func TestBindFlagValueSet(t *testing.T) {
|
func TestBindFlagValueSet(t *testing.T) {
|
||||||
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||||
|
|
||||||
var testValues = map[string]*string{
|
testValues := map[string]*string{
|
||||||
"host": nil,
|
"host": nil,
|
||||||
"port": nil,
|
"port": nil,
|
||||||
"endpoint": nil,
|
"endpoint": nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
var mutatedTestValues = map[string]string{
|
mutatedTestValues := map[string]string{
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
"port": "6060",
|
"port": "6060",
|
||||||
"endpoint": "/public",
|
"endpoint": "/public",
|
||||||
|
@ -44,8 +44,8 @@ func TestBindFlagValueSet(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBindFlagValue(t *testing.T) {
|
func TestBindFlagValue(t *testing.T) {
|
||||||
var testString = "testing"
|
testString := "testing"
|
||||||
var testValue = newStringValue(testString, &testString)
|
testValue := newStringValue(testString, &testString)
|
||||||
|
|
||||||
flag := &pflag.Flag{
|
flag := &pflag.Flag{
|
||||||
Name: "testflag",
|
Name: "testflag",
|
||||||
|
@ -59,7 +59,7 @@ func TestBindFlagValue(t *testing.T) {
|
||||||
assert.Equal(t, testString, Get("testvalue"))
|
assert.Equal(t, testString, Get("testvalue"))
|
||||||
|
|
||||||
flag.Value.Set("testing_mutate")
|
flag.Value.Set("testing_mutate")
|
||||||
flag.Changed = true //hack for pflag usage
|
flag.Changed = true // hack for pflag usage
|
||||||
|
|
||||||
assert.Equal(t, "testing_mutate", Get("testvalue"))
|
assert.Equal(t, "testing_mutate", Get("testvalue"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ func TestNestedOverrides(t *testing.T) {
|
||||||
func overrideDefault(assert *assert.Assertions, firstPath string, firstValue interface{}, secondPath string, secondValue interface{}) *Viper {
|
func overrideDefault(assert *assert.Assertions, firstPath string, firstValue interface{}, secondPath string, secondValue interface{}) *Viper {
|
||||||
return overrideFromLayer(defaultLayer, assert, firstPath, firstValue, secondPath, secondValue)
|
return overrideFromLayer(defaultLayer, assert, firstPath, firstValue, secondPath, secondValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
func override(assert *assert.Assertions, firstPath string, firstValue interface{}, secondPath string, secondValue interface{}) *Viper {
|
func override(assert *assert.Assertions, firstPath string, firstValue interface{}, secondPath string, secondValue interface{}) *Viper {
|
||||||
return overrideFromLayer(overrideLayer, assert, firstPath, firstValue, secondPath, secondValue)
|
return overrideFromLayer(overrideLayer, assert, firstPath, firstValue, secondPath, secondValue)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,9 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
|
|
||||||
crypt "github.com/bketelsen/crypt/config"
|
crypt "github.com/bketelsen/crypt/config"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
type remoteConfigProvider struct{}
|
type remoteConfigProvider struct{}
|
||||||
|
|
|
@ -24,14 +24,16 @@ func TestCopyAndInsensitiviseMap(t *testing.T) {
|
||||||
"Bar": map[interface{}]interface {
|
"Bar": map[interface{}]interface {
|
||||||
}{
|
}{
|
||||||
"ABc": "A",
|
"ABc": "A",
|
||||||
"cDE": "B"},
|
"cDE": "B",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
expected = map[string]interface{}{
|
expected = map[string]interface{}{
|
||||||
"foo": 32,
|
"foo": 32,
|
||||||
"bar": map[string]interface {
|
"bar": map[string]interface {
|
||||||
}{
|
}{
|
||||||
"abc": "A",
|
"abc": "A",
|
||||||
"cde": "B"},
|
"cde": "B",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
58
viper.go
58
viper.go
|
@ -409,6 +409,7 @@ func (v *Viper) WatchConfig() {
|
||||||
// SetConfigFile explicitly defines the path, name and extension of the config file.
|
// SetConfigFile explicitly defines the path, name and extension of the config file.
|
||||||
// Viper will use this and not check any of the config paths.
|
// Viper will use this and not check any of the config paths.
|
||||||
func SetConfigFile(in string) { v.SetConfigFile(in) }
|
func SetConfigFile(in string) { v.SetConfigFile(in) }
|
||||||
|
|
||||||
func (v *Viper) SetConfigFile(in string) {
|
func (v *Viper) SetConfigFile(in string) {
|
||||||
if in != "" {
|
if in != "" {
|
||||||
v.configFile = in
|
v.configFile = in
|
||||||
|
@ -419,6 +420,7 @@ func (v *Viper) SetConfigFile(in string) {
|
||||||
// E.g. if your prefix is "spf", the env registry will look for env
|
// E.g. if your prefix is "spf", the env registry will look for env
|
||||||
// variables that start with "SPF_".
|
// variables that start with "SPF_".
|
||||||
func SetEnvPrefix(in string) { v.SetEnvPrefix(in) }
|
func SetEnvPrefix(in string) { v.SetEnvPrefix(in) }
|
||||||
|
|
||||||
func (v *Viper) SetEnvPrefix(in string) {
|
func (v *Viper) SetEnvPrefix(in string) {
|
||||||
if in != "" {
|
if in != "" {
|
||||||
v.envPrefix = in
|
v.envPrefix = in
|
||||||
|
@ -437,6 +439,7 @@ func (v *Viper) mergeWithEnvPrefix(in string) string {
|
||||||
// but empty environment variables as valid values instead of falling back.
|
// but empty environment variables as valid values instead of falling back.
|
||||||
// For backward compatibility reasons this is false by default.
|
// For backward compatibility reasons this is false by default.
|
||||||
func AllowEmptyEnv(allowEmptyEnv bool) { v.AllowEmptyEnv(allowEmptyEnv) }
|
func AllowEmptyEnv(allowEmptyEnv bool) { v.AllowEmptyEnv(allowEmptyEnv) }
|
||||||
|
|
||||||
func (v *Viper) AllowEmptyEnv(allowEmptyEnv bool) {
|
func (v *Viper) AllowEmptyEnv(allowEmptyEnv bool) {
|
||||||
v.allowEmptyEnv = allowEmptyEnv
|
v.allowEmptyEnv = allowEmptyEnv
|
||||||
}
|
}
|
||||||
|
@ -465,6 +468,7 @@ func (v *Viper) ConfigFileUsed() string { return v.configFile }
|
||||||
// AddConfigPath adds a path for Viper to search for the config file in.
|
// AddConfigPath adds a path for Viper to search for the config file in.
|
||||||
// Can be called multiple times to define multiple search paths.
|
// Can be called multiple times to define multiple search paths.
|
||||||
func AddConfigPath(in string) { v.AddConfigPath(in) }
|
func AddConfigPath(in string) { v.AddConfigPath(in) }
|
||||||
|
|
||||||
func (v *Viper) AddConfigPath(in string) {
|
func (v *Viper) AddConfigPath(in string) {
|
||||||
if in != "" {
|
if in != "" {
|
||||||
absin := absPathify(in)
|
absin := absPathify(in)
|
||||||
|
@ -486,6 +490,7 @@ func (v *Viper) AddConfigPath(in string) {
|
||||||
func AddRemoteProvider(provider, endpoint, path string) error {
|
func AddRemoteProvider(provider, endpoint, path string) error {
|
||||||
return v.AddRemoteProvider(provider, endpoint, path)
|
return v.AddRemoteProvider(provider, endpoint, path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error {
|
func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error {
|
||||||
if !stringInSlice(provider, SupportedRemoteProviders) {
|
if !stringInSlice(provider, SupportedRemoteProviders) {
|
||||||
return UnsupportedRemoteProviderError(provider)
|
return UnsupportedRemoteProviderError(provider)
|
||||||
|
@ -706,6 +711,7 @@ func (v *Viper) isPathShadowedInAutoEnv(path []string) string {
|
||||||
//
|
//
|
||||||
// "a b c"
|
// "a b c"
|
||||||
func SetTypeByDefaultValue(enable bool) { v.SetTypeByDefaultValue(enable) }
|
func SetTypeByDefaultValue(enable bool) { v.SetTypeByDefaultValue(enable) }
|
||||||
|
|
||||||
func (v *Viper) SetTypeByDefaultValue(enable bool) {
|
func (v *Viper) SetTypeByDefaultValue(enable bool) {
|
||||||
v.typeByDefValue = enable
|
v.typeByDefValue = enable
|
||||||
}
|
}
|
||||||
|
@ -723,6 +729,7 @@ func GetViper() *Viper {
|
||||||
//
|
//
|
||||||
// Get returns an interface. For a specific value use one of the Get____ methods.
|
// Get returns an interface. For a specific value use one of the Get____ methods.
|
||||||
func Get(key string) interface{} { return v.Get(key) }
|
func Get(key string) interface{} { return v.Get(key) }
|
||||||
|
|
||||||
func (v *Viper) Get(key string) interface{} {
|
func (v *Viper) Get(key string) interface{} {
|
||||||
lcaseKey := strings.ToLower(key)
|
lcaseKey := strings.ToLower(key)
|
||||||
val := v.find(lcaseKey, true)
|
val := v.find(lcaseKey, true)
|
||||||
|
@ -773,6 +780,7 @@ func (v *Viper) Get(key string) interface{} {
|
||||||
// Sub returns new Viper instance representing a sub tree of this instance.
|
// Sub returns new Viper instance representing a sub tree of this instance.
|
||||||
// Sub is case-insensitive for a key.
|
// Sub is case-insensitive for a key.
|
||||||
func Sub(key string) *Viper { return v.Sub(key) }
|
func Sub(key string) *Viper { return v.Sub(key) }
|
||||||
|
|
||||||
func (v *Viper) Sub(key string) *Viper {
|
func (v *Viper) Sub(key string) *Viper {
|
||||||
subv := New()
|
subv := New()
|
||||||
data := v.Get(key)
|
data := v.Get(key)
|
||||||
|
@ -789,96 +797,112 @@ func (v *Viper) Sub(key string) *Viper {
|
||||||
|
|
||||||
// GetString returns the value associated with the key as a string.
|
// GetString returns the value associated with the key as a string.
|
||||||
func GetString(key string) string { return v.GetString(key) }
|
func GetString(key string) string { return v.GetString(key) }
|
||||||
|
|
||||||
func (v *Viper) GetString(key string) string {
|
func (v *Viper) GetString(key string) string {
|
||||||
return cast.ToString(v.Get(key))
|
return cast.ToString(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBool returns the value associated with the key as a boolean.
|
// GetBool returns the value associated with the key as a boolean.
|
||||||
func GetBool(key string) bool { return v.GetBool(key) }
|
func GetBool(key string) bool { return v.GetBool(key) }
|
||||||
|
|
||||||
func (v *Viper) GetBool(key string) bool {
|
func (v *Viper) GetBool(key string) bool {
|
||||||
return cast.ToBool(v.Get(key))
|
return cast.ToBool(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt returns the value associated with the key as an integer.
|
// GetInt returns the value associated with the key as an integer.
|
||||||
func GetInt(key string) int { return v.GetInt(key) }
|
func GetInt(key string) int { return v.GetInt(key) }
|
||||||
|
|
||||||
func (v *Viper) GetInt(key string) int {
|
func (v *Viper) GetInt(key string) int {
|
||||||
return cast.ToInt(v.Get(key))
|
return cast.ToInt(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt32 returns the value associated with the key as an integer.
|
// GetInt32 returns the value associated with the key as an integer.
|
||||||
func GetInt32(key string) int32 { return v.GetInt32(key) }
|
func GetInt32(key string) int32 { return v.GetInt32(key) }
|
||||||
|
|
||||||
func (v *Viper) GetInt32(key string) int32 {
|
func (v *Viper) GetInt32(key string) int32 {
|
||||||
return cast.ToInt32(v.Get(key))
|
return cast.ToInt32(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt64 returns the value associated with the key as an integer.
|
// GetInt64 returns the value associated with the key as an integer.
|
||||||
func GetInt64(key string) int64 { return v.GetInt64(key) }
|
func GetInt64(key string) int64 { return v.GetInt64(key) }
|
||||||
|
|
||||||
func (v *Viper) GetInt64(key string) int64 {
|
func (v *Viper) GetInt64(key string) int64 {
|
||||||
return cast.ToInt64(v.Get(key))
|
return cast.ToInt64(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUint returns the value associated with the key as an unsigned integer.
|
// GetUint returns the value associated with the key as an unsigned integer.
|
||||||
func GetUint(key string) uint { return v.GetUint(key) }
|
func GetUint(key string) uint { return v.GetUint(key) }
|
||||||
|
|
||||||
func (v *Viper) GetUint(key string) uint {
|
func (v *Viper) GetUint(key string) uint {
|
||||||
return cast.ToUint(v.Get(key))
|
return cast.ToUint(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUint32 returns the value associated with the key as an unsigned integer.
|
// GetUint32 returns the value associated with the key as an unsigned integer.
|
||||||
func GetUint32(key string) uint32 { return v.GetUint32(key) }
|
func GetUint32(key string) uint32 { return v.GetUint32(key) }
|
||||||
|
|
||||||
func (v *Viper) GetUint32(key string) uint32 {
|
func (v *Viper) GetUint32(key string) uint32 {
|
||||||
return cast.ToUint32(v.Get(key))
|
return cast.ToUint32(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUint64 returns the value associated with the key as an unsigned integer.
|
// GetUint64 returns the value associated with the key as an unsigned integer.
|
||||||
func GetUint64(key string) uint64 { return v.GetUint64(key) }
|
func GetUint64(key string) uint64 { return v.GetUint64(key) }
|
||||||
|
|
||||||
func (v *Viper) GetUint64(key string) uint64 {
|
func (v *Viper) GetUint64(key string) uint64 {
|
||||||
return cast.ToUint64(v.Get(key))
|
return cast.ToUint64(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFloat64 returns the value associated with the key as a float64.
|
// GetFloat64 returns the value associated with the key as a float64.
|
||||||
func GetFloat64(key string) float64 { return v.GetFloat64(key) }
|
func GetFloat64(key string) float64 { return v.GetFloat64(key) }
|
||||||
|
|
||||||
func (v *Viper) GetFloat64(key string) float64 {
|
func (v *Viper) GetFloat64(key string) float64 {
|
||||||
return cast.ToFloat64(v.Get(key))
|
return cast.ToFloat64(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTime returns the value associated with the key as time.
|
// GetTime returns the value associated with the key as time.
|
||||||
func GetTime(key string) time.Time { return v.GetTime(key) }
|
func GetTime(key string) time.Time { return v.GetTime(key) }
|
||||||
|
|
||||||
func (v *Viper) GetTime(key string) time.Time {
|
func (v *Viper) GetTime(key string) time.Time {
|
||||||
return cast.ToTime(v.Get(key))
|
return cast.ToTime(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDuration returns the value associated with the key as a duration.
|
// GetDuration returns the value associated with the key as a duration.
|
||||||
func GetDuration(key string) time.Duration { return v.GetDuration(key) }
|
func GetDuration(key string) time.Duration { return v.GetDuration(key) }
|
||||||
|
|
||||||
func (v *Viper) GetDuration(key string) time.Duration {
|
func (v *Viper) GetDuration(key string) time.Duration {
|
||||||
return cast.ToDuration(v.Get(key))
|
return cast.ToDuration(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetIntSlice returns the value associated with the key as a slice of int values.
|
// GetIntSlice returns the value associated with the key as a slice of int values.
|
||||||
func GetIntSlice(key string) []int { return v.GetIntSlice(key) }
|
func GetIntSlice(key string) []int { return v.GetIntSlice(key) }
|
||||||
|
|
||||||
func (v *Viper) GetIntSlice(key string) []int {
|
func (v *Viper) GetIntSlice(key string) []int {
|
||||||
return cast.ToIntSlice(v.Get(key))
|
return cast.ToIntSlice(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStringSlice returns the value associated with the key as a slice of strings.
|
// GetStringSlice returns the value associated with the key as a slice of strings.
|
||||||
func GetStringSlice(key string) []string { return v.GetStringSlice(key) }
|
func GetStringSlice(key string) []string { return v.GetStringSlice(key) }
|
||||||
|
|
||||||
func (v *Viper) GetStringSlice(key string) []string {
|
func (v *Viper) GetStringSlice(key string) []string {
|
||||||
return cast.ToStringSlice(v.Get(key))
|
return cast.ToStringSlice(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStringMap returns the value associated with the key as a map of interfaces.
|
// GetStringMap returns the value associated with the key as a map of interfaces.
|
||||||
func GetStringMap(key string) map[string]interface{} { return v.GetStringMap(key) }
|
func GetStringMap(key string) map[string]interface{} { return v.GetStringMap(key) }
|
||||||
|
|
||||||
func (v *Viper) GetStringMap(key string) map[string]interface{} {
|
func (v *Viper) GetStringMap(key string) map[string]interface{} {
|
||||||
return cast.ToStringMap(v.Get(key))
|
return cast.ToStringMap(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStringMapString returns the value associated with the key as a map of strings.
|
// GetStringMapString returns the value associated with the key as a map of strings.
|
||||||
func GetStringMapString(key string) map[string]string { return v.GetStringMapString(key) }
|
func GetStringMapString(key string) map[string]string { return v.GetStringMapString(key) }
|
||||||
|
|
||||||
func (v *Viper) GetStringMapString(key string) map[string]string {
|
func (v *Viper) GetStringMapString(key string) map[string]string {
|
||||||
return cast.ToStringMapString(v.Get(key))
|
return cast.ToStringMapString(v.Get(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.
|
// GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.
|
||||||
func GetStringMapStringSlice(key string) map[string][]string { return v.GetStringMapStringSlice(key) }
|
func GetStringMapStringSlice(key string) map[string][]string { return v.GetStringMapStringSlice(key) }
|
||||||
|
|
||||||
func (v *Viper) GetStringMapStringSlice(key string) map[string][]string {
|
func (v *Viper) GetStringMapStringSlice(key string) map[string][]string {
|
||||||
return cast.ToStringMapStringSlice(v.Get(key))
|
return cast.ToStringMapStringSlice(v.Get(key))
|
||||||
}
|
}
|
||||||
|
@ -886,6 +910,7 @@ func (v *Viper) GetStringMapStringSlice(key string) map[string][]string {
|
||||||
// GetSizeInBytes returns the size of the value associated with the given key
|
// GetSizeInBytes returns the size of the value associated with the given key
|
||||||
// in bytes.
|
// in bytes.
|
||||||
func GetSizeInBytes(key string) uint { return v.GetSizeInBytes(key) }
|
func GetSizeInBytes(key string) uint { return v.GetSizeInBytes(key) }
|
||||||
|
|
||||||
func (v *Viper) GetSizeInBytes(key string) uint {
|
func (v *Viper) GetSizeInBytes(key string) uint {
|
||||||
sizeStr := cast.ToString(v.Get(key))
|
sizeStr := cast.ToString(v.Get(key))
|
||||||
return parseSizeInBytes(sizeStr)
|
return parseSizeInBytes(sizeStr)
|
||||||
|
@ -895,6 +920,7 @@ func (v *Viper) GetSizeInBytes(key string) uint {
|
||||||
func UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
|
func UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
return v.UnmarshalKey(key, rawVal, opts...)
|
return v.UnmarshalKey(key, rawVal, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
|
func (v *Viper) UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
return decode(v.Get(key), defaultDecoderConfig(rawVal, opts...))
|
return decode(v.Get(key), defaultDecoderConfig(rawVal, opts...))
|
||||||
}
|
}
|
||||||
|
@ -904,6 +930,7 @@ func (v *Viper) UnmarshalKey(key string, rawVal interface{}, opts ...DecoderConf
|
||||||
func Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
|
func Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
return v.Unmarshal(rawVal, opts...)
|
return v.Unmarshal(rawVal, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
|
func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
return decode(v.AllSettings(), defaultDecoderConfig(rawVal, opts...))
|
return decode(v.AllSettings(), defaultDecoderConfig(rawVal, opts...))
|
||||||
}
|
}
|
||||||
|
@ -940,6 +967,7 @@ func decode(input interface{}, config *mapstructure.DecoderConfig) error {
|
||||||
func UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
|
func UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
return v.UnmarshalExact(rawVal, opts...)
|
return v.UnmarshalExact(rawVal, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
|
func (v *Viper) UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption) error {
|
||||||
config := defaultDecoderConfig(rawVal, opts...)
|
config := defaultDecoderConfig(rawVal, opts...)
|
||||||
config.ErrorUnused = true
|
config.ErrorUnused = true
|
||||||
|
@ -950,6 +978,7 @@ func (v *Viper) UnmarshalExact(rawVal interface{}, opts ...DecoderConfigOption)
|
||||||
// BindPFlags binds a full flag set to the configuration, using each flag's long
|
// BindPFlags binds a full flag set to the configuration, using each flag's long
|
||||||
// name as the config key.
|
// name as the config key.
|
||||||
func BindPFlags(flags *pflag.FlagSet) error { return v.BindPFlags(flags) }
|
func BindPFlags(flags *pflag.FlagSet) error { return v.BindPFlags(flags) }
|
||||||
|
|
||||||
func (v *Viper) BindPFlags(flags *pflag.FlagSet) error {
|
func (v *Viper) BindPFlags(flags *pflag.FlagSet) error {
|
||||||
return v.BindFlagValues(pflagValueSet{flags})
|
return v.BindFlagValues(pflagValueSet{flags})
|
||||||
}
|
}
|
||||||
|
@ -961,6 +990,7 @@ func (v *Viper) BindPFlags(flags *pflag.FlagSet) error {
|
||||||
// Viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))
|
// Viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))
|
||||||
//
|
//
|
||||||
func BindPFlag(key string, flag *pflag.Flag) error { return v.BindPFlag(key, flag) }
|
func BindPFlag(key string, flag *pflag.Flag) error { return v.BindPFlag(key, flag) }
|
||||||
|
|
||||||
func (v *Viper) BindPFlag(key string, flag *pflag.Flag) error {
|
func (v *Viper) BindPFlag(key string, flag *pflag.Flag) error {
|
||||||
return v.BindFlagValue(key, pflagValue{flag})
|
return v.BindFlagValue(key, pflagValue{flag})
|
||||||
}
|
}
|
||||||
|
@ -968,6 +998,7 @@ func (v *Viper) BindPFlag(key string, flag *pflag.Flag) error {
|
||||||
// BindFlagValues binds a full FlagValue set to the configuration, using each flag's long
|
// BindFlagValues binds a full FlagValue set to the configuration, using each flag's long
|
||||||
// name as the config key.
|
// name as the config key.
|
||||||
func BindFlagValues(flags FlagValueSet) error { return v.BindFlagValues(flags) }
|
func BindFlagValues(flags FlagValueSet) error { return v.BindFlagValues(flags) }
|
||||||
|
|
||||||
func (v *Viper) BindFlagValues(flags FlagValueSet) (err error) {
|
func (v *Viper) BindFlagValues(flags FlagValueSet) (err error) {
|
||||||
flags.VisitAll(func(flag FlagValue) {
|
flags.VisitAll(func(flag FlagValue) {
|
||||||
if err = v.BindFlagValue(flag.Name(), flag); err != nil {
|
if err = v.BindFlagValue(flag.Name(), flag); err != nil {
|
||||||
|
@ -979,6 +1010,7 @@ func (v *Viper) BindFlagValues(flags FlagValueSet) (err error) {
|
||||||
|
|
||||||
// BindFlagValue binds a specific key to a FlagValue.
|
// BindFlagValue binds a specific key to a FlagValue.
|
||||||
func BindFlagValue(key string, flag FlagValue) error { return v.BindFlagValue(key, flag) }
|
func BindFlagValue(key string, flag FlagValue) error { return v.BindFlagValue(key, flag) }
|
||||||
|
|
||||||
func (v *Viper) BindFlagValue(key string, flag FlagValue) error {
|
func (v *Viper) BindFlagValue(key string, flag FlagValue) error {
|
||||||
if flag == nil {
|
if flag == nil {
|
||||||
return fmt.Errorf("flag for %q is nil", key)
|
return fmt.Errorf("flag for %q is nil", key)
|
||||||
|
@ -992,6 +1024,7 @@ func (v *Viper) BindFlagValue(key string, flag FlagValue) error {
|
||||||
// If only a key is provided, it will use the env key matching the key, uppercased.
|
// If only a key is provided, it will use the env key matching the key, uppercased.
|
||||||
// EnvPrefix will be used when set when env name is not provided.
|
// EnvPrefix will be used when set when env name is not provided.
|
||||||
func BindEnv(input ...string) error { return v.BindEnv(input...) }
|
func BindEnv(input ...string) error { return v.BindEnv(input...) }
|
||||||
|
|
||||||
func (v *Viper) BindEnv(input ...string) error {
|
func (v *Viper) BindEnv(input ...string) error {
|
||||||
var key, envkey string
|
var key, envkey string
|
||||||
if len(input) == 0 {
|
if len(input) == 0 {
|
||||||
|
@ -1190,6 +1223,7 @@ func stringToStringConv(val string) interface{} {
|
||||||
// IsSet checks to see if the key has been set in any of the data locations.
|
// IsSet checks to see if the key has been set in any of the data locations.
|
||||||
// IsSet is case-insensitive for a key.
|
// IsSet is case-insensitive for a key.
|
||||||
func IsSet(key string) bool { return v.IsSet(key) }
|
func IsSet(key string) bool { return v.IsSet(key) }
|
||||||
|
|
||||||
func (v *Viper) IsSet(key string) bool {
|
func (v *Viper) IsSet(key string) bool {
|
||||||
lcaseKey := strings.ToLower(key)
|
lcaseKey := strings.ToLower(key)
|
||||||
val := v.find(lcaseKey, false)
|
val := v.find(lcaseKey, false)
|
||||||
|
@ -1199,6 +1233,7 @@ func (v *Viper) IsSet(key string) bool {
|
||||||
// AutomaticEnv has Viper check ENV variables for all.
|
// AutomaticEnv has Viper check ENV variables for all.
|
||||||
// keys set in config, default & flags
|
// keys set in config, default & flags
|
||||||
func AutomaticEnv() { v.AutomaticEnv() }
|
func AutomaticEnv() { v.AutomaticEnv() }
|
||||||
|
|
||||||
func (v *Viper) AutomaticEnv() {
|
func (v *Viper) AutomaticEnv() {
|
||||||
v.automaticEnvApplied = true
|
v.automaticEnvApplied = true
|
||||||
}
|
}
|
||||||
|
@ -1207,6 +1242,7 @@ func (v *Viper) AutomaticEnv() {
|
||||||
// Useful for mapping an environmental variable to a key that does
|
// Useful for mapping an environmental variable to a key that does
|
||||||
// not match it.
|
// not match it.
|
||||||
func SetEnvKeyReplacer(r *strings.Replacer) { v.SetEnvKeyReplacer(r) }
|
func SetEnvKeyReplacer(r *strings.Replacer) { v.SetEnvKeyReplacer(r) }
|
||||||
|
|
||||||
func (v *Viper) SetEnvKeyReplacer(r *strings.Replacer) {
|
func (v *Viper) SetEnvKeyReplacer(r *strings.Replacer) {
|
||||||
v.envKeyReplacer = r
|
v.envKeyReplacer = r
|
||||||
}
|
}
|
||||||
|
@ -1214,6 +1250,7 @@ func (v *Viper) SetEnvKeyReplacer(r *strings.Replacer) {
|
||||||
// RegisterAlias creates an alias that provides another accessor for the same key.
|
// RegisterAlias creates an alias that provides another accessor for the same key.
|
||||||
// This enables one to change a name without breaking the application.
|
// This enables one to change a name without breaking the application.
|
||||||
func RegisterAlias(alias string, key string) { v.RegisterAlias(alias, key) }
|
func RegisterAlias(alias string, key string) { v.RegisterAlias(alias, key) }
|
||||||
|
|
||||||
func (v *Viper) RegisterAlias(alias string, key string) {
|
func (v *Viper) RegisterAlias(alias string, key string) {
|
||||||
v.registerAlias(alias, strings.ToLower(key))
|
v.registerAlias(alias, strings.ToLower(key))
|
||||||
}
|
}
|
||||||
|
@ -1261,6 +1298,7 @@ func (v *Viper) realKey(key string) string {
|
||||||
|
|
||||||
// InConfig checks to see if the given key (or an alias) is in the config file.
|
// InConfig checks to see if the given key (or an alias) is in the config file.
|
||||||
func InConfig(key string) bool { return v.InConfig(key) }
|
func InConfig(key string) bool { return v.InConfig(key) }
|
||||||
|
|
||||||
func (v *Viper) InConfig(key string) bool {
|
func (v *Viper) InConfig(key string) bool {
|
||||||
// if the requested key is an alias, then return the proper key
|
// if the requested key is an alias, then return the proper key
|
||||||
key = v.realKey(key)
|
key = v.realKey(key)
|
||||||
|
@ -1273,6 +1311,7 @@ func (v *Viper) InConfig(key string) bool {
|
||||||
// SetDefault is case-insensitive for a key.
|
// SetDefault is case-insensitive for a key.
|
||||||
// Default only used when no value is provided by the user via flag, config or ENV.
|
// Default only used when no value is provided by the user via flag, config or ENV.
|
||||||
func SetDefault(key string, value interface{}) { v.SetDefault(key, value) }
|
func SetDefault(key string, value interface{}) { v.SetDefault(key, value) }
|
||||||
|
|
||||||
func (v *Viper) SetDefault(key string, value interface{}) {
|
func (v *Viper) SetDefault(key string, value interface{}) {
|
||||||
// If alias passed in, then set the proper default
|
// If alias passed in, then set the proper default
|
||||||
key = v.realKey(strings.ToLower(key))
|
key = v.realKey(strings.ToLower(key))
|
||||||
|
@ -1291,6 +1330,7 @@ func (v *Viper) SetDefault(key string, value interface{}) {
|
||||||
// Will be used instead of values obtained via
|
// Will be used instead of values obtained via
|
||||||
// flags, config file, ENV, default, or key/value store.
|
// flags, config file, ENV, default, or key/value store.
|
||||||
func Set(key string, value interface{}) { v.Set(key, value) }
|
func Set(key string, value interface{}) { v.Set(key, value) }
|
||||||
|
|
||||||
func (v *Viper) Set(key string, value interface{}) {
|
func (v *Viper) Set(key string, value interface{}) {
|
||||||
// If alias passed in, then set the proper override
|
// If alias passed in, then set the proper override
|
||||||
key = v.realKey(strings.ToLower(key))
|
key = v.realKey(strings.ToLower(key))
|
||||||
|
@ -1307,6 +1347,7 @@ func (v *Viper) Set(key string, value interface{}) {
|
||||||
// ReadInConfig will discover and load the configuration file from disk
|
// ReadInConfig will discover and load the configuration file from disk
|
||||||
// and key/value stores, searching in one of the defined paths.
|
// and key/value stores, searching in one of the defined paths.
|
||||||
func ReadInConfig() error { return v.ReadInConfig() }
|
func ReadInConfig() error { return v.ReadInConfig() }
|
||||||
|
|
||||||
func (v *Viper) ReadInConfig() error {
|
func (v *Viper) ReadInConfig() error {
|
||||||
jww.INFO.Println("Attempting to read in config file")
|
jww.INFO.Println("Attempting to read in config file")
|
||||||
filename, err := v.getConfigFile()
|
filename, err := v.getConfigFile()
|
||||||
|
@ -1337,6 +1378,7 @@ func (v *Viper) ReadInConfig() error {
|
||||||
|
|
||||||
// MergeInConfig merges a new configuration with an existing config.
|
// MergeInConfig merges a new configuration with an existing config.
|
||||||
func MergeInConfig() error { return v.MergeInConfig() }
|
func MergeInConfig() error { return v.MergeInConfig() }
|
||||||
|
|
||||||
func (v *Viper) MergeInConfig() error {
|
func (v *Viper) MergeInConfig() error {
|
||||||
jww.INFO.Println("Attempting to merge in config file")
|
jww.INFO.Println("Attempting to merge in config file")
|
||||||
filename, err := v.getConfigFile()
|
filename, err := v.getConfigFile()
|
||||||
|
@ -1359,6 +1401,7 @@ func (v *Viper) MergeInConfig() error {
|
||||||
// ReadConfig will read a configuration file, setting existing keys to nil if the
|
// ReadConfig will read a configuration file, setting existing keys to nil if the
|
||||||
// key does not exist in the file.
|
// key does not exist in the file.
|
||||||
func ReadConfig(in io.Reader) error { return v.ReadConfig(in) }
|
func ReadConfig(in io.Reader) error { return v.ReadConfig(in) }
|
||||||
|
|
||||||
func (v *Viper) ReadConfig(in io.Reader) error {
|
func (v *Viper) ReadConfig(in io.Reader) error {
|
||||||
v.config = make(map[string]interface{})
|
v.config = make(map[string]interface{})
|
||||||
return v.unmarshalReader(in, v.config)
|
return v.unmarshalReader(in, v.config)
|
||||||
|
@ -1366,6 +1409,7 @@ func (v *Viper) ReadConfig(in io.Reader) error {
|
||||||
|
|
||||||
// MergeConfig merges a new configuration with an existing config.
|
// MergeConfig merges a new configuration with an existing config.
|
||||||
func MergeConfig(in io.Reader) error { return v.MergeConfig(in) }
|
func MergeConfig(in io.Reader) error { return v.MergeConfig(in) }
|
||||||
|
|
||||||
func (v *Viper) MergeConfig(in io.Reader) error {
|
func (v *Viper) MergeConfig(in io.Reader) error {
|
||||||
cfg := make(map[string]interface{})
|
cfg := make(map[string]interface{})
|
||||||
if err := v.unmarshalReader(in, cfg); err != nil {
|
if err := v.unmarshalReader(in, cfg); err != nil {
|
||||||
|
@ -1377,6 +1421,7 @@ func (v *Viper) MergeConfig(in io.Reader) error {
|
||||||
// MergeConfigMap merges the configuration from the map given with an existing config.
|
// MergeConfigMap merges the configuration from the map given with an existing config.
|
||||||
// Note that the map given may be modified.
|
// Note that the map given may be modified.
|
||||||
func MergeConfigMap(cfg map[string]interface{}) error { return v.MergeConfigMap(cfg) }
|
func MergeConfigMap(cfg map[string]interface{}) error { return v.MergeConfigMap(cfg) }
|
||||||
|
|
||||||
func (v *Viper) MergeConfigMap(cfg map[string]interface{}) error {
|
func (v *Viper) MergeConfigMap(cfg map[string]interface{}) error {
|
||||||
if v.config == nil {
|
if v.config == nil {
|
||||||
v.config = make(map[string]interface{})
|
v.config = make(map[string]interface{})
|
||||||
|
@ -1388,6 +1433,7 @@ func (v *Viper) MergeConfigMap(cfg map[string]interface{}) error {
|
||||||
|
|
||||||
// WriteConfig writes the current configuration to a file.
|
// WriteConfig writes the current configuration to a file.
|
||||||
func WriteConfig() error { return v.WriteConfig() }
|
func WriteConfig() error { return v.WriteConfig() }
|
||||||
|
|
||||||
func (v *Viper) WriteConfig() error {
|
func (v *Viper) WriteConfig() error {
|
||||||
filename, err := v.getConfigFile()
|
filename, err := v.getConfigFile()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1398,6 +1444,7 @@ func (v *Viper) WriteConfig() error {
|
||||||
|
|
||||||
// SafeWriteConfig writes current configuration to file only if the file does not exist.
|
// SafeWriteConfig writes current configuration to file only if the file does not exist.
|
||||||
func SafeWriteConfig() error { return v.SafeWriteConfig() }
|
func SafeWriteConfig() error { return v.SafeWriteConfig() }
|
||||||
|
|
||||||
func (v *Viper) SafeWriteConfig() error {
|
func (v *Viper) SafeWriteConfig() error {
|
||||||
if len(v.configPaths) < 1 {
|
if len(v.configPaths) < 1 {
|
||||||
return errors.New("missing configuration for 'configPath'")
|
return errors.New("missing configuration for 'configPath'")
|
||||||
|
@ -1407,12 +1454,14 @@ func (v *Viper) SafeWriteConfig() error {
|
||||||
|
|
||||||
// WriteConfigAs writes current configuration to a given filename.
|
// WriteConfigAs writes current configuration to a given filename.
|
||||||
func WriteConfigAs(filename string) error { return v.WriteConfigAs(filename) }
|
func WriteConfigAs(filename string) error { return v.WriteConfigAs(filename) }
|
||||||
|
|
||||||
func (v *Viper) WriteConfigAs(filename string) error {
|
func (v *Viper) WriteConfigAs(filename string) error {
|
||||||
return v.writeConfig(filename, true)
|
return v.writeConfig(filename, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SafeWriteConfigAs writes current configuration to a given filename if it does not exist.
|
// SafeWriteConfigAs writes current configuration to a given filename if it does not exist.
|
||||||
func SafeWriteConfigAs(filename string) error { return v.SafeWriteConfigAs(filename) }
|
func SafeWriteConfigAs(filename string) error { return v.SafeWriteConfigAs(filename) }
|
||||||
|
|
||||||
func (v *Viper) SafeWriteConfigAs(filename string) error {
|
func (v *Viper) SafeWriteConfigAs(filename string) error {
|
||||||
alreadyExists, err := afero.Exists(v.fs, filename)
|
alreadyExists, err := afero.Exists(v.fs, filename)
|
||||||
if alreadyExists && err == nil {
|
if alreadyExists && err == nil {
|
||||||
|
@ -1463,6 +1512,7 @@ func (v *Viper) writeConfig(filename string, force bool) error {
|
||||||
func unmarshalReader(in io.Reader, c map[string]interface{}) error {
|
func unmarshalReader(in io.Reader, c map[string]interface{}) error {
|
||||||
return v.unmarshalReader(in, c)
|
return v.unmarshalReader(in, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error {
|
func (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
buf.ReadFrom(in)
|
buf.ReadFrom(in)
|
||||||
|
@ -1737,6 +1787,7 @@ func mergeMaps(
|
||||||
// ReadRemoteConfig attempts to get configuration from a remote source
|
// ReadRemoteConfig attempts to get configuration from a remote source
|
||||||
// and read it in the remote configuration registry.
|
// and read it in the remote configuration registry.
|
||||||
func ReadRemoteConfig() error { return v.ReadRemoteConfig() }
|
func ReadRemoteConfig() error { return v.ReadRemoteConfig() }
|
||||||
|
|
||||||
func (v *Viper) ReadRemoteConfig() error {
|
func (v *Viper) ReadRemoteConfig() error {
|
||||||
return v.getKeyValueConfig()
|
return v.getKeyValueConfig()
|
||||||
}
|
}
|
||||||
|
@ -1822,6 +1873,7 @@ func (v *Viper) watchRemoteConfig(provider RemoteProvider) (map[string]interface
|
||||||
// AllKeys returns all keys holding a value, regardless of where they are set.
|
// AllKeys returns all keys holding a value, regardless of where they are set.
|
||||||
// Nested keys are returned with a v.keyDelim separator
|
// Nested keys are returned with a v.keyDelim separator
|
||||||
func AllKeys() []string { return v.AllKeys() }
|
func AllKeys() []string { return v.AllKeys() }
|
||||||
|
|
||||||
func (v *Viper) AllKeys() []string {
|
func (v *Viper) AllKeys() []string {
|
||||||
m := map[string]bool{}
|
m := map[string]bool{}
|
||||||
// add all paths, by order of descending priority to ensure correct shadowing
|
// add all paths, by order of descending priority to ensure correct shadowing
|
||||||
|
@ -1902,6 +1954,7 @@ outer:
|
||||||
|
|
||||||
// AllSettings merges all settings and returns them as a map[string]interface{}.
|
// AllSettings merges all settings and returns them as a map[string]interface{}.
|
||||||
func AllSettings() map[string]interface{} { return v.AllSettings() }
|
func AllSettings() map[string]interface{} { return v.AllSettings() }
|
||||||
|
|
||||||
func (v *Viper) AllSettings() map[string]interface{} {
|
func (v *Viper) AllSettings() map[string]interface{} {
|
||||||
m := map[string]interface{}{}
|
m := map[string]interface{}{}
|
||||||
// start from the list of keys, and construct the map one value at a time
|
// start from the list of keys, and construct the map one value at a time
|
||||||
|
@ -1923,6 +1976,7 @@ func (v *Viper) AllSettings() map[string]interface{} {
|
||||||
|
|
||||||
// SetFs sets the filesystem to use to read configuration.
|
// SetFs sets the filesystem to use to read configuration.
|
||||||
func SetFs(fs afero.Fs) { v.SetFs(fs) }
|
func SetFs(fs afero.Fs) { v.SetFs(fs) }
|
||||||
|
|
||||||
func (v *Viper) SetFs(fs afero.Fs) {
|
func (v *Viper) SetFs(fs afero.Fs) {
|
||||||
v.fs = fs
|
v.fs = fs
|
||||||
}
|
}
|
||||||
|
@ -1930,6 +1984,7 @@ func (v *Viper) SetFs(fs afero.Fs) {
|
||||||
// SetConfigName sets name for the config file.
|
// SetConfigName sets name for the config file.
|
||||||
// Does not include extension.
|
// Does not include extension.
|
||||||
func SetConfigName(in string) { v.SetConfigName(in) }
|
func SetConfigName(in string) { v.SetConfigName(in) }
|
||||||
|
|
||||||
func (v *Viper) SetConfigName(in string) {
|
func (v *Viper) SetConfigName(in string) {
|
||||||
if in != "" {
|
if in != "" {
|
||||||
v.configName = in
|
v.configName = in
|
||||||
|
@ -1940,6 +1995,7 @@ func (v *Viper) SetConfigName(in string) {
|
||||||
// SetConfigType sets the type of the configuration returned by the
|
// SetConfigType sets the type of the configuration returned by the
|
||||||
// remote source, e.g. "json".
|
// remote source, e.g. "json".
|
||||||
func SetConfigType(in string) { v.SetConfigType(in) }
|
func SetConfigType(in string) { v.SetConfigType(in) }
|
||||||
|
|
||||||
func (v *Viper) SetConfigType(in string) {
|
func (v *Viper) SetConfigType(in string) {
|
||||||
if in != "" {
|
if in != "" {
|
||||||
v.configType = in
|
v.configType = in
|
||||||
|
@ -1948,6 +2004,7 @@ func (v *Viper) SetConfigType(in string) {
|
||||||
|
|
||||||
// SetConfigPermissions sets the permissions for the config file.
|
// SetConfigPermissions sets the permissions for the config file.
|
||||||
func SetConfigPermissions(perm os.FileMode) { v.SetConfigPermissions(perm) }
|
func SetConfigPermissions(perm os.FileMode) { v.SetConfigPermissions(perm) }
|
||||||
|
|
||||||
func (v *Viper) SetConfigPermissions(perm os.FileMode) {
|
func (v *Viper) SetConfigPermissions(perm os.FileMode) {
|
||||||
v.configPermissions = perm.Perm()
|
v.configPermissions = perm.Perm()
|
||||||
}
|
}
|
||||||
|
@ -2018,6 +2075,7 @@ func (v *Viper) findConfigFile() (string, error) {
|
||||||
// Debug prints all configuration registries for debugging
|
// Debug prints all configuration registries for debugging
|
||||||
// purposes.
|
// purposes.
|
||||||
func Debug() { v.Debug() }
|
func Debug() { v.Debug() }
|
||||||
|
|
||||||
func (v *Viper) Debug() {
|
func (v *Viper) Debug() {
|
||||||
fmt.Printf("Aliases:\n%#v\n", v.aliases)
|
fmt.Printf("Aliases:\n%#v\n", v.aliases)
|
||||||
fmt.Printf("Override:\n%#v\n", v.override)
|
fmt.Printf("Override:\n%#v\n", v.override)
|
||||||
|
|
|
@ -26,7 +26,6 @@ import (
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
|
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -694,7 +693,8 @@ func TestAllKeys(t *testing.T) {
|
||||||
{"key": 1},
|
{"key": 1},
|
||||||
{"key": 2},
|
{"key": 2},
|
||||||
{"key": 3},
|
{"key": 3},
|
||||||
{"key": 4}},
|
{"key": 4},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"title_dotenv": "DotEnv Example",
|
"title_dotenv": "DotEnv Example",
|
||||||
|
@ -828,13 +828,13 @@ func TestBindPFlags(t *testing.T) {
|
||||||
v := New() // create independent Viper object
|
v := New() // create independent Viper object
|
||||||
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||||
|
|
||||||
var testValues = map[string]*string{
|
testValues := map[string]*string{
|
||||||
"host": nil,
|
"host": nil,
|
||||||
"port": nil,
|
"port": nil,
|
||||||
"endpoint": nil,
|
"endpoint": nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
var mutatedTestValues = map[string]string{
|
mutatedTestValues := map[string]string{
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
"port": "6060",
|
"port": "6060",
|
||||||
"endpoint": "/public",
|
"endpoint": "/public",
|
||||||
|
@ -951,8 +951,8 @@ func TestBindPFlagsIntSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBindPFlag(t *testing.T) {
|
func TestBindPFlag(t *testing.T) {
|
||||||
var testString = "testing"
|
testString := "testing"
|
||||||
var testValue = newStringValue(testString, &testString)
|
testValue := newStringValue(testString, &testString)
|
||||||
|
|
||||||
flag := &pflag.Flag{
|
flag := &pflag.Flag{
|
||||||
Name: "testflag",
|
Name: "testflag",
|
||||||
|
@ -1025,8 +1025,8 @@ func TestBoundCaseSensitivity(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "blue", Get("eyes"))
|
assert.Equal(t, "blue", Get("eyes"))
|
||||||
|
|
||||||
var testString = "green"
|
testString := "green"
|
||||||
var testValue = newStringValue(testString, &testString)
|
testValue := newStringValue(testString, &testString)
|
||||||
|
|
||||||
flag := &pflag.Flag{
|
flag := &pflag.Flag{
|
||||||
Name: "eyeballs",
|
Name: "eyeballs",
|
||||||
|
@ -1105,9 +1105,11 @@ func TestFindsNestedKeys(t *testing.T) {
|
||||||
},
|
},
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"type": "Chocolate",
|
"type": "Chocolate",
|
||||||
}, map[string]interface{}{
|
},
|
||||||
|
map[string]interface{}{
|
||||||
"type": "Blueberry",
|
"type": "Blueberry",
|
||||||
}, map[string]interface{}{
|
},
|
||||||
|
map[string]interface{}{
|
||||||
"type": "Devil's Food",
|
"type": "Devil's Food",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1972,7 +1974,8 @@ func TestCaseInsensitiveSet(t *testing.T) {
|
||||||
"Bar": map[interface{}]interface {
|
"Bar": map[interface{}]interface {
|
||||||
}{
|
}{
|
||||||
"ABc": "A",
|
"ABc": "A",
|
||||||
"cDE": "B"},
|
"cDE": "B",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
m2 := map[string]interface{}{
|
m2 := map[string]interface{}{
|
||||||
|
@ -1980,7 +1983,8 @@ func TestCaseInsensitiveSet(t *testing.T) {
|
||||||
"Bar": map[interface{}]interface {
|
"Bar": map[interface{}]interface {
|
||||||
}{
|
}{
|
||||||
"bCd": "A",
|
"bCd": "A",
|
||||||
"eFG": "B"},
|
"eFG": "B",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
Set("Given1", m1)
|
Set("Given1", m1)
|
||||||
|
|
Loading…
Reference in New Issue