Improve CLI and messages (#26341)
Follow the CLI refactoring 1. Remove the "checkCommandFlags" helper 2. Unify the web startup message, make them have consistent names as `./gitea help` 3. Fine tune some other messages (see the diff)
This commit is contained in:
parent
ecb04cc324
commit
4f513474dc
2 changed files with 17 additions and 52 deletions
37
cmd/main.go
37
cmd/main.go
|
@ -6,8 +6,6 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
@ -58,7 +56,6 @@ func appGlobalFlags() []cli.Flag {
|
||||||
return []cli.Flag{
|
return []cli.Flag{
|
||||||
// make the builtin flags at the top
|
// make the builtin flags at the top
|
||||||
helpFlag,
|
helpFlag,
|
||||||
cli.VersionFlag,
|
|
||||||
|
|
||||||
// shared configuration flags, they are for global and for each sub-command at the same time
|
// shared configuration flags, they are for global and for each sub-command at the same time
|
||||||
// eg: such command is valid: "./gitea --config /tmp/app.ini web --config /tmp/app.ini", while it's discouraged indeed
|
// eg: such command is valid: "./gitea --config /tmp/app.ini web --config /tmp/app.ini", while it's discouraged indeed
|
||||||
|
@ -120,36 +117,6 @@ func prepareWorkPathAndCustomConf(action cli.ActionFunc) func(ctx *cli.Context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func reflectGet(v any, fieldName string) any {
|
|
||||||
e := reflect.ValueOf(v).Elem()
|
|
||||||
return e.FieldByName(fieldName).Interface()
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://cli.urfave.org/migrate-v1-to-v2/#flag-aliases-are-done-differently
|
|
||||||
// Sadly v2 doesn't warn you if a comma is in the name. (https://github.com/urfave/cli/issues/1103)
|
|
||||||
func checkCommandFlags(c any) bool {
|
|
||||||
var cmds []*cli.Command
|
|
||||||
if app, ok := c.(*cli.App); ok {
|
|
||||||
cmds = app.Commands
|
|
||||||
} else {
|
|
||||||
cmds = c.(*cli.Command).Subcommands
|
|
||||||
}
|
|
||||||
ok := true
|
|
||||||
for _, cmd := range cmds {
|
|
||||||
for _, flag := range cmd.Flags {
|
|
||||||
flagName := reflectGet(flag, "Name").(string)
|
|
||||||
if strings.Contains(flagName, ",") {
|
|
||||||
ok = false
|
|
||||||
log.Error("cli.Flag can't have comma in its Name: %q, use Aliases instead", flagName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !checkCommandFlags(cmd) {
|
|
||||||
ok = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMainApp() *cli.App {
|
func NewMainApp() *cli.App {
|
||||||
app := cli.NewApp()
|
app := cli.NewApp()
|
||||||
app.EnableBashCompletion = true
|
app.EnableBashCompletion = true
|
||||||
|
@ -187,6 +154,7 @@ func NewMainApp() *cli.App {
|
||||||
app.DefaultCommand = CmdWeb.Name
|
app.DefaultCommand = CmdWeb.Name
|
||||||
|
|
||||||
globalFlags := appGlobalFlags()
|
globalFlags := appGlobalFlags()
|
||||||
|
app.Flags = append(app.Flags, cli.VersionFlag)
|
||||||
app.Flags = append(app.Flags, globalFlags...)
|
app.Flags = append(app.Flags, globalFlags...)
|
||||||
app.HideHelp = true // use our own help action to show helps (with more information like default config)
|
app.HideHelp = true // use our own help action to show helps (with more information like default config)
|
||||||
app.Before = PrepareConsoleLoggerLevel(log.INFO)
|
app.Before = PrepareConsoleLoggerLevel(log.INFO)
|
||||||
|
@ -196,8 +164,5 @@ func NewMainApp() *cli.App {
|
||||||
app.Commands = append(app.Commands, subCmdWithConfig...)
|
app.Commands = append(app.Commands, subCmdWithConfig...)
|
||||||
app.Commands = append(app.Commands, subCmdStandalone...)
|
app.Commands = append(app.Commands, subCmdStandalone...)
|
||||||
|
|
||||||
if !checkCommandFlags(app) {
|
|
||||||
panic("some flags are incorrect") // this is a runtime check to help developers
|
|
||||||
}
|
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
32
cmd/web.go
32
cmd/web.go
|
@ -107,13 +107,18 @@ func createPIDFile(pidPath string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func serveInstall(ctx *cli.Context) error {
|
func showWebStartupMessage(msg string) {
|
||||||
log.Info("Gitea version: %s%s", setting.AppVer, setting.AppBuiltWith)
|
log.Info("Gitea version: %s%s", setting.AppVer, setting.AppBuiltWith)
|
||||||
log.Info("App path: %s", setting.AppPath)
|
log.Info("* RunMode: %s", setting.RunMode)
|
||||||
log.Info("Work path: %s", setting.AppWorkPath)
|
log.Info("* AppPath: %s", setting.AppPath)
|
||||||
log.Info("Custom path: %s", setting.CustomPath)
|
log.Info("* WorkPath: %s", setting.AppWorkPath)
|
||||||
log.Info("Config file: %s", setting.CustomConf)
|
log.Info("* CustomPath: %s", setting.CustomPath)
|
||||||
log.Info("Prepare to run install page")
|
log.Info("* ConfigFile: %s", setting.CustomConf)
|
||||||
|
log.Info("%s", msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func serveInstall(ctx *cli.Context) error {
|
||||||
|
showWebStartupMessage("Prepare to run install page")
|
||||||
|
|
||||||
routers.InitWebInstallPage(graceful.GetManager().HammerContext())
|
routers.InitWebInstallPage(graceful.GetManager().HammerContext())
|
||||||
|
|
||||||
|
@ -150,29 +155,24 @@ func serveInstalled(ctx *cli.Context) error {
|
||||||
setting.LoadCommonSettings()
|
setting.LoadCommonSettings()
|
||||||
setting.MustInstalled()
|
setting.MustInstalled()
|
||||||
|
|
||||||
log.Info("Gitea version: %s%s", setting.AppVer, setting.AppBuiltWith)
|
showWebStartupMessage("Prepare to run web server")
|
||||||
log.Info("App path: %s", setting.AppPath)
|
|
||||||
log.Info("Work path: %s", setting.AppWorkPath)
|
|
||||||
log.Info("Custom path: %s", setting.CustomPath)
|
|
||||||
log.Info("Config file: %s", setting.CustomConf)
|
|
||||||
log.Info("Run mode: %s", setting.RunMode)
|
|
||||||
log.Info("Prepare to run web server")
|
|
||||||
|
|
||||||
if setting.AppWorkPathMismatch {
|
if setting.AppWorkPathMismatch {
|
||||||
log.Error("WORK_PATH from config %q doesn't match other paths from environment variables or command arguments. "+
|
log.Error("WORK_PATH from config %q doesn't match other paths from environment variables or command arguments. "+
|
||||||
"Only WORK_PATH in config should be set and used. Please remove the other outdated work paths from environment variables and command arguments", setting.CustomConf)
|
"Only WORK_PATH in config should be set and used. Please make sure the path in config file is correct, "+
|
||||||
|
"remove the other outdated work paths from environment variables and command arguments", setting.CustomConf)
|
||||||
}
|
}
|
||||||
|
|
||||||
rootCfg := setting.CfgProvider
|
rootCfg := setting.CfgProvider
|
||||||
if rootCfg.Section("").Key("WORK_PATH").String() == "" {
|
if rootCfg.Section("").Key("WORK_PATH").String() == "" {
|
||||||
saveCfg, err := rootCfg.PrepareSaving()
|
saveCfg, err := rootCfg.PrepareSaving()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Unable to prepare saving WORK_PATH=%s to config %q: %v\nYou must set it manually, otherwise there might be bugs when accessing the git repositories.", setting.AppWorkPath, setting.CustomConf, err)
|
log.Error("Unable to prepare saving WORK_PATH=%s to config %q: %v\nYou should set it manually, otherwise there might be bugs when accessing the git repositories.", setting.AppWorkPath, setting.CustomConf, err)
|
||||||
} else {
|
} else {
|
||||||
rootCfg.Section("").Key("WORK_PATH").SetValue(setting.AppWorkPath)
|
rootCfg.Section("").Key("WORK_PATH").SetValue(setting.AppWorkPath)
|
||||||
saveCfg.Section("").Key("WORK_PATH").SetValue(setting.AppWorkPath)
|
saveCfg.Section("").Key("WORK_PATH").SetValue(setting.AppWorkPath)
|
||||||
if err = saveCfg.Save(); err != nil {
|
if err = saveCfg.Save(); err != nil {
|
||||||
log.Error("Unable to update WORK_PATH=%s to config %q: %v\nYou must set it manually, otherwise there might be bugs when accessing the git repositories.", setting.AppWorkPath, setting.CustomConf, err)
|
log.Error("Unable to update WORK_PATH=%s to config %q: %v\nYou should set it manually, otherwise there might be bugs when accessing the git repositories.", setting.AppWorkPath, setting.CustomConf, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue