aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/admin_auth_smtp.go4
-rw-r--r--cmd/admin_auth_smtp_test.go58
-rw-r--r--cmd/cert.go4
-rw-r--r--cmd/cmd.go10
-rw-r--r--cmd/cmd_test.go38
-rw-r--r--cmd/dump_repo.go4
-rw-r--r--cmd/hook.go4
-rw-r--r--cmd/main.go2
-rw-r--r--cmd/manager_logging.go3
-rw-r--r--cmd/web.go4
10 files changed, 82 insertions, 49 deletions
diff --git a/cmd/admin_auth_smtp.go b/cmd/admin_auth_smtp.go
index e9daf71809..93e0587fc3 100644
--- a/cmd/admin_auth_smtp.go
+++ b/cmd/admin_auth_smtp.go
@@ -39,12 +39,10 @@ func smtpCLIFlags() []cli.Flag {
&cli.BoolFlag{
Name: "force-smtps",
Usage: "SMTPS is always used on port 465. Set this to force SMTPS on other ports.",
- Value: true,
},
&cli.BoolFlag{
Name: "skip-verify",
Usage: "Skip TLS verify.",
- Value: true,
},
&cli.StringFlag{
Name: "helo-hostname",
@@ -54,7 +52,6 @@ func smtpCLIFlags() []cli.Flag {
&cli.BoolFlag{
Name: "disable-helo",
Usage: "Disable SMTP helo.",
- Value: true,
},
&cli.StringFlag{
Name: "allowed-domains",
@@ -64,7 +61,6 @@ func smtpCLIFlags() []cli.Flag {
&cli.BoolFlag{
Name: "skip-local-2fa",
Usage: "Skip 2FA to log on.",
- Value: true,
},
&cli.BoolFlag{
Name: "active",
diff --git a/cmd/admin_auth_smtp_test.go b/cmd/admin_auth_smtp_test.go
index 9778ff87d2..e54e01830c 100644
--- a/cmd/admin_auth_smtp_test.go
+++ b/cmd/admin_auth_smtp_test.go
@@ -60,10 +60,8 @@ func TestAddSMTP(t *testing.T) {
Auth: "PLAIN",
Host: "localhost",
Port: 25,
- // ForceSMTPS: true,
- // SkipVerify: true,
},
- TwoFactorPolicy: "skip",
+ TwoFactorPolicy: "",
},
},
{
@@ -73,12 +71,12 @@ func TestAddSMTP(t *testing.T) {
"--host", "localhost",
"--port", "25",
"--auth-type", "LOGIN",
- "--force-smtps=false",
- "--skip-verify=false",
+ "--force-smtps",
+ "--skip-verify",
"--helo-hostname", "example.com",
- "--disable-helo=false",
+ "--disable-helo=true",
"--allowed-domains", "example.com,example.org",
- "--skip-local-2fa=false",
+ "--skip-local-2fa",
"--active=false",
},
source: &auth_model.Source{
@@ -89,13 +87,13 @@ func TestAddSMTP(t *testing.T) {
Auth: "LOGIN",
Host: "localhost",
Port: 25,
- ForceSMTPS: false,
- SkipVerify: false,
+ ForceSMTPS: true,
+ SkipVerify: true,
HeloHostname: "example.com",
- DisableHelo: false,
+ DisableHelo: true,
AllowedDomains: "example.com,example.org",
},
- TwoFactorPolicy: "",
+ TwoFactorPolicy: "skip",
},
},
}
@@ -157,13 +155,10 @@ func TestUpdateSMTP(t *testing.T) {
Name: "old name",
IsActive: true,
Cfg: &smtp.Source{
- Auth: "PLAIN",
- Host: "old host",
- Port: 26,
- ForceSMTPS: true,
- SkipVerify: true,
+ Auth: "PLAIN",
+ Host: "old host",
+ Port: 26,
},
- TwoFactorPolicy: "",
},
args: []string{
"--id", "1",
@@ -177,13 +172,10 @@ func TestUpdateSMTP(t *testing.T) {
Name: "test",
IsActive: true,
Cfg: &smtp.Source{
- Auth: "PLAIN",
- Host: "localhost",
- Port: 25,
- ForceSMTPS: true,
- SkipVerify: true,
+ Auth: "PLAIN",
+ Host: "localhost",
+ Port: 25,
},
- TwoFactorPolicy: "skip",
},
},
{
@@ -197,10 +189,7 @@ func TestUpdateSMTP(t *testing.T) {
Auth: "PLAIN",
Host: "old host",
Port: 26,
- ForceSMTPS: true,
- SkipVerify: true,
HeloHostname: "old.example.com",
- DisableHelo: false,
AllowedDomains: "old.example.com",
},
TwoFactorPolicy: "",
@@ -211,12 +200,12 @@ func TestUpdateSMTP(t *testing.T) {
"--host", "localhost",
"--port", "25",
"--auth-type", "LOGIN",
- "--force-smtps=false",
- "--skip-verify=false",
+ "--force-smtps",
+ "--skip-verify",
"--helo-hostname", "example.com",
- "--disable-helo=true",
+ "--disable-helo",
"--allowed-domains", "example.com,example.org",
- "--skip-local-2fa=true",
+ "--skip-local-2fa",
"--active=false",
},
authSource: &auth_model.Source{
@@ -228,8 +217,8 @@ func TestUpdateSMTP(t *testing.T) {
Auth: "LOGIN",
Host: "localhost",
Port: 25,
- ForceSMTPS: false,
- SkipVerify: false,
+ ForceSMTPS: true,
+ SkipVerify: true,
HeloHostname: "example.com",
DisableHelo: true,
AllowedDomains: "example.com,example.org",
@@ -252,11 +241,8 @@ func TestUpdateSMTP(t *testing.T) {
Name: "test",
IsActive: true,
Cfg: &smtp.Source{
- Auth: "PLAIN",
- SkipVerify: true,
- ForceSMTPS: true,
+ Auth: "PLAIN",
},
- TwoFactorPolicy: "skip",
}, nil
},
diff --git a/cmd/cert.go b/cmd/cert.go
index 8cc9f43528..53b4f9dcb4 100644
--- a/cmd/cert.go
+++ b/cmd/cert.go
@@ -156,8 +156,8 @@ func runCert(_ context.Context, c *cli.Command) error {
BasicConstraintsValid: true,
}
- hosts := strings.Split(c.String("host"), ",")
- for _, h := range hosts {
+ hosts := strings.SplitSeq(c.String("host"), ",")
+ for h := range hosts {
if ip := net.ParseIP(h); ip != nil {
template.IPAddresses = append(template.IPAddresses, ip)
} else {
diff --git a/cmd/cmd.go b/cmd/cmd.go
index 7a4d5d0d89..5b96bcbf9a 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -132,3 +132,13 @@ func PrepareConsoleLoggerLevel(defaultLevel log.Level) func(context.Context, *cl
return ctx, nil
}
}
+
+func isValidDefaultSubCommand(cmd *cli.Command) (string, bool) {
+ // Dirty patch for urfave/cli's strange design.
+ // "./gitea bad-cmd" should not start the web server.
+ rootArgs := cmd.Root().Args().Slice()
+ if len(rootArgs) != 0 && rootArgs[0] != cmd.Name {
+ return rootArgs[0], false
+ }
+ return "", true
+}
diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go
new file mode 100644
index 0000000000..a36d05c76e
--- /dev/null
+++ b/cmd/cmd_test.go
@@ -0,0 +1,38 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package cmd
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/urfave/cli/v3"
+)
+
+func TestDefaultCommand(t *testing.T) {
+ test := func(t *testing.T, args []string, expectedRetName string, expectedRetValid bool) {
+ called := false
+ cmd := &cli.Command{
+ DefaultCommand: "test",
+ Commands: []*cli.Command{
+ {
+ Name: "test",
+ Action: func(ctx context.Context, command *cli.Command) error {
+ retName, retValid := isValidDefaultSubCommand(command)
+ assert.Equal(t, expectedRetName, retName)
+ assert.Equal(t, expectedRetValid, retValid)
+ called = true
+ return nil
+ },
+ },
+ },
+ }
+ assert.NoError(t, cmd.Run(t.Context(), args))
+ assert.True(t, called)
+ }
+ test(t, []string{"./gitea"}, "", true)
+ test(t, []string{"./gitea", "test"}, "", true)
+ test(t, []string{"./gitea", "other"}, "other", false)
+}
diff --git a/cmd/dump_repo.go b/cmd/dump_repo.go
index 8dd4fd86e7..a75b2d1b94 100644
--- a/cmd/dump_repo.go
+++ b/cmd/dump_repo.go
@@ -137,8 +137,8 @@ func runDumpRepository(ctx context.Context, cmd *cli.Command) error {
opts.PullRequests = true
opts.ReleaseAssets = true
} else {
- units := strings.Split(cmd.String("units"), ",")
- for _, unit := range units {
+ units := strings.SplitSeq(cmd.String("units"), ",")
+ for unit := range units {
switch strings.ToLower(strings.TrimSpace(unit)) {
case "":
continue
diff --git a/cmd/hook.go b/cmd/hook.go
index 4621137e01..2ce272b411 100644
--- a/cmd/hook.go
+++ b/cmd/hook.go
@@ -480,7 +480,7 @@ func hookPrintResult(output, isCreate bool, branch, url string) {
func pushOptions() map[string]string {
opts := make(map[string]string)
if pushCount, err := strconv.Atoi(os.Getenv(private.GitPushOptionCount)); err == nil {
- for idx := 0; idx < pushCount; idx++ {
+ for idx := range pushCount {
opt := os.Getenv(fmt.Sprintf("GIT_PUSH_OPTION_%d", idx))
kv := strings.SplitN(opt, "=", 2)
if len(kv) == 2 {
@@ -732,7 +732,7 @@ func readPktLine(ctx context.Context, in *bufio.Reader, requestType pktLineType)
// read prefix
lengthBytes := make([]byte, 4)
- for i := 0; i < 4; i++ {
+ for i := range 4 {
lengthBytes[i], err = in.ReadByte()
if err != nil {
return nil, fail(ctx, "Protocol: stdin error", "Pkt-Line: read stdin failed : %v", err)
diff --git a/cmd/main.go b/cmd/main.go
index 128b8776b4..3b8a8a9311 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -152,6 +152,8 @@ func NewMainApp(appVer AppVersion) *cli.Command {
CmdDocs,
}
+ // TODO: we should eventually drop the default command,
+ // but not sure whether it would break Windows users who used to double-click the EXE to run.
app.DefaultCommand = CmdWeb.Name
app.Flags = append(app.Flags, cli.VersionFlag)
diff --git a/cmd/manager_logging.go b/cmd/manager_logging.go
index c83073e9c6..ac29e7d3e5 100644
--- a/cmd/manager_logging.go
+++ b/cmd/manager_logging.go
@@ -119,7 +119,6 @@ var (
Name: "rotate",
Aliases: []string{"r"},
Usage: "Rotate logs",
- Value: true,
},
&cli.Int64Flag{
Name: "max-size",
@@ -130,7 +129,6 @@ var (
Name: "daily",
Aliases: []string{"d"},
Usage: "Rotate logs daily",
- Value: true,
},
&cli.IntFlag{
Name: "max-days",
@@ -141,7 +139,6 @@ var (
Name: "compress",
Aliases: []string{"z"},
Usage: "Compress rotated logs",
- Value: true,
},
&cli.IntFlag{
Name: "compression-level",
diff --git a/cmd/web.go b/cmd/web.go
index 39e336fe54..61ee3cbc20 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -251,6 +251,10 @@ func runWeb(_ context.Context, cmd *cli.Command) error {
}
}()
+ if subCmdName, valid := isValidDefaultSubCommand(cmd); !valid {
+ return fmt.Errorf("unknown command: %s", subCmdName)
+ }
+
managerCtx, cancel := context.WithCancel(context.Background())
graceful.InitManager(managerCtx)
defer cancel()