internal: move IncludeStderr
Move the IncludeStderr function from internal/log to internal/derrors.
Change-Id: I65823d484cbf749eb442b5ba8d0499f01c3363b0
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/471095
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Zvonimir Pavlinovic <zpavlinovic@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
diff --git a/cmd/vulncheck_sandbox/vulncheck_sandbox_test.go b/cmd/vulncheck_sandbox/vulncheck_sandbox_test.go
index 87a178d..7dbe9bc 100644
--- a/cmd/vulncheck_sandbox/vulncheck_sandbox_test.go
+++ b/cmd/vulncheck_sandbox/vulncheck_sandbox_test.go
@@ -15,7 +15,7 @@
"testing"
"golang.org/x/exp/slices"
- "golang.org/x/pkgsite-metrics/internal/log"
+ "golang.org/x/pkgsite-metrics/internal/derrors"
"golang.org/x/pkgsite-metrics/internal/worker"
"golang.org/x/vuln/vulncheck"
)
@@ -49,7 +49,7 @@
cmd := exec.Command("go build")
cmd.Dir = "testdata/module"
if _, err := cmd.Output(); err != nil {
- t.Fatal(log.IncludeStderr(err))
+ t.Fatal(derrors.IncludeStderr(err))
}
defer os.Remove(binary)
res, err := runTest([]string{worker.ModeBinary, binary}, "testdata/vulndb")
diff --git a/internal/derrors/derrors.go b/internal/derrors/derrors.go
index 2e00c86..0a89df7 100644
--- a/internal/derrors/derrors.go
+++ b/internal/derrors/derrors.go
@@ -7,8 +7,10 @@
package derrors
import (
+ "bytes"
"errors"
"fmt"
+ "os/exec"
"runtime"
"strings"
@@ -204,3 +206,13 @@
func IsGoVersionMismatchError(msg string) bool {
return strings.Contains(msg, "can't be built on Go")
}
+
+// IncludeStderr includes the stderr with an *exec.ExitError.
+// If err is not an *exec.ExitError, it returns err.Error().
+func IncludeStderr(err error) string {
+ var eerr *exec.ExitError
+ if errors.As(err, &eerr) {
+ return fmt.Sprintf("%v: %s", eerr, bytes.TrimSpace(eerr.Stderr))
+ }
+ return err.Error()
+}
diff --git a/internal/log/log.go b/internal/log/log.go
index 778fdab..7976bcf 100644
--- a/internal/log/log.go
+++ b/internal/log/log.go
@@ -6,14 +6,11 @@
package log
import (
- "bytes"
"context"
- "errors"
"fmt"
"io"
"log"
"os"
- "os/exec"
"reflect"
"strings"
"sync"
@@ -283,13 +280,3 @@
log.Printf("Error: %s is invalid LogLevel. Possible values are [debug, info, warning, error, fatal]", v)
return logging.Default
}
-
-// IncludeStderr includes the stderr with an *exec.ExitError.
-// If err is not an *exec.ExitError, it returns err.Error().
-func IncludeStderr(err error) string {
- var eerr *exec.ExitError
- if errors.As(err, &eerr) {
- return fmt.Sprintf("%v: %s", eerr, bytes.TrimSpace(eerr.Stderr))
- }
- return err.Error()
-}
diff --git a/internal/sandbox/sandbox_test.go b/internal/sandbox/sandbox_test.go
index b396652..af240fa 100644
--- a/internal/sandbox/sandbox_test.go
+++ b/internal/sandbox/sandbox_test.go
@@ -12,7 +12,7 @@
"strings"
"testing"
- "golang.org/x/pkgsite-metrics/internal/log"
+ "golang.org/x/pkgsite-metrics/internal/derrors"
)
// These tests require a minimal bundle, in testdata/bundle.
@@ -32,7 +32,7 @@
t.Run("printargs", func(t *testing.T) {
out, err := sb.Run(ctx, "/printargs", "a", "b")
if err != nil {
- t.Fatal(log.IncludeStderr(err))
+ t.Fatal(derrors.IncludeStderr(err))
}
want := `args:
diff --git a/internal/worker/analysis.go b/internal/worker/analysis.go
index 1cc42d1..e9fa08e 100644
--- a/internal/worker/analysis.go
+++ b/internal/worker/analysis.go
@@ -150,7 +150,7 @@
cmd.Dir = moduleDir
out, err := cmd.Output()
if err != nil {
- return nil, fmt.Errorf("running analysis binary %s: %s", binaryPath, log.IncludeStderr(err))
+ return nil, fmt.Errorf("running analysis binary %s: %s", binaryPath, derrors.IncludeStderr(err))
}
var tree JSONTree
if err := json.Unmarshal(out, &tree); err != nil {
diff --git a/internal/worker/vulncheck_scan.go b/internal/worker/vulncheck_scan.go
index 4d288e6..5068d2b 100644
--- a/internal/worker/vulncheck_scan.go
+++ b/internal/worker/vulncheck_scan.go
@@ -334,13 +334,13 @@
_, err := cmd.Output()
if err != nil {
return nil, fmt.Errorf("%w: 'go mod download' for %s@%s returned %s",
- derrors.BadModule, modulePath, version, log.IncludeStderr(err))
+ derrors.BadModule, modulePath, version, derrors.IncludeStderr(err))
}
log.Infof(ctx, "go mod download succeeded")
log.Infof(ctx, "%s@%s: running vulncheck in sandbox", modulePath, version)
stdout, err := sbox.Run(ctx, "/binaries/vulncheck_sandbox", "-gomodcache", "/"+sandboxGoModCache, mode, sandboxDir)
if err != nil {
- return nil, errors.New(log.IncludeStderr(err))
+ return nil, errors.New(derrors.IncludeStderr(err))
}
return stdout, nil
}
@@ -366,7 +366,7 @@
log.Infof(ctx, "%s@%s/%s: running vulncheck in sandbox on %s", modulePath, version, binDir, destf.Name())
stdout, err := s.sbox.Run(ctx, "/binaries/vulncheck_sandbox", ModeBinary, destf.Name())
if err != nil {
- return nil, errors.New(log.IncludeStderr(err))
+ return nil, errors.New(derrors.IncludeStderr(err))
}
return unmarshalVulncheckOutput(stdout)
}
@@ -747,7 +747,7 @@
out, err = s.sbox.Run(ctx, "/binaries/vulncheck_sandbox", "-gomodcache", "/"+sandboxGoModCache, "-clean")
}
if err != nil {
- return fmt.Errorf("cleaning Go caches: %s", log.IncludeStderr(err))
+ return fmt.Errorf("cleaning Go caches: %s", derrors.IncludeStderr(err))
}
output := ""
if len(out) > 0 {