loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move ParseBool to optional (#33979)

(cherry picked from commit 25b6f388651c893ecafce918f27bef7e4ae9a967)

authored by

Lunny Xiao and committed by
Gusted
f68d49cb 9018e5bc

+31 -33
+11
modules/optional/option.go
··· 3 3 4 4 package optional 5 5 6 + import "strconv" 7 + 6 8 type Option[T any] []T 7 9 8 10 func None[T any]() Option[T] { ··· 43 45 } 44 46 return v 45 47 } 48 + 49 + // ParseBool get the corresponding optional.Option[bool] of a string using strconv.ParseBool 50 + func ParseBool(s string) Option[bool] { 51 + v, e := strconv.ParseBool(s) 52 + if e != nil { 53 + return None[bool]() 54 + } 55 + return Some(v) 56 + }
+13
modules/optional/option_test.go
··· 57 57 assert.True(t, opt3.Has()) 58 58 assert.Equal(t, int(1), opt3.Value()) 59 59 } 60 + 61 + func Test_ParseBool(t *testing.T) { 62 + assert.Equal(t, optional.None[bool](), optional.ParseBool("")) 63 + assert.Equal(t, optional.None[bool](), optional.ParseBool("x")) 64 + 65 + assert.Equal(t, optional.Some(false), optional.ParseBool("0")) 66 + assert.Equal(t, optional.Some(false), optional.ParseBool("f")) 67 + assert.Equal(t, optional.Some(false), optional.ParseBool("False")) 68 + 69 + assert.Equal(t, optional.Some(true), optional.ParseBool("1")) 70 + assert.Equal(t, optional.Some(true), optional.ParseBool("t")) 71 + assert.Equal(t, optional.Some(true), optional.ParseBool("True")) 72 + }
+2 -2
modules/setting/setting.go
··· 12 12 "time" 13 13 14 14 "forgejo.org/modules/log" 15 + "forgejo.org/modules/optional" 15 16 "forgejo.org/modules/user" 16 - "forgejo.org/modules/util" 17 17 ) 18 18 19 19 var ForgejoVersion = "1.0.0" ··· 162 162 // The following is a purposefully undocumented option. Please do not run Forgejo as root. It will only cause future headaches. 163 163 // Please don't use root as a bandaid to "fix" something that is broken, instead the broken thing should instead be fixed properly. 164 164 unsafeAllowRunAsRoot := ConfigSectionKeyBool(rootSec, "I_AM_BEING_UNSAFE_RUNNING_AS_ROOT") 165 - unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || util.OptionalBoolParse(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value() 165 + unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || optional.ParseBool(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value() 166 166 RunMode = os.Getenv("GITEA_RUN_MODE") 167 167 if RunMode == "" { 168 168 RunMode = rootSec.Key("RUN_MODE").MustString("prod")
-11
modules/util/util.go
··· 14 14 "strconv" 15 15 "strings" 16 16 17 - "forgejo.org/modules/optional" 18 - 19 17 "golang.org/x/crypto/ssh" 20 18 "golang.org/x/text/cases" 21 19 "golang.org/x/text/language" 22 20 ) 23 - 24 - // OptionalBoolParse get the corresponding optional.Option[bool] of a string using strconv.ParseBool 25 - func OptionalBoolParse(s string) optional.Option[bool] { 26 - v, e := strconv.ParseBool(s) 27 - if e != nil { 28 - return optional.None[bool]() 29 - } 30 - return optional.Some(v) 31 - } 32 21 33 22 // IsEmptyString checks if the provided string is empty 34 23 func IsEmptyString(s string) bool {
-14
modules/util/util_test.go
··· 11 11 "strings" 12 12 "testing" 13 13 14 - "forgejo.org/modules/optional" 15 14 "forgejo.org/modules/test" 16 15 "forgejo.org/modules/util" 17 16 ··· 179 178 require.NoError(t, err) 180 179 181 180 assert.NotEqual(t, bytes3, bytes4) 182 - } 183 - 184 - func TestOptionalBoolParse(t *testing.T) { 185 - assert.Equal(t, optional.None[bool](), util.OptionalBoolParse("")) 186 - assert.Equal(t, optional.None[bool](), util.OptionalBoolParse("x")) 187 - 188 - assert.Equal(t, optional.Some(false), util.OptionalBoolParse("0")) 189 - assert.Equal(t, optional.Some(false), util.OptionalBoolParse("f")) 190 - assert.Equal(t, optional.Some(false), util.OptionalBoolParse("False")) 191 - 192 - assert.Equal(t, optional.Some(true), util.OptionalBoolParse("1")) 193 - assert.Equal(t, optional.Some(true), util.OptionalBoolParse("t")) 194 - assert.Equal(t, optional.Some(true), util.OptionalBoolParse("True")) 195 181 } 196 182 197 183 // Test case for any function which accepts and returns a single string.
+5 -6
routers/web/admin/users.go
··· 22 22 "forgejo.org/modules/log" 23 23 "forgejo.org/modules/optional" 24 24 "forgejo.org/modules/setting" 25 - "forgejo.org/modules/util" 26 25 "forgejo.org/modules/validation" 27 26 "forgejo.org/modules/web" 28 27 "forgejo.org/routers/web/explore" ··· 77 76 PageSize: setting.UI.Admin.UserPagingNum, 78 77 }, 79 78 SearchByEmail: true, 80 - IsActive: util.OptionalBoolParse(statusFilterMap["is_active"]), 81 - IsAdmin: util.OptionalBoolParse(statusFilterMap["is_admin"]), 82 - IsRestricted: util.OptionalBoolParse(statusFilterMap["is_restricted"]), 83 - IsTwoFactorEnabled: util.OptionalBoolParse(statusFilterMap["is_2fa_enabled"]), 84 - IsProhibitLogin: util.OptionalBoolParse(statusFilterMap["is_prohibit_login"]), 79 + IsActive: optional.ParseBool(statusFilterMap["is_active"]), 80 + IsAdmin: optional.ParseBool(statusFilterMap["is_admin"]), 81 + IsRestricted: optional.ParseBool(statusFilterMap["is_restricted"]), 82 + IsTwoFactorEnabled: optional.ParseBool(statusFilterMap["is_2fa_enabled"]), 83 + IsProhibitLogin: optional.ParseBool(statusFilterMap["is_prohibit_login"]), 85 84 IncludeReserved: true, // administrator needs to list all accounts include reserved, bot, remote ones 86 85 Load2FAStatus: true, 87 86 ExtraParamStrings: extraParamStrings,