diff --git a/modules/setting/config_provider.go b/modules/setting/config_provider.go index 4518819a6ab..1d4b3f9665c 100644 --- a/modules/setting/config_provider.go +++ b/modules/setting/config_provider.go @@ -19,15 +19,22 @@ import ( ) type ConfigKey interface { + internal() + Name() string Value() string SetValue(v string) - In(defaultVal string, candidates []string) string String() string Strings(delim string) []string Bool() (bool, error) + // FIXME: INI-MUST-SIDE-EFFECT: ini package's In/MustXxx functions have bad side-effects: + // they will change the origin config content and write the key with default value if the key didn't exist. + // Need to completely refactor the ini package to remove this side-effect. + + In(defaultVal string, candidates []string) string + MustString(defaultVal string) string MustBool(defaultVal ...bool) bool MustInt(defaultVal ...int) int @@ -73,10 +80,56 @@ type iniConfigSection struct { sec *ini.Section } +type iniConfigKey struct { + key *ini.Key +} + +func (k *iniConfigKey) internal() {} + +func (k *iniConfigKey) Name() string { return k.key.Name() } + +func (k *iniConfigKey) Value() string { return k.key.Value() } + +func (k *iniConfigKey) SetValue(v string) { k.key.SetValue(v) } + +func (k *iniConfigKey) String() string { return k.key.String() } + +func (k *iniConfigKey) Strings(delim string) []string { return k.key.Strings(delim) } + +func (k *iniConfigKey) Bool() (bool, error) { return k.key.Bool() } + +func (k *iniConfigKey) MustString(defaultVal string) string { return k.key.MustString(defaultVal) } + +func (k *iniConfigKey) MustBool(defaultVal ...bool) bool { return k.key.MustBool(defaultVal...) } + +func (k *iniConfigKey) MustInt(defaultVal ...int) int { return k.key.MustInt(defaultVal...) } + +func (k *iniConfigKey) MustInt64(defaultVal ...int64) int64 { return k.key.MustInt64(defaultVal...) } + +func (k *iniConfigKey) In(defaultVal string, candidates []string) string { + return k.key.In(defaultVal, candidates) +} + +func (k *iniConfigKey) MustDuration(defaultVal ...time.Duration) time.Duration { + s := k.String() + v, err := strconv.ParseInt(s, 10, 64) + if err == nil { + d := time.Duration(v) * time.Second + k.key.SetValue(d.String()) + return d + } + d, err := time.ParseDuration(s) + if err != nil { + d = util.OptionalArg(defaultVal) + } + k.key.SetValue(d.String()) + return d +} + var ( _ ConfigProvider = (*iniConfigProvider)(nil) _ ConfigSection = (*iniConfigSection)(nil) - _ ConfigKey = (*ini.Key)(nil) + _ ConfigKey = (*iniConfigKey)(nil) ) // ConfigSectionKey only searches the keys in the given section, but it is O(n). @@ -156,16 +209,20 @@ func (s *iniConfigSection) HasKey(key string) bool { } func (s *iniConfigSection) NewKey(name, value string) (ConfigKey, error) { - return s.sec.NewKey(name, value) + k, err := s.sec.NewKey(name, value) + if err != nil { + return nil, err + } + return &iniConfigKey{k}, nil } func (s *iniConfigSection) Key(key string) ConfigKey { - return s.sec.Key(key) + return &iniConfigKey{s.sec.Key(key)} } func (s *iniConfigSection) Keys() (keys []ConfigKey) { for _, k := range s.sec.Keys() { - keys = append(keys, k) + keys = append(keys, &iniConfigKey{k}) } return keys } diff --git a/modules/setting/config_provider_test.go b/modules/setting/config_provider_test.go index dcbe280e824..594fb6c4d3d 100644 --- a/modules/setting/config_provider_test.go +++ b/modules/setting/config_provider_test.go @@ -6,6 +6,7 @@ package setting import ( "os" "testing" + "time" "github.com/stretchr/testify/assert" ) @@ -136,3 +137,15 @@ func TestDisableSaving(t *testing.T) { assert.NoError(t, err) assert.Equal(t, "k1 = a\nk2 = y\nk3 = z\n", string(bs)) } + +func TestConfigValueRead(t *testing.T) { + cfg, _ := NewConfigProviderFromData(` +neg = -1 +zero = 0 +hour = 1h +`) + assert.Equal(t, -1*time.Second, cfg.Section("").Key("neg").MustDuration(9999)) + assert.EqualValues(t, 0, cfg.Section("").Key("zero").MustDuration(9999)) + assert.Equal(t, time.Hour, cfg.Section("").Key("hour").MustDuration(9999)) + assert.Equal(t, time.Duration(9999), cfg.Section("").Key("def").MustDuration(9999)) +} diff --git a/modules/setting/lfs.go b/modules/setting/lfs.go index eae0a7242f2..961b1b4d82d 100644 --- a/modules/setting/lfs.go +++ b/modules/setting/lfs.go @@ -49,7 +49,7 @@ func loadLFSFrom(rootCfg ConfigProvider) error { if lfsSec == nil { lfsSec = rootCfg.Section("lfs") } - lfsSec.Key("PATH").MustString(val) + lfsSec.Key("PATH").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT } var err error diff --git a/modules/setting/log.go b/modules/setting/log.go index e53cfb49bb9..0bd87add96f 100644 --- a/modules/setting/log.go +++ b/modules/setting/log.go @@ -56,13 +56,13 @@ func prepareLoggerConfig(rootCfg ConfigProvider) { sec := rootCfg.Section("log") if !sec.HasKey("logger.default.MODE") { - sec.Key("logger.default.MODE").MustString(",") + sec.Key("logger.default.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT } deprecatedSetting(rootCfg, "log", "ACCESS", "log", "logger.access.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ENABLE_ACCESS_LOG", "log", "logger.access.MODE", "1.21") if val := sec.Key("ACCESS").String(); val != "" { - sec.Key("logger.access.MODE").MustString(val) + sec.Key("logger.access.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT } if sec.HasKey("ENABLE_ACCESS_LOG") && !sec.Key("ENABLE_ACCESS_LOG").MustBool() { sec.Key("logger.access.MODE").SetValue("") @@ -71,10 +71,11 @@ func prepareLoggerConfig(rootCfg ConfigProvider) { deprecatedSetting(rootCfg, "log", "ROUTER", "log", "logger.router.MODE", "1.21") deprecatedSetting(rootCfg, "log", "DISABLE_ROUTER_LOG", "log", "logger.router.MODE", "1.21") if val := sec.Key("ROUTER").String(); val != "" { - sec.Key("logger.router.MODE").MustString(val) + sec.Key("logger.router.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT } if !sec.HasKey("logger.router.MODE") { - sec.Key("logger.router.MODE").MustString(",") // use default logger + // Use the default logger. + sec.Key("logger.router.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT } if sec.HasKey("DISABLE_ROUTER_LOG") && sec.Key("DISABLE_ROUTER_LOG").MustBool() { sec.Key("logger.router.MODE").SetValue("") @@ -83,10 +84,11 @@ func prepareLoggerConfig(rootCfg ConfigProvider) { deprecatedSetting(rootCfg, "log", "XORM", "log", "logger.xorm.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ENABLE_XORM_LOG", "log", "logger.xorm.MODE", "1.21") if val := sec.Key("XORM").String(); val != "" { - sec.Key("logger.xorm.MODE").MustString(val) + sec.Key("logger.xorm.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT } if !sec.HasKey("logger.xorm.MODE") { - sec.Key("logger.xorm.MODE").MustString(",") // use default logger + // Use the default logger. + sec.Key("logger.xorm.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT } if sec.HasKey("ENABLE_XORM_LOG") && !sec.Key("ENABLE_XORM_LOG").MustBool() { sec.Key("logger.xorm.MODE").SetValue("") diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 0fa259225a9..e28c467fcb3 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -79,7 +79,7 @@ func loadMailerFrom(rootCfg ConfigProvider) { deprecatedSetting(rootCfg, "mailer", "MAILER_TYPE", "mailer", "PROTOCOL", "v1.19.0") if sec.HasKey("MAILER_TYPE") && !sec.HasKey("PROTOCOL") { if sec.Key("MAILER_TYPE").String() == "sendmail" { - sec.Key("PROTOCOL").MustString("sendmail") + sec.Key("PROTOCOL").MustString("sendmail") // FIXME: INI-MUST-SIDE-EFFECT } } @@ -95,32 +95,32 @@ func loadMailerFrom(rootCfg ConfigProvider) { if addr == "" { addr = "127.0.0.1" } - sec.Key("SMTP_ADDR").MustString(addr) - sec.Key("SMTP_PORT").MustString(port) + sec.Key("SMTP_ADDR").MustString(addr) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("SMTP_PORT").MustString(port) // FIXME: INI-MUST-SIDE-EFFECT } deprecatedSetting(rootCfg, "mailer", "IS_TLS_ENABLED", "mailer", "PROTOCOL", "v1.19.0") if sec.HasKey("IS_TLS_ENABLED") && !sec.HasKey("PROTOCOL") { if sec.Key("IS_TLS_ENABLED").MustBool() { - sec.Key("PROTOCOL").MustString("smtps") + sec.Key("PROTOCOL").MustString("smtps") // FIXME: INI-MUST-SIDE-EFFECT } else { - sec.Key("PROTOCOL").MustString("smtp+starttls") + sec.Key("PROTOCOL").MustString("smtp+starttls") // FIXME: INI-MUST-SIDE-EFFECT } } deprecatedSetting(rootCfg, "mailer", "DISABLE_HELO", "mailer", "ENABLE_HELO", "v1.19.0") if sec.HasKey("DISABLE_HELO") && !sec.HasKey("ENABLE_HELO") { - sec.Key("ENABLE_HELO").MustBool(!sec.Key("DISABLE_HELO").MustBool()) + sec.Key("ENABLE_HELO").MustBool(!sec.Key("DISABLE_HELO").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT } deprecatedSetting(rootCfg, "mailer", "SKIP_VERIFY", "mailer", "FORCE_TRUST_SERVER_CERT", "v1.19.0") if sec.HasKey("SKIP_VERIFY") && !sec.HasKey("FORCE_TRUST_SERVER_CERT") { - sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(sec.Key("SKIP_VERIFY").MustBool()) + sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(sec.Key("SKIP_VERIFY").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT } deprecatedSetting(rootCfg, "mailer", "USE_CERTIFICATE", "mailer", "USE_CLIENT_CERT", "v1.19.0") if sec.HasKey("USE_CERTIFICATE") && !sec.HasKey("USE_CLIENT_CERT") { - sec.Key("USE_CLIENT_CERT").MustBool(sec.Key("USE_CERTIFICATE").MustBool()) + sec.Key("USE_CLIENT_CERT").MustBool(sec.Key("USE_CERTIFICATE").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT } deprecatedSetting(rootCfg, "mailer", "CERT_FILE", "mailer", "CLIENT_CERT_FILE", "v1.19.0") @@ -135,7 +135,7 @@ func loadMailerFrom(rootCfg ConfigProvider) { deprecatedSetting(rootCfg, "mailer", "ENABLE_HTML_ALTERNATIVE", "mailer", "SEND_AS_PLAIN_TEXT", "v1.19.0") if sec.HasKey("ENABLE_HTML_ALTERNATIVE") && !sec.HasKey("SEND_AS_PLAIN_TEXT") { - sec.Key("SEND_AS_PLAIN_TEXT").MustBool(!sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)) + sec.Key("SEND_AS_PLAIN_TEXT").MustBool(!sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)) // FIXME: INI-MUST-SIDE-EFFECT } if sec.HasKey("PROTOCOL") && sec.Key("PROTOCOL").String() == "smtp+startls" { @@ -144,15 +144,15 @@ func loadMailerFrom(rootCfg ConfigProvider) { } // Set default values & validate - sec.Key("NAME").MustString(AppName) + sec.Key("NAME").MustString(AppName) // FIXME: INI-MUST-SIDE-EFFECT sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"}) - sec.Key("ENABLE_HELO").MustBool(true) - sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(false) - sec.Key("USE_CLIENT_CERT").MustBool(false) - sec.Key("SENDMAIL_PATH").MustString("sendmail") - sec.Key("SENDMAIL_TIMEOUT").MustDuration(5 * time.Minute) - sec.Key("SENDMAIL_CONVERT_CRLF").MustBool(true) - sec.Key("FROM").MustString(sec.Key("USER").String()) + sec.Key("ENABLE_HELO").MustBool(true) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("USE_CLIENT_CERT").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("SENDMAIL_PATH").MustString("sendmail") // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("SENDMAIL_TIMEOUT").MustDuration(5 * time.Minute) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("SENDMAIL_CONVERT_CRLF").MustBool(true) // FIXME: INI-MUST-SIDE-EFFECT + sec.Key("FROM").MustString(sec.Key("USER").String()) // FIXME: INI-MUST-SIDE-EFFECT // Now map the values on to the MailService MailService = &Mailer{} diff --git a/modules/setting/picture.go b/modules/setting/picture.go index d346ac22381..73d1af0f86a 100644 --- a/modules/setting/picture.go +++ b/modules/setting/picture.go @@ -38,7 +38,7 @@ func loadAvatarsFrom(rootCfg ConfigProvider) error { avatarSec := rootCfg.Section("avatar") storageType := sec.Key("AVATAR_STORAGE_TYPE").MustString("") // Specifically default PATH to AVATAR_UPLOAD_PATH - avatarSec.Key("PATH").MustString(sec.Key("AVATAR_UPLOAD_PATH").String()) + avatarSec.Key("PATH").MustString(sec.Key("AVATAR_UPLOAD_PATH").String()) // FIXME: INI-MUST-SIDE-EFFECT var err error Avatar.Storage, err = getStorage(rootCfg, "avatars", storageType, avatarSec) @@ -73,7 +73,7 @@ func loadRepoAvatarFrom(rootCfg ConfigProvider) error { repoAvatarSec := rootCfg.Section("repo-avatar") storageType := sec.Key("REPOSITORY_AVATAR_STORAGE_TYPE").MustString("") // Specifically default PATH to AVATAR_UPLOAD_PATH - repoAvatarSec.Key("PATH").MustString(sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").String()) + repoAvatarSec.Key("PATH").MustString(sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").String()) // FIXME: INI-MUST-SIDE-EFFECT var err error RepoAvatar.Storage, err = getStorage(rootCfg, "repo-avatars", storageType, repoAvatarSec) diff --git a/modules/setting/repository.go b/modules/setting/repository.go index d352b56de4a..f41865335f9 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -306,9 +306,9 @@ func loadRepositoryFrom(rootCfg ConfigProvider) { Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https") // MAX_CREATION_LIMIT is a shortcut that sets the default for the two per-type limits below. // USER_/ORG_MAX_CREATION_LIMIT take precedence when explicitly set. - Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) - Repository.UserMaxCreationLimit = sec.Key("USER_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) - Repository.OrgMaxCreationLimit = sec.Key("ORG_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) + Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) // FIXME: INI-MUST-SIDE-EFFECT + Repository.UserMaxCreationLimit = sec.Key("USER_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) // FIXME: INI-MUST-SIDE-EFFECT + Repository.OrgMaxCreationLimit = sec.Key("ORG_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) // FIXME: INI-MUST-SIDE-EFFECT Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch) RepoRootPath = sec.Key("ROOT").MustString(filepath.Join(AppDataPath, "gitea-repositories")) if !filepath.IsAbs(RepoRootPath) { diff --git a/modules/setting/service.go b/modules/setting/service.go index ad5c73556e9..18db05f7159 100644 --- a/modules/setting/service.go +++ b/modules/setting/service.go @@ -244,7 +244,7 @@ func loadServiceFrom(rootCfg ConfigProvider) { Service.DefaultOrgMemberVisible = sec.Key("DEFAULT_ORG_MEMBER_VISIBLE").MustBool() Service.UserDeleteWithCommentsMaxTime = sec.Key("USER_DELETE_WITH_COMMENTS_MAX_TIME").MustDuration(0) - sec.Key("VALID_SITE_URL_SCHEMES").MustString("http,https") + sec.Key("VALID_SITE_URL_SCHEMES").MustString("http,https") // FIXME: INI-MUST-SIDE-EFFECT Service.ValidSiteURLSchemes = sec.Key("VALID_SITE_URL_SCHEMES").Strings(",") schemes := make([]string, 0, len(Service.ValidSiteURLSchemes)) for _, scheme := range Service.ValidSiteURLSchemes { diff --git a/modules/setting/ssh.go b/modules/setting/ssh.go index 683c90f2243..5064522e66c 100644 --- a/modules/setting/ssh.go +++ b/modules/setting/ssh.go @@ -146,9 +146,9 @@ func loadSSHFrom(rootCfg ConfigProvider) { } if len(SSH.TrustedUserCAKeys) > 0 { // Set the default as email,username otherwise we can leave it empty - sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("username,email") + sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("username,email") // FIXME: INI-MUST-SIDE-EFFECT } else { - sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("off") + sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("off") // FIXME: INI-MUST-SIDE-EFFECT } SSH.AuthorizedPrincipalsAllow, SSH.AuthorizedPrincipalsEnabled = parseAuthorizedPrincipalsAllow(sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").Strings(",")) @@ -156,7 +156,7 @@ func loadSSHFrom(rootCfg ConfigProvider) { SSH.MinimumKeySizeCheck = sec.Key("MINIMUM_KEY_SIZE_CHECK").MustBool(SSH.MinimumKeySizeCheck) minimumKeySizes := rootCfg.Section("ssh.minimum_key_sizes").Keys() for _, key := range minimumKeySizes { - if key.MustInt() != -1 { + if key.MustInt() != -1 { // FIXME: INI-MUST-SIDE-EFFECT SSH.MinimumKeySizes[strings.ToLower(key.Name())] = key.MustInt() } else { delete(SSH.MinimumKeySizes, strings.ToLower(key.Name())) diff --git a/modules/setting/storage.go b/modules/setting/storage.go index 9ee3f01633d..250ca3e3156 100644 --- a/modules/setting/storage.go +++ b/modules/setting/storage.go @@ -104,20 +104,20 @@ const storageSectionName = "storage" func getDefaultStorageSection(rootCfg ConfigProvider) ConfigSection { storageSec := rootCfg.Section(storageSectionName) // Global Defaults - storageSec.Key("STORAGE_TYPE").MustString("local") - storageSec.Key("MINIO_ENDPOINT").MustString("localhost:9000") - storageSec.Key("MINIO_ACCESS_KEY_ID").MustString("") - storageSec.Key("MINIO_SECRET_ACCESS_KEY").MustString("") - storageSec.Key("MINIO_BUCKET").MustString("gitea") - storageSec.Key("MINIO_LOCATION").MustString("us-east-1") - storageSec.Key("MINIO_USE_SSL").MustBool(false) - storageSec.Key("MINIO_INSECURE_SKIP_VERIFY").MustBool(false) - storageSec.Key("MINIO_CHECKSUM_ALGORITHM").MustString("default") - storageSec.Key("MINIO_BUCKET_LOOKUP_TYPE").MustString("auto") - storageSec.Key("AZURE_BLOB_ENDPOINT").MustString("") - storageSec.Key("AZURE_BLOB_ACCOUNT_NAME").MustString("") - storageSec.Key("AZURE_BLOB_ACCOUNT_KEY").MustString("") - storageSec.Key("AZURE_BLOB_CONTAINER").MustString("gitea") + storageSec.Key("STORAGE_TYPE").MustString("local") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_ENDPOINT").MustString("localhost:9000") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_ACCESS_KEY_ID").MustString("") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_SECRET_ACCESS_KEY").MustString("") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_BUCKET").MustString("gitea") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_LOCATION").MustString("us-east-1") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_USE_SSL").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_INSECURE_SKIP_VERIFY").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_CHECKSUM_ALGORITHM").MustString("default") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("MINIO_BUCKET_LOOKUP_TYPE").MustString("auto") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("AZURE_BLOB_ENDPOINT").MustString("") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("AZURE_BLOB_ACCOUNT_NAME").MustString("") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("AZURE_BLOB_ACCOUNT_KEY").MustString("") // FIXME: INI-MUST-SIDE-EFFECT + storageSec.Key("AZURE_BLOB_CONTAINER").MustString("gitea") // FIXME: INI-MUST-SIDE-EFFECT return storageSec } diff --git a/modules/setting/task.go b/modules/setting/task.go index f75b4f14813..6f2794c2db9 100644 --- a/modules/setting/task.go +++ b/modules/setting/task.go @@ -16,11 +16,11 @@ func loadTaskFrom(rootCfg ConfigProvider) { switch taskSec.Key("QUEUE_TYPE").MustString("channel") { case "channel": - queueTaskSec.Key("TYPE").MustString("persistable-channel") - queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("")) + queueTaskSec.Key("TYPE").MustString("persistable-channel") // FIXME: INI-MUST-SIDE-EFFECT + queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("")) // FIXME: INI-MUST-SIDE-EFFECT case "redis": - queueTaskSec.Key("TYPE").MustString("redis") - queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("addrs=127.0.0.1:6379 db=0")) + queueTaskSec.Key("TYPE").MustString("redis") // FIXME: INI-MUST-SIDE-EFFECT + queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("addrs=127.0.0.1:6379 db=0")) // FIXME: INI-MUST-SIDE-EFFECT } - queueTaskSec.Key("LENGTH").MustInt(taskSec.Key("QUEUE_LENGTH").MustInt(1000)) + queueTaskSec.Key("LENGTH").MustInt(taskSec.Key("QUEUE_LENGTH").MustInt(1000)) // FIXME: INI-MUST-SIDE-EFFECT } diff --git a/routers/install/install.go b/routers/install/install.go index 3819c7d92a2..c789f26d173 100644 --- a/routers/install/install.go +++ b/routers/install/install.go @@ -403,7 +403,7 @@ func fillInstallConfig(ctx *context.Context, envs []string, form *forms.InstallF cfg.Section("session").Key("PROVIDER").SetValue("file") - cfg.Section("log").Key("MODE").MustString("console") + cfg.Section("log").Key("MODE").MustString("console") // FIXME: INI-MUST-SIDE-EFFECT cfg.Section("log").Key("LEVEL").SetValue(setting.Log.Level.String()) cfg.Section("log").Key("ROOT_PATH").SetValue(form.LogRootPath)