aboutsummaryrefslogtreecommitdiffstats
path: root/modules/private/pushoptions.go
blob: 7616e6b941752801442961c37a67667bcc708c0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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]] = ""
	}
}