Skip to content

Commit 25b6f38

Browse files
authored
Move ParseBool to optional (go-gitea#33979)
1 parent 08510ad commit 25b6f38

File tree

6 files changed

+31
-34
lines changed

6 files changed

+31
-34
lines changed

modules/optional/option.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
package optional
55

6+
import "strconv"
7+
68
type Option[T any] []T
79

810
func None[T any]() Option[T] {
@@ -43,3 +45,12 @@ func (o Option[T]) ValueOrDefault(v T) T {
4345
}
4446
return v
4547
}
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+
}

modules/optional/option_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,16 @@ func TestOption(t *testing.T) {
5757
assert.True(t, opt3.Has())
5858
assert.Equal(t, int(1), opt3.Value())
5959
}
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+
}

modules/setting/setting.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212
"time"
1313

1414
"code.gitea.io/gitea/modules/log"
15+
"code.gitea.io/gitea/modules/optional"
1516
"code.gitea.io/gitea/modules/user"
16-
"code.gitea.io/gitea/modules/util"
1717
)
1818

1919
// settings
@@ -159,7 +159,7 @@ func loadRunModeFrom(rootCfg ConfigProvider) {
159159
// The following is a purposefully undocumented option. Please do not run Gitea as root. It will only cause future headaches.
160160
// Please don't use root as a bandaid to "fix" something that is broken, instead the broken thing should instead be fixed properly.
161161
unsafeAllowRunAsRoot := ConfigSectionKeyBool(rootSec, "I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")
162-
unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || util.OptionalBoolParse(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value()
162+
unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || optional.ParseBool(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value()
163163
RunMode = os.Getenv("GITEA_RUN_MODE")
164164
if RunMode == "" {
165165
RunMode = rootSec.Key("RUN_MODE").MustString("prod")

modules/util/util.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,10 @@ import (
1111
"strconv"
1212
"strings"
1313

14-
"code.gitea.io/gitea/modules/optional"
15-
1614
"golang.org/x/text/cases"
1715
"golang.org/x/text/language"
1816
)
1917

20-
// OptionalBoolParse get the corresponding optional.Option[bool] of a string using strconv.ParseBool
21-
func OptionalBoolParse(s string) optional.Option[bool] {
22-
v, e := strconv.ParseBool(s)
23-
if e != nil {
24-
return optional.None[bool]()
25-
}
26-
return optional.Some(v)
27-
}
28-
2918
// IsEmptyString checks if the provided string is empty
3019
func IsEmptyString(s string) bool {
3120
return len(strings.TrimSpace(s)) == 0

modules/util/util_test.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88
"strings"
99
"testing"
1010

11-
"code.gitea.io/gitea/modules/optional"
12-
1311
"github.com/stretchr/testify/assert"
1412
)
1513

@@ -175,19 +173,6 @@ func Test_RandomBytes(t *testing.T) {
175173
assert.NotEqual(t, bytes3, bytes4)
176174
}
177175

178-
func TestOptionalBoolParse(t *testing.T) {
179-
assert.Equal(t, optional.None[bool](), OptionalBoolParse(""))
180-
assert.Equal(t, optional.None[bool](), OptionalBoolParse("x"))
181-
182-
assert.Equal(t, optional.Some(false), OptionalBoolParse("0"))
183-
assert.Equal(t, optional.Some(false), OptionalBoolParse("f"))
184-
assert.Equal(t, optional.Some(false), OptionalBoolParse("False"))
185-
186-
assert.Equal(t, optional.Some(true), OptionalBoolParse("1"))
187-
assert.Equal(t, optional.Some(true), OptionalBoolParse("t"))
188-
assert.Equal(t, optional.Some(true), OptionalBoolParse("True"))
189-
}
190-
191176
// Test case for any function which accepts and returns a single string.
192177
type StringTest struct {
193178
in, out string

routers/web/admin/users.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"code.gitea.io/gitea/modules/optional"
2323
"code.gitea.io/gitea/modules/setting"
2424
"code.gitea.io/gitea/modules/templates"
25-
"code.gitea.io/gitea/modules/util"
2625
"code.gitea.io/gitea/modules/web"
2726
"code.gitea.io/gitea/routers/web/explore"
2827
user_setting "code.gitea.io/gitea/routers/web/user/setting"
@@ -72,11 +71,11 @@ func Users(ctx *context.Context) {
7271
PageSize: setting.UI.Admin.UserPagingNum,
7372
},
7473
SearchByEmail: true,
75-
IsActive: util.OptionalBoolParse(statusFilterMap["is_active"]),
76-
IsAdmin: util.OptionalBoolParse(statusFilterMap["is_admin"]),
77-
IsRestricted: util.OptionalBoolParse(statusFilterMap["is_restricted"]),
78-
IsTwoFactorEnabled: util.OptionalBoolParse(statusFilterMap["is_2fa_enabled"]),
79-
IsProhibitLogin: util.OptionalBoolParse(statusFilterMap["is_prohibit_login"]),
74+
IsActive: optional.ParseBool(statusFilterMap["is_active"]),
75+
IsAdmin: optional.ParseBool(statusFilterMap["is_admin"]),
76+
IsRestricted: optional.ParseBool(statusFilterMap["is_restricted"]),
77+
IsTwoFactorEnabled: optional.ParseBool(statusFilterMap["is_2fa_enabled"]),
78+
IsProhibitLogin: optional.ParseBool(statusFilterMap["is_prohibit_login"]),
8079
IncludeReserved: true, // administrator needs to list all accounts include reserved, bot, remote ones
8180
}, tplUsers)
8281
}

0 commit comments

Comments
 (0)