mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	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.
This commit is contained in:
		
							
								
								
									
										15
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								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) | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user