summaryrefslogtreecommitdiffstats
path: root/modules/setting/config_provider_test.go
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2023-06-21 00:51:26 -0400
committerGitHub <noreply@github.com>2023-06-21 04:51:26 +0000
commit8302b95d6bfdbc40083a72e5d1b727fcb1e00940 (patch)
tree470eb05db1149b9ef171d26fb2ecd54c6524fe2c /modules/setting/config_provider_test.go
parent6f1c95ec5b951347f549972a8699b05be5d3f634 (diff)
downloadgitea-8302b95d6bfdbc40083a72e5d1b727fcb1e00940.tar.gz
gitea-8302b95d6bfdbc40083a72e5d1b727fcb1e00940.zip
Avoid polluting config file when "save" (#25395) (#25406)
Backport #25395 by @wxiaoguang That's a longstanding INI package problem: the "MustXxx" calls change the option values, and the following "Save" will save a lot of garbage options into the user's config file. Ideally we should refactor the INI package to a clear solution, but it's a huge work. A clear workaround is what this PR does: when "Save", load a clear INI instance and save it. Partially fix #25377, the "install" page needs more fine tunes. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'modules/setting/config_provider_test.go')
-rw-r--r--modules/setting/config_provider_test.go30
1 files changed, 27 insertions, 3 deletions
diff --git a/modules/setting/config_provider_test.go b/modules/setting/config_provider_test.go
index 17650edea4..c5c5196e04 100644
--- a/modules/setting/config_provider_test.go
+++ b/modules/setting/config_provider_test.go
@@ -84,11 +84,11 @@ func TestNewConfigProviderFromFile(t *testing.T) {
bs, err := os.ReadFile(testFile)
assert.NoError(t, err)
- assert.Equal(t, "[foo]\nk1=a\n", string(bs))
+ assert.Equal(t, "[foo]\nk1 = a\n", string(bs))
bs, err = os.ReadFile(testFile1)
assert.NoError(t, err)
- assert.Equal(t, "[foo]\nk1=a\nk2=b\n", string(bs))
+ assert.Equal(t, "[foo]\nk1 = a\nk2 = b\n", string(bs))
// load existing file and save
cfg, err = NewConfigProviderFromFile(&Options{CustomConf: testFile, AllowEmpty: true})
@@ -99,7 +99,7 @@ func TestNewConfigProviderFromFile(t *testing.T) {
assert.NoError(t, cfg.Save())
bs, err = os.ReadFile(testFile)
assert.NoError(t, err)
- assert.Equal(t, "[foo]\nk1=a\n\n[bar]\nk1=b\n", string(bs))
+ assert.Equal(t, "[foo]\nk1 = a\n\n[bar]\nk1 = b\n", string(bs))
}
func TestNewConfigProviderForLocale(t *testing.T) {
@@ -119,3 +119,27 @@ func TestNewConfigProviderForLocale(t *testing.T) {
assert.Equal(t, "foo", cfg.Section("").Key("k1").String())
assert.Equal(t, "xxx", cfg.Section("").Key("k2").String())
}
+
+func TestDisableSaving(t *testing.T) {
+ testFile := t.TempDir() + "/test.ini"
+ _ = os.WriteFile(testFile, []byte("k1=a\nk2=b"), 0o644)
+ cfg, err := NewConfigProviderFromFile(&Options{CustomConf: testFile, AllowEmpty: true})
+ assert.NoError(t, err)
+
+ cfg.DisableSaving()
+ err = cfg.Save()
+ assert.ErrorIs(t, err, errDisableSaving)
+
+ saveCfg, err := cfg.PrepareSaving()
+ assert.NoError(t, err)
+
+ saveCfg.Section("").Key("k1").MustString("x")
+ saveCfg.Section("").Key("k2").SetValue("y")
+ saveCfg.Section("").Key("k3").SetValue("z")
+ err = saveCfg.Save()
+ assert.NoError(t, err)
+
+ bs, err := os.ReadFile(testFile)
+ assert.NoError(t, err)
+ assert.Equal(t, "k1 = a\nk2 = y\nk3 = z\n", string(bs))
+}