123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package cmd
- import (
- _ "embed"
- "fmt"
- "os"
- "runtime"
- "strings"
- "text/template"
- "github.com/gookit/color"
- "github.com/spf13/cobra"
- "github.com/withfig/autocomplete-tools/integrations/cobra"
- "github.com/zeromicro/go-zero/tools/goctl/api"
- "github.com/zeromicro/go-zero/tools/goctl/bug"
- "github.com/zeromicro/go-zero/tools/goctl/docker"
- "github.com/zeromicro/go-zero/tools/goctl/env"
- "github.com/zeromicro/go-zero/tools/goctl/gateway"
- "github.com/zeromicro/go-zero/tools/goctl/internal/cobrax"
- "github.com/zeromicro/go-zero/tools/goctl/internal/version"
- "github.com/zeromicro/go-zero/tools/goctl/kube"
- "github.com/zeromicro/go-zero/tools/goctl/migrate"
- "github.com/zeromicro/go-zero/tools/goctl/model"
- "github.com/zeromicro/go-zero/tools/goctl/quickstart"
- "github.com/zeromicro/go-zero/tools/goctl/rpc"
- "github.com/zeromicro/go-zero/tools/goctl/tpl"
- "github.com/zeromicro/go-zero/tools/goctl/upgrade"
- )
- const (
- codeFailure = 1
- dash = "-"
- doubleDash = "--"
- assign = "="
- )
- var (
- //go:embed usage.tpl
- usageTpl string
- rootCmd = cobrax.NewCommand("goctl")
- )
- // Execute executes the given command
- func Execute() {
- os.Args = supportGoStdFlag(os.Args)
- if err := rootCmd.Execute(); err != nil {
- fmt.Println(color.Red.Render(err.Error()))
- os.Exit(codeFailure)
- }
- }
- func supportGoStdFlag(args []string) []string {
- copyArgs := append([]string(nil), args...)
- parentCmd, _, err := rootCmd.Traverse(args[:1])
- if err != nil { // ignore it to let cobra handle the error.
- return copyArgs
- }
- for idx, arg := range copyArgs[0:] {
- parentCmd, _, err = parentCmd.Traverse([]string{arg})
- if err != nil { // ignore it to let cobra handle the error.
- break
- }
- if !strings.HasPrefix(arg, dash) {
- continue
- }
- flagExpr := strings.TrimPrefix(arg, doubleDash)
- flagExpr = strings.TrimPrefix(flagExpr, dash)
- flagName, flagValue := flagExpr, ""
- assignIndex := strings.Index(flagExpr, assign)
- if assignIndex > 0 {
- flagName = flagExpr[:assignIndex]
- flagValue = flagExpr[assignIndex:]
- }
- if !isBuiltin(flagName) {
- // The method Flag can only match the user custom flags.
- f := parentCmd.Flag(flagName)
- if f == nil {
- continue
- }
- if f.Shorthand == flagName {
- continue
- }
- }
- goStyleFlag := doubleDash + flagName
- if assignIndex > 0 {
- goStyleFlag += flagValue
- }
- copyArgs[idx] = goStyleFlag
- }
- return copyArgs
- }
- func isBuiltin(name string) bool {
- return name == "version" || name == "help"
- }
- func init() {
- cobra.AddTemplateFuncs(template.FuncMap{
- "blue": blue,
- "green": green,
- "rpadx": rpadx,
- "rainbow": rainbow,
- })
- rootCmd.Version = fmt.Sprintf(
- "%s %s/%s", version.BuildVersion,
- runtime.GOOS, runtime.GOARCH)
- rootCmd.SetUsageTemplate(usageTpl)
- rootCmd.AddCommand(api.Cmd, bug.Cmd, docker.Cmd, kube.Cmd, env.Cmd, gateway.Cmd, model.Cmd)
- rootCmd.AddCommand(migrate.Cmd, quickstart.Cmd, rpc.Cmd, tpl.Cmd, upgrade.Cmd)
- rootCmd.Command.AddCommand(cobracompletefig.CreateCompletionSpecCommand())
- rootCmd.MustInit()
- }
|