opt: improve logx performance (#3371)

This commit is contained in:
Kevin Wan
2023-06-25 15:41:28 +08:00
committed by GitHub
parent 8d23ab158b
commit 92e5819e91
2 changed files with 121 additions and 53 deletions

View File

@@ -77,34 +77,44 @@ func getRealModule(workDir string, execRun execx.RunFunc) (*Module, error) {
if err != nil {
return nil, err
}
modules, err := decodePackages(strings.NewReader(data))
if err != nil {
return nil, err
}
for _, m := range modules {
mRealDir, err := pathx.ReadLink(m.Dir)
realDir, err := pathx.ReadLink(m.Dir)
if err != nil {
return nil, fmt.Errorf("mod dir [%s] error: %w", m.Dir, err)
return nil, fmt.Errorf("failed to read go.mod, dir: %s, error: %w", m.Dir, err)
}
if strings.HasPrefix(workDir, mRealDir) {
if strings.HasPrefix(workDir, realDir) {
return &m, nil
}
}
return nil, errors.New("no matched module")
}
func decodePackages(rc io.Reader) ([]Module, error) {
r := bufio.NewReader(rc)
_, _ = r.ReadSlice('{')
_ = r.UnreadByte()
func decodePackages(reader io.Reader) ([]Module, error) {
br := bufio.NewReader(reader)
if _, err := br.ReadSlice('{'); err != nil {
return nil, err
}
if err := br.UnreadByte(); err != nil {
return nil, err
}
var modules []Module
decoder := json.NewDecoder(r)
decoder := json.NewDecoder(br)
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)
}