summaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-06-26 07:45:27 +0200
committerGitHub <noreply@github.com>2023-06-26 07:45:27 +0200
commite409e14bdfb56767c9048076f4e818757aab73b9 (patch)
tree150bb1702f29af2c24aa3a57d5a9d00a0c5ac685 /main.go
parentDocument creating an API key from the CLI (#25504) (#25510) (diff)
downloadforgejo-e409e14bdfb56767c9048076f4e818757aab73b9.tar.xz
forgejo-e409e14bdfb56767c9048076f4e818757aab73b9.zip
Fix CLI sub-command handling (#25501)
A regression of #25330 : The nil "Action" should be treated as "help" In old releases: `./gitea admin` show helps After #25330: `./gitea admin` panics (although the code returned `nil` if action is nil, but Golang's quirk is: nil in interface is not nil) With this PR: `./gitea admin` shows helps as the old releases.
Diffstat (limited to 'main.go')
-rw-r--r--main.go15
1 files changed, 7 insertions, 8 deletions
diff --git a/main.go b/main.go
index 1c87824c83..7b447e7533 100644
--- a/main.go
+++ b/main.go
@@ -47,7 +47,9 @@ func init() {
// ./gitea -h
// ./gitea web help
// ./gitea web -h (due to cli lib limitation, this won't call our cmdHelp, so no extra info)
-// ./gitea admin help auth
+// ./gitea admin
+// ./gitea admin help
+// ./gitea admin auth help
// ./gitea -c /tmp/app.ini -h
// ./gitea -c /tmp/app.ini help
// ./gitea help -c /tmp/app.ini
@@ -156,11 +158,7 @@ func prepareSubcommands(command *cli.Command, defaultFlags []cli.Flag) {
// prepareWorkPathAndCustomConf wraps the Action to prepare the work path and custom config
// It can't use "Before", because each level's sub-command's Before will be called one by one, so the "init" would be done multiple times
-func prepareWorkPathAndCustomConf(a any) func(ctx *cli.Context) error {
- if a == nil {
- return nil
- }
- action := a.(func(*cli.Context) error)
+func prepareWorkPathAndCustomConf(action any) func(ctx *cli.Context) error {
return func(ctx *cli.Context) error {
var args setting.ArgWorkPathAndCustomConf
curCtx := ctx
@@ -177,10 +175,11 @@ func prepareWorkPathAndCustomConf(a any) func(ctx *cli.Context) error {
curCtx = curCtx.Parent()
}
setting.InitWorkPathAndCommonConfig(os.Getenv, args)
- if ctx.Bool("help") {
+ if ctx.Bool("help") || action == nil {
+ // the default behavior of "urfave/cli": "nil action" means "show help"
return cmdHelp.Action.(func(ctx *cli.Context) error)(ctx)
}
- return action(ctx)
+ return action.(func(*cli.Context) error)(ctx)
}
}