aboutsummaryrefslogtreecommitdiffstats
path: root/modules/private/pushoptions.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/private/pushoptions.go')
-rw-r--r--modules/private/pushoptions.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/modules/private/pushoptions.go b/modules/private/pushoptions.go
new file mode 100644
index 0000000000..7616e6b941
--- /dev/null
+++ b/modules/private/pushoptions.go
@@ -0,0 +1,45 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package private
+
+import (
+ "strconv"
+ "strings"
+
+ "code.gitea.io/gitea/modules/optional"
+)
+
+// GitPushOptions is a wrapper around a map[string]string
+type GitPushOptions map[string]string
+
+// GitPushOptions keys
+const (
+ GitPushOptionRepoPrivate = "repo.private"
+ GitPushOptionRepoTemplate = "repo.template"
+ GitPushOptionForcePush = "force-push"
+)
+
+// Bool checks for a key in the map and parses as a boolean
+// An option without value is considered true, eg: "-o force-push" or "-o repo.private"
+func (g GitPushOptions) Bool(key string) optional.Option[bool] {
+ if val, ok := g[key]; ok {
+ if val == "" {
+ return optional.Some(true)
+ }
+ if b, err := strconv.ParseBool(val); err == nil {
+ return optional.Some(b)
+ }
+ }
+ return optional.None[bool]()
+}
+
+// AddFromKeyValue adds a key value pair to the map by "key=value" format or "key" for empty value
+func (g GitPushOptions) AddFromKeyValue(line string) {
+ kv := strings.SplitN(line, "=", 2)
+ if len(kv) == 2 {
+ g[kv[0]] = kv[1]
+ } else {
+ g[kv[0]] = ""
+ }
+}