diff --git a/pkg/build/goenv.go b/pkg/build/goenv.go index ed9a679..b1278a5 100644 --- a/pkg/build/goenv.go +++ b/pkg/build/goenv.go @@ -1,13 +1,15 @@ package build import ( + "bytes" + "encoding/json" + "io" "os" "os/exec" "path/filepath" "strings" "github.com/qiniu/goc/v2/pkg/config" - "github.com/qiniu/goc/v2/pkg/cover" "github.com/qiniu/goc/v2/pkg/log" ) @@ -17,7 +19,7 @@ func (b *Build) readProjectMetaInfo() { config.GocConfig.GOPATH = b.readGOPATH() config.GocConfig.GOBIN = b.readGOBIN() // 获取当前目录及其依赖的 package list - config.GocConfig.Pkgs = cover.ListPackages(config.GocConfig.CurPkgDir) + config.GocConfig.Pkgs = b.listPackages(config.GocConfig.CurPkgDir) // get mod info pkgs := config.GocConfig.Pkgs @@ -66,3 +68,40 @@ func (b *Build) readGOBIN() string { } return strings.TrimSpace(string(out)) } + +// listPackages list all packages under specific via go list command. +func (b *Build) listPackages(dir string) map[string]*config.Package { + cmd := exec.Command("go", "list", "-json", "./...") + cmd.Dir = dir + + var errBuf bytes.Buffer + cmd.Stderr = &errBuf + out, err := cmd.Output() + if err != nil { + log.Fatalf("execute go list -json failed, err: %v, stdout: %v, stderr: %v", err, string(out), errBuf.String()) + } + // 有些时候 go 命令会打印一些信息到 stderr,但其实命令整体是成功运行了 + if errBuf.String() != "" { + log.Errorf("%v", errBuf.String()) + } + + dec := json.NewDecoder(bytes.NewBuffer(out)) + pkgs := make(map[string]*config.Package, 0) + + for { + var pkg config.Package + if err := dec.Decode(&pkg); err != nil { + if err == io.EOF { + break + } + log.Fatalf("reading go list output error: %v", err) + } + if pkg.Error != nil { + log.Fatalf("list package %s failed with output: %v", pkg.ImportPath, pkg.Error) + } + + pkgs[pkg.ImportPath] = &pkg + } + + return pkgs +} diff --git a/pkg/cover/list.go b/pkg/cover/list.go deleted file mode 100644 index 3b6b8ce..0000000 --- a/pkg/cover/list.go +++ /dev/null @@ -1,56 +0,0 @@ -package cover - -import ( - "bytes" - "encoding/json" - "errors" - "io" - "os/exec" - - "github.com/qiniu/goc/v2/pkg/config" - "github.com/qiniu/goc/v2/pkg/log" -) - -var ( - // ErrCoverPkgFailed represents the error that fails to inject the package - ErrCoverPkgFailed = errors.New("fail to inject code to project") - // ErrCoverListFailed represents the error that fails to list package dependencies - ErrCoverListFailed = errors.New("fail to list package dependencies") -) - -// ListPackages list all packages under specific via go list command. -func ListPackages(dir string) map[string]*config.Package { - cmd := exec.Command("go", "list", "-json", "./...") - cmd.Dir = dir - - var errBuf bytes.Buffer - cmd.Stderr = &errBuf - out, err := cmd.Output() - if err != nil { - log.Fatalf("execute go list -json failed, err: %v, stdout: %v, stderr: %v", err, string(out), errBuf.String()) - } - // 有些时候 go 命令会打印一些信息到 stderr,但其实命令整体是成功运行了 - if errBuf.String() != "" { - log.Errorf("%v", errBuf.String()) - } - - dec := json.NewDecoder(bytes.NewBuffer(out)) - pkgs := make(map[string]*config.Package, 0) - - for { - var pkg config.Package - if err := dec.Decode(&pkg); err != nil { - if err == io.EOF { - break - } - log.Fatalf("reading go list output error: %v", err) - } - if pkg.Error != nil { - log.Fatalf("list package %s failed with output: %v", pkg.ImportPath, pkg.Error) - } - - pkgs[pkg.ImportPath] = &pkg - } - - return pkgs -}