diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2023-06-26 07:45:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-26 07:45:27 +0200 |
commit | e409e14bdfb56767c9048076f4e818757aab73b9 (patch) | |
tree | 150bb1702f29af2c24aa3a57d5a9d00a0c5ac685 /main.go | |
parent | Document creating an API key from the CLI (#25504) (#25510) (diff) | |
download | forgejo-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.go | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -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) } } |