From 1602f6ce8172f18e28770db73031727db465c9f4 Mon Sep 17 00:00:00 2001 From: kingxt Date: Mon, 7 Sep 2020 18:04:59 +0800 Subject: [PATCH] refactor gomod logic (#47) * rebase upstream * rebase * trim no need line * trim no need line * trim no need line * refactor gomod module logic Co-authored-by: kingxt --- tools/goctl/api/gogen/util.go | 26 ++---------- tools/goctl/rpc/ctx/ctx.go | 3 +- .../{rpc/ctx => util/project}/project.go | 40 ++++++++++--------- 3 files changed, 26 insertions(+), 43 deletions(-) rename tools/goctl/{rpc/ctx => util/project}/project.go (75%) diff --git a/tools/goctl/api/gogen/util.go b/tools/goctl/api/gogen/util.go index 5b21e9d6..5f82a2ae 100644 --- a/tools/goctl/api/gogen/util.go +++ b/tools/goctl/api/gogen/util.go @@ -4,41 +4,21 @@ import ( "fmt" goformat "go/format" "io" - "os" - "path" - "path/filepath" "strings" "github.com/tal-tech/go-zero/core/collection" "github.com/tal-tech/go-zero/tools/goctl/api/spec" "github.com/tal-tech/go-zero/tools/goctl/api/util" - goctlutil "github.com/tal-tech/go-zero/tools/goctl/util" + "github.com/tal-tech/go-zero/tools/goctl/util/project" ) func getParentPackage(dir string) (string, error) { - absDir, err := filepath.Abs(dir) + p, err := project.Prepare(dir, false) if err != nil { return "", err } - absDir = strings.ReplaceAll(absDir, `\`, `/`) - rootPath, hasGoMod := goctlutil.FindGoModPath(dir) - if hasGoMod { - return rootPath, nil - } - - gopath := os.Getenv("GOPATH") - parent := path.Join(gopath, "src") - pos := strings.Index(absDir, parent) - if pos < 0 { - fmt.Printf("%s not in go.mod project path, or not in GOPATH of %s directory\n", absDir, gopath) - tempPath := filepath.Dir(absDir) - rootPath = absDir[len(tempPath)+1:] - } else { - rootPath = absDir[len(parent)+1:] - } - - return rootPath, nil + return p.GoMod.Module, nil } func writeIndent(writer io.Writer, indent int) { diff --git a/tools/goctl/rpc/ctx/ctx.go b/tools/goctl/rpc/ctx/ctx.go index 4610a585..f48f35b4 100644 --- a/tools/goctl/rpc/ctx/ctx.go +++ b/tools/goctl/rpc/ctx/ctx.go @@ -9,6 +9,7 @@ import ( "github.com/tal-tech/go-zero/core/logx" "github.com/tal-tech/go-zero/tools/goctl/util" "github.com/tal-tech/go-zero/tools/goctl/util/console" + "github.com/tal-tech/go-zero/tools/goctl/util/project" "github.com/tal-tech/go-zero/tools/goctl/util/stringx" "github.com/urfave/cli" ) @@ -34,7 +35,7 @@ type RpcContext struct { func MustCreateRpcContext(protoSrc, targetDir, serviceName string, idea bool) *RpcContext { log := console.NewConsole(idea) - info, err := prepare(log) + info, err := project.Prepare(targetDir, true) log.Must(err) if stringx.From(protoSrc).IsEmptyOrSpace() { diff --git a/tools/goctl/rpc/ctx/project.go b/tools/goctl/util/project/project.go similarity index 75% rename from tools/goctl/rpc/ctx/project.go rename to tools/goctl/util/project/project.go index 550038a9..ff5b4117 100644 --- a/tools/goctl/rpc/ctx/project.go +++ b/tools/goctl/util/project/project.go @@ -1,7 +1,6 @@ -package ctx +package project import ( - "fmt" "io/ioutil" "os" "os/exec" @@ -10,7 +9,6 @@ import ( "strings" "github.com/tal-tech/go-zero/tools/goctl/rpc/execx" - "github.com/tal-tech/go-zero/tools/goctl/util/console" ) const ( @@ -33,20 +31,22 @@ type ( } ) -func prepare(log console.Console) (*Project, error) { - log.Info("checking go env...") +func Prepare(projectDir string, checkGrpcEnv bool) (*Project, error) { _, err := exec.LookPath(constGo) if err != nil { return nil, err } - _, err = exec.LookPath(constProtoC) - if err != nil { - return nil, err - } - _, err = exec.LookPath(constProtoCGenGo) - if err != nil { - return nil, err + if checkGrpcEnv { + _, err = exec.LookPath(constProtoC) + if err != nil { + return nil, err + } + + _, err = exec.LookPath(constProtoCGenGo) + if err != nil { + return nil, err + } } var ( @@ -87,14 +87,16 @@ func prepare(log console.Console) (*Project, error) { } if !strings.HasPrefix(pwd, src) { - return nil, fmt.Errorf("%s: project is not in go mod and go path", pwd) - } - r := strings.TrimPrefix(pwd, src+string(filepath.Separator)) - name = filepath.Dir(r) - if name == "." { - name = r + name = filepath.Clean(filepath.Base(projectDir)) + path = projectDir + } else { + r := strings.TrimPrefix(pwd, src+string(filepath.Separator)) + name = filepath.Dir(r) + if name == "." { + name = r + } + path = filepath.Join(src, name) } - path = filepath.Join(src, name) module = name }