feat(goctl): go work multi-module support (#1800)
* feat(goctl): go work multi-module support Resolve: #1793 * chore: print log when getting project ctx fails
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
package ctx
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/jsonx"
|
||||
"github.com/zeromicro/go-zero/tools/goctl/rpc/execx"
|
||||
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
||||
)
|
||||
@@ -36,16 +39,11 @@ func projectFromGoMod(workDir string) (*ProjectContext, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data, err := execx.Run("go list -json -m", workDir)
|
||||
m, err := getRealModule(workDir, execx.Run)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var m Module
|
||||
err = jsonx.Unmarshal([]byte(data), &m)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var ret ProjectContext
|
||||
ret.WorkDir = workDir
|
||||
ret.Name = filepath.Base(m.Dir)
|
||||
@@ -58,3 +56,34 @@ func projectFromGoMod(workDir string) (*ProjectContext, error) {
|
||||
ret.Path = m.Path
|
||||
return &ret, nil
|
||||
}
|
||||
|
||||
func getRealModule(workDir string, execRun execx.RunFunc) (*Module, error) {
|
||||
data, err := execRun("go list -json -m", workDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
modules, err := decodePackages(strings.NewReader(data))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, m := range modules {
|
||||
if strings.HasPrefix(workDir, m.Dir) {
|
||||
return &m, nil
|
||||
}
|
||||
}
|
||||
return nil, errors.New("no matched module")
|
||||
}
|
||||
|
||||
func decodePackages(rc io.Reader) ([]Module, error) {
|
||||
var modules []Module
|
||||
decoder := json.NewDecoder(rc)
|
||||
for decoder.More() {
|
||||
var m Module
|
||||
if err := decoder.Decode(&m); err != nil {
|
||||
return nil, fmt.Errorf("invalid module: %v", err)
|
||||
}
|
||||
modules = append(modules, m)
|
||||
}
|
||||
|
||||
return modules, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user