Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: partially revert #1387 #1577

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions internal/features/1387.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//go:build !viper_1387
// +build !viper_1387

package features

// Revert1387 reverts the behavior introduced in #1387.
var Revert1387 = false
7 changes: 7 additions & 0 deletions internal/features/1387_.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//go:build viper_1387
// +build viper_1387

package features

// Revert1387 reverts the behavior introduced in #1387.
var Revert1387 = true
2 changes: 2 additions & 0 deletions internal/features/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Package features allows toggling features in Viper based on build tags.
package features
9 changes: 7 additions & 2 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (
"unicode"

"github.com/spf13/cast"

"github.com/spf13/viper/internal/features"
)

// ConfigParseError denotes failing to parse configuration file.
Expand Down Expand Up @@ -79,8 +81,11 @@ func insensitiviseVal(val interface{}) interface{} {
// nested map: recursively insensitivise
insensitiviseMap(val.(map[string]interface{}))
case []interface{}:
// nested array: recursively insensitivise
insensitiveArray(val.([]interface{}))
// deprecated, drop in Viper v2
if !features.Revert1387 {
// nested array: recursively insensitivise
insensitiveArray(val.([]interface{}))
}
}
return val
}
Expand Down
17 changes: 17 additions & 0 deletions viper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/spf13/viper/internal/features"
"github.com/spf13/viper/internal/testutil"
)

Expand Down Expand Up @@ -2672,6 +2673,22 @@ func TestSliceIndexAccess(t *testing.T) {
assert.Equal(t, "The Expanse", v.GetString("tv.0.title_i18n.USA"))
assert.Equal(t, "エクスパンス -巨獣めざめる-", v.GetString("tv.0.title_i18n.Japan"))

var expectedtitlei18n map[string]any

if features.Revert1387 {
expectedtitlei18n = map[string]any{
"USA": "The Expanse",
"Japan": "エクスパンス -巨獣めざめる-",
}
} else {
expectedtitlei18n = map[string]any{
"usa": "The Expanse",
"japan": "エクスパンス -巨獣めざめる-",
}
}

assert.Equal(t, expectedtitlei18n, v.GetStringMap("tv.0.title_i18n"))

// Test for index out of bounds
assert.Equal(t, "", v.GetString("tv.0.seasons.2.first_released"))

Expand Down