diff --git a/jit/go_cmd.go b/jit/go_cmd.go index 6288f370..8537e330 100644 --- a/jit/go_cmd.go +++ b/jit/go_cmd.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding/json" "fmt" - "io" "log" "os" "os/exec" @@ -173,30 +172,21 @@ func GoListStd(goCmd string) map[string]struct{} { func GoList(goCmd, absPath, workDir string, verbose bool) (*Package, error) { golistCmd := exec.Command(goCmd, "list", "-json", absPath) golistCmd.Dir = workDir - stdoutReader, stdoutWriter := io.Pipe() - stdErrBuf := &bytes.Buffer{} - if verbose { - golistCmd.Stdout = stdoutWriter - golistCmd.Stderr = io.MultiWriter(os.Stderr, stdErrBuf) - } else { - golistCmd.Stdout = stdoutWriter - golistCmd.Stderr = stdErrBuf - } - listDec := json.NewDecoder(stdoutReader) - err := golistCmd.Start() - if err != nil { - return nil, fmt.Errorf("failed to start 'go list -json %s': %w\nstderr:\n%s", absPath, err, stdErrBuf.String()) - } + + stdoutBuf, stdErrBuf := &bytes.Buffer{}, &bytes.Buffer{} + + golistCmd.Stdout = stdoutBuf + golistCmd.Stderr = stdErrBuf pkg := Package{} - err = listDec.Decode(&pkg) + + err := golistCmd.Run() if err != nil { - return nil, fmt.Errorf("failed to decode response of 'go list -json %s': %w\nstderr:\n%s", absPath, err, stdErrBuf.String()) + return nil, fmt.Errorf("failed to run 'go list -json %s': %w\nstderr:\n%s", absPath, err, stdErrBuf.String()) } - err = golistCmd.Wait() + err = json.Unmarshal(stdoutBuf.Bytes(), &pkg) if err != nil { - return nil, fmt.Errorf("failed to wait for 'go list -json %s': %w\nstderr:\n%s", absPath, err, stdErrBuf.String()) + return nil, fmt.Errorf("failed to decode response of 'go list -json %s': %w\nstderr:\n%s", absPath, err, stdErrBuf.String()) } - if len(pkg.GoFiles)+len(pkg.CgoFiles) == 0 { return nil, fmt.Errorf("no Go files found in directory %s", absPath) } diff --git a/jit/jit_test.go b/jit/jit_test.go index f4178023..8d573429 100644 --- a/jit/jit_test.go +++ b/jit/jit_test.go @@ -1478,6 +1478,7 @@ func TestK8s(t *testing.T) { } conf := baseConfig + conf.DebugLog = true conf.UnsafeBlindlyUseFirstmoduleTypes = true data := testData{ files: []string{"./testdata/test_k8s/test.go"},