mv listpackages from cover to build package
This commit is contained in:
parent
204fd83a49
commit
79310ccb4d
@ -1,13 +1,15 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/qiniu/goc/v2/pkg/config"
|
"github.com/qiniu/goc/v2/pkg/config"
|
||||||
"github.com/qiniu/goc/v2/pkg/cover"
|
|
||||||
"github.com/qiniu/goc/v2/pkg/log"
|
"github.com/qiniu/goc/v2/pkg/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -17,7 +19,7 @@ func (b *Build) readProjectMetaInfo() {
|
|||||||
config.GocConfig.GOPATH = b.readGOPATH()
|
config.GocConfig.GOPATH = b.readGOPATH()
|
||||||
config.GocConfig.GOBIN = b.readGOBIN()
|
config.GocConfig.GOBIN = b.readGOBIN()
|
||||||
// 获取当前目录及其依赖的 package list
|
// 获取当前目录及其依赖的 package list
|
||||||
config.GocConfig.Pkgs = cover.ListPackages(config.GocConfig.CurPkgDir)
|
config.GocConfig.Pkgs = b.listPackages(config.GocConfig.CurPkgDir)
|
||||||
|
|
||||||
// get mod info
|
// get mod info
|
||||||
pkgs := config.GocConfig.Pkgs
|
pkgs := config.GocConfig.Pkgs
|
||||||
@ -66,3 +68,40 @@ func (b *Build) readGOBIN() string {
|
|||||||
}
|
}
|
||||||
return strings.TrimSpace(string(out))
|
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
|
||||||
|
}
|
||||||
|
@ -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
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user