Jelajahi Sumber

fix issue #831 (#850)

* fix issue #831

* fix typo

Co-authored-by: anqiansong <anqiansong@xiaoheiban.cn>
anqiansong 3 tahun lalu
induk
melakukan
9f4a882a1b

+ 4 - 0
tools/goctl/api/gogen/gen.go

@@ -30,7 +30,11 @@ func GoCommand(c *cli.Context) error {
 	apiFile := c.String("api")
 	dir := c.String("dir")
 	namingStyle := c.String("style")
+	home := c.String("home")
 
+	if len(home) > 0 {
+		util.RegisterGoctlHome(home)
+	}
 	if len(apiFile) == 0 {
 		return errors.New("missing -api")
 	}

+ 6 - 0
tools/goctl/docker/docker.go

@@ -42,6 +42,12 @@ func DockerCommand(c *cli.Context) (err error) {
 	}()
 
 	goFile := c.String("go")
+	home := c.String("home")
+
+	if len(home) > 0 {
+		util.RegisterGoctlHome(home)
+	}
+
 	if len(goFile) == 0 {
 		return errors.New("-go can't be empty")
 	}

+ 60 - 4
tools/goctl/goctl.go

@@ -117,6 +117,10 @@ var (
 							Name:  "style",
 							Usage: "the file naming format, see [https://github.com/tal-tech/go-zero/tree/master/tools/goctl/config/readme.md]",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: gogen.GoCommand,
 				},
@@ -234,6 +238,10 @@ var (
 					Usage: "the port to expose, default none",
 					Value: 0,
 				},
+				cli.StringFlag{
+					Name:  "home",
+					Usage: "the goctl home path of the template",
+				},
 			},
 			Action: docker.DockerCommand,
 		},
@@ -319,6 +327,10 @@ var (
 							Usage: "the max replicas of deploy",
 							Value: 10,
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: kube.DeploymentCommand,
 				},
@@ -340,6 +352,10 @@ var (
 							Name:  "idea",
 							Usage: "whether the command execution environment is from idea plugin. [optional]",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: rpc.RPCNew,
 				},
@@ -382,6 +398,10 @@ var (
 							Name:  "idea",
 							Usage: "whether the command execution environment is from idea plugin. [optional]",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: rpc.RPC,
 				},
@@ -423,6 +443,10 @@ var (
 									Name:  "database, db",
 									Usage: "the name of database [optional]",
 								},
+								cli.StringFlag{
+									Name:  "home",
+									Usage: "the goctl home path of the template",
+								},
 							},
 							Action: model.MysqlDDL,
 						},
@@ -454,6 +478,10 @@ var (
 									Name:  "idea",
 									Usage: "for idea plugin [optional]",
 								},
+								cli.StringFlag{
+									Name:  "home",
+									Usage: "the goctl home path of the template",
+								},
 							},
 							Action: model.MySqlDataSource,
 						},
@@ -495,6 +523,10 @@ var (
 									Name:  "idea",
 									Usage: "for idea plugin [optional]",
 								},
+								cli.StringFlag{
+									Name:  "home",
+									Usage: "the goctl home path of the template",
+								},
 							},
 							Action: model.PostgreSqlDataSource,
 						},
@@ -520,6 +552,10 @@ var (
 							Name:  "style",
 							Usage: "the file naming format, see [https://github.com/tal-tech/go-zero/tree/master/tools/goctl/config/readme.md]",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: mongo.Action,
 				},
@@ -541,13 +577,25 @@ var (
 			Usage: "template operation",
 			Subcommands: []cli.Command{
 				{
-					Name:   "init",
-					Usage:  "initialize the all templates(force update)",
+					Name:  "init",
+					Usage: "initialize the all templates(force update)",
+					Flags: []cli.Flag{
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
+					},
 					Action: tpl.GenTemplates,
 				},
 				{
-					Name:   "clean",
-					Usage:  "clean the all cache templates",
+					Name:  "clean",
+					Usage: "clean the all cache templates",
+					Flags: []cli.Flag{
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
+					},
 					Action: tpl.CleanTemplates,
 				},
 				{
@@ -558,6 +606,10 @@ var (
 							Name:  "category,c",
 							Usage: "the category of template, enum [api,rpc,model,docker,kube]",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: tpl.UpdateTemplates,
 				},
@@ -573,6 +625,10 @@ var (
 							Name:  "name,n",
 							Usage: "the target file name of template",
 						},
+						cli.StringFlag{
+							Name:  "home",
+							Usage: "the goctl home path of the template",
+						},
 					},
 					Action: tpl.RevertTemplates,
 				},

+ 6 - 0
tools/goctl/kube/kube.go

@@ -40,6 +40,12 @@ type Deployment struct {
 // DeploymentCommand is used to generate the kubernetes deployment yaml files.
 func DeploymentCommand(c *cli.Context) error {
 	nodePort := c.Int("nodePort")
+	home := c.String("home")
+
+	if len(home) > 0 {
+		util.RegisterGoctlHome(home)
+	}
+
 	// 0 to disable the nodePort type
 	if nodePort != 0 && (nodePort < basePort || nodePort > portLimit) {
 		return errors.New("nodePort should be between 30000 and 32767")

+ 7 - 0
tools/goctl/model/mongo/mongo.go

@@ -7,6 +7,7 @@ import (
 
 	"github.com/tal-tech/go-zero/tools/goctl/config"
 	"github.com/tal-tech/go-zero/tools/goctl/model/mongo/generate"
+	file "github.com/tal-tech/go-zero/tools/goctl/util"
 	"github.com/urfave/cli"
 )
 
@@ -16,6 +17,12 @@ func Action(ctx *cli.Context) error {
 	c := ctx.Bool("cache")
 	o := strings.TrimSpace(ctx.String("dir"))
 	s := ctx.String("style")
+	home := ctx.String("home")
+
+	if len(home) > 0 {
+		file.RegisterGoctlHome(home)
+	}
+
 	if len(tp) == 0 {
 		return errors.New("missing type")
 	}

+ 18 - 0
tools/goctl/model/sql/command/command.go

@@ -13,6 +13,7 @@ import (
 	"github.com/tal-tech/go-zero/tools/goctl/model/sql/gen"
 	"github.com/tal-tech/go-zero/tools/goctl/model/sql/model"
 	"github.com/tal-tech/go-zero/tools/goctl/model/sql/util"
+	file "github.com/tal-tech/go-zero/tools/goctl/util"
 	"github.com/tal-tech/go-zero/tools/goctl/util/console"
 	"github.com/urfave/cli"
 )
@@ -39,6 +40,11 @@ func MysqlDDL(ctx *cli.Context) error {
 	idea := ctx.Bool(flagIdea)
 	style := ctx.String(flagStyle)
 	database := ctx.String(flagDatabase)
+	home := ctx.String("home")
+
+	if len(home) > 0 {
+		file.RegisterGoctlHome(home)
+	}
 	cfg, err := config.NewConfig(style)
 	if err != nil {
 		return err
@@ -54,6 +60,12 @@ func MySqlDataSource(ctx *cli.Context) error {
 	cache := ctx.Bool(flagCache)
 	idea := ctx.Bool(flagIdea)
 	style := ctx.String(flagStyle)
+	home := ctx.String("home")
+
+	if len(home) > 0 {
+		file.RegisterGoctlHome(home)
+	}
+
 	pattern := strings.TrimSpace(ctx.String(flagTable))
 	cfg, err := config.NewConfig(style)
 	if err != nil {
@@ -71,6 +83,12 @@ func PostgreSqlDataSource(ctx *cli.Context) error {
 	idea := ctx.Bool(flagIdea)
 	style := ctx.String(flagStyle)
 	schema := ctx.String(flagSchema)
+	home := ctx.String("home")
+
+	if len(home) > 0 {
+		file.RegisterGoctlHome(home)
+	}
+
 	if len(schema) == 0 {
 		schema = "public"
 	}

+ 13 - 0
tools/goctl/rpc/cli/cli.go

@@ -6,6 +6,7 @@ import (
 	"path/filepath"
 
 	"github.com/tal-tech/go-zero/tools/goctl/rpc/generator"
+	"github.com/tal-tech/go-zero/tools/goctl/util"
 	"github.com/urfave/cli"
 )
 
@@ -18,9 +19,16 @@ func RPC(c *cli.Context) error {
 	style := c.String("style")
 	protoImportPath := c.StringSlice("proto_path")
 	goOptions := c.StringSlice("go_opt")
+	home := c.String("home")
+
+	if len(home) > 0 {
+		util.RegisterGoctlHome(home)
+	}
+
 	if len(src) == 0 {
 		return errors.New("missing -src")
 	}
+
 	if len(out) == 0 {
 		return errors.New("missing -dir")
 	}
@@ -42,6 +50,11 @@ func RPCNew(c *cli.Context) error {
 		return fmt.Errorf("unexpected ext: %s", ext)
 	}
 	style := c.String("style")
+	home := c.String("home")
+
+	if len(home) > 0 {
+		util.RegisterGoctlHome(home)
+	}
 
 	protoName := rpcname + ".proto"
 	filename := filepath.Join(".", rpcname, protoName)

+ 28 - 2
tools/goctl/tpl/templates.go

@@ -2,6 +2,7 @@ package tpl
 
 import (
 	"fmt"
+	"path/filepath"
 
 	"github.com/logrusorgru/aurora"
 	"github.com/tal-tech/go-zero/core/errorx"
@@ -19,6 +20,11 @@ const templateParentPath = "/"
 
 // GenTemplates writes the latest template text into file which is not exists
 func GenTemplates(ctx *cli.Context) error {
+	path := ctx.String("home")
+	if len(path) != 0 {
+		util.RegisterGoctlHome(path)
+	}
+
 	if err := errorx.Chain(
 		func() error {
 			return gogen.GenTemplates(ctx)
@@ -47,14 +53,24 @@ func GenTemplates(ctx *cli.Context) error {
 		return err
 	}
 
-	fmt.Printf("Templates are generated in %s, %s\n", aurora.Green(dir),
+	abs, err := filepath.Abs(dir)
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf("Templates are generated in %s, %s\n", aurora.Green(abs),
 		aurora.Red("edit on your risk!"))
 
 	return nil
 }
 
 // CleanTemplates deletes all templates
-func CleanTemplates(_ *cli.Context) error {
+func CleanTemplates(ctx *cli.Context) error {
+	path := ctx.String("home")
+	if len(path) != 0 {
+		util.RegisterGoctlHome(path)
+	}
+
 	err := errorx.Chain(
 		func() error {
 			return gogen.Clean()
@@ -86,7 +102,12 @@ func CleanTemplates(_ *cli.Context) error {
 // UpdateTemplates writes the latest template text into file,
 // it will delete the older templates if there are exists
 func UpdateTemplates(ctx *cli.Context) (err error) {
+	path := ctx.String("home")
 	category := ctx.String("category")
+	if len(path) != 0 {
+		util.RegisterGoctlHome(path)
+	}
+
 	defer func() {
 		if err == nil {
 			fmt.Println(aurora.Green(fmt.Sprintf("%s template are update!", category)).String())
@@ -113,8 +134,13 @@ func UpdateTemplates(ctx *cli.Context) (err error) {
 
 // RevertTemplates will overwrite the old template content with the new template
 func RevertTemplates(ctx *cli.Context) (err error) {
+	path := ctx.String("home")
 	category := ctx.String("category")
 	filename := ctx.String("name")
+	if len(path) != 0 {
+		util.RegisterGoctlHome(path)
+	}
+
 	defer func() {
 		if err == nil {
 			fmt.Println(aurora.Green(fmt.Sprintf("%s template are reverted!", filename)).String())

+ 10 - 0
tools/goctl/util/file.go

@@ -17,6 +17,12 @@ const (
 	goctlDir = ".goctl"
 )
 
+var goctlHome string
+
+func RegisterGoctlHome(home string) {
+	goctlHome = home
+}
+
 // CreateIfNotExist creates a file if it is not exists
 func CreateIfNotExist(file string) (*os.File, error) {
 	_, err := os.Stat(file)
@@ -62,6 +68,10 @@ func FileNameWithoutExt(file string) string {
 
 // GetGoctlHome returns the path value of the goctl home where Join $HOME with .goctl
 func GetGoctlHome() (string, error) {
+	if len(goctlHome) != 0 {
+		return goctlHome, nil
+	}
+
 	home, err := os.UserHomeDir()
 	if err != nil {
 		return "", err