mirror of
https://github.com/golang/go
synced 2024-11-18 20:04:52 -07:00
go/packages: make cache names predictable in tests
Check for the go-build subdirectory to identify a filepath in the go build cache. The go command uses a subdirectory of the default os cache called "go-build" for the build cache. Additionally, this responds to the comments about function names and tests in the following CLs: https://golang.org/cl/125536 https://golang.org/cl/125302 Fixes https://github.com/golang/go/issues/26387 Change-Id: I4ec65822e1e178d3de215a773e42f09fcc5bdb0d Reviewed-on: https://go-review.googlesource.com/128360 Run-TryBot: Suzy Mueller <suzmue@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com> Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
ca6481ae56
commit
e832138124
@ -149,7 +149,7 @@ func golistPackagesFallback(ctx context.Context, cfg *raw.Config, words ...strin
|
||||
return roots, result, nil
|
||||
}
|
||||
|
||||
buf, err := golist(ctx, cfg, golistargs_fallback(cfg, deps))
|
||||
buf, err := golist(ctx, cfg, golistArgsFallback(cfg, deps))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@ -169,7 +169,7 @@ func golistPackagesFallback(ctx context.Context, cfg *raw.Config, words ...strin
|
||||
|
||||
// getDeps runs an initial go list to determine all the dependency packages.
|
||||
func getDeps(ctx context.Context, cfg *raw.Config, words ...string) (originalSet map[string]*jsonPackage, deps []string, err error) {
|
||||
buf, err := golist(ctx, cfg, golistargs_fallback(cfg, words))
|
||||
buf, err := golist(ctx, cfg, golistArgsFallback(cfg, words))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@ -203,7 +203,7 @@ func getDeps(ctx context.Context, cfg *raw.Config, words ...string) (originalSet
|
||||
}
|
||||
// Get the deps of the packages imported by tests.
|
||||
if len(testImports) > 0 {
|
||||
buf, err = golist(ctx, cfg, golistargs_fallback(cfg, testImports))
|
||||
buf, err = golist(ctx, cfg, golistArgsFallback(cfg, testImports))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@ -230,7 +230,7 @@ func getDeps(ctx context.Context, cfg *raw.Config, words ...string) (originalSet
|
||||
return originalSet, deps, nil
|
||||
}
|
||||
|
||||
func golistargs_fallback(cfg *raw.Config, words []string) []string {
|
||||
func golistArgsFallback(cfg *raw.Config, words []string) []string {
|
||||
fullargs := []string{"list", "-e", "-json"}
|
||||
fullargs = append(fullargs, cfg.Flags...)
|
||||
fullargs = append(fullargs, "--")
|
||||
|
@ -15,7 +15,6 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
@ -47,9 +46,6 @@ var usesOldGolist = false
|
||||
// - test typechecking of generated test main and cgo.
|
||||
|
||||
func TestLoadImportsGraph(t *testing.T) {
|
||||
if runtime.GOOS != "linux" {
|
||||
t.Skipf("TODO: skipping on non-Linux; fix this test to run everywhere. golang.org/issue/26387")
|
||||
}
|
||||
tmp, cleanup := makeTree(t, map[string]string{
|
||||
"src/a/a.go": `package a; const A = 1`,
|
||||
"src/b/b.go": `package b; import ("a"; _ "errors"); var B = a.A`,
|
||||
@ -390,12 +386,12 @@ package b`,
|
||||
pattern string
|
||||
tags []string
|
||||
wantSrcs string
|
||||
wantImportSrcs map[string]string
|
||||
wantImportSrcs string
|
||||
}{
|
||||
{`a`, []string{}, "a.go", map[string]string{"a/b": "a.go"}},
|
||||
{`a`, []string{`-tags=tag`}, "a.go b.go c.go", map[string]string{"a/b": "a.go b.go"}},
|
||||
{`a`, []string{`-tags=tag2`}, "a.go c.go", map[string]string{"a/b": "a.go"}},
|
||||
{`a`, []string{`-tags=tag tag2`}, "a.go b.go c.go d.go", map[string]string{"a/b": "a.go b.go"}},
|
||||
{`a`, []string{}, "a.go", "a.go"},
|
||||
{`a`, []string{`-tags=tag`}, "a.go b.go c.go", "a.go b.go"},
|
||||
{`a`, []string{`-tags=tag2`}, "a.go c.go", "a.go"},
|
||||
{`a`, []string{`-tags=tag tag2`}, "a.go b.go c.go d.go", "a.go b.go"},
|
||||
} {
|
||||
cfg := &packages.Config{
|
||||
Mode: packages.LoadFiles,
|
||||
@ -406,19 +402,22 @@ package b`,
|
||||
initial, err := packages.Load(cfg, test.pattern)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
continue
|
||||
}
|
||||
if len(initial) != 1 {
|
||||
t.Fatalf("test tags %v: pattern %s, expected 1 package, got %d packages.", test.tags, test.pattern, len(initial))
|
||||
t.Errorf("test tags %v: pattern %s, expected 1 package, got %d packages.", test.tags, test.pattern, len(initial))
|
||||
continue
|
||||
}
|
||||
pkg := initial[0]
|
||||
if srcs := strings.Join(srcs(pkg), " "); srcs != test.wantSrcs {
|
||||
t.Errorf("test tags %v: srcs of package %s = [%s], want [%s]", test.tags, test.pattern, srcs, test.wantSrcs)
|
||||
}
|
||||
for path, ipkg := range pkg.Imports {
|
||||
if srcs := strings.Join(srcs(ipkg), " "); srcs != test.wantImportSrcs[path] {
|
||||
t.Errorf("build tags %v: srcs of imported package %s = [%s], want [%s]", test.tags, path, srcs, test.wantImportSrcs[path])
|
||||
if srcs := strings.Join(srcs(ipkg), " "); srcs != test.wantImportSrcs {
|
||||
t.Errorf("build tags %v: srcs of imported package %s = [%s], want [%s]", test.tags, path, srcs, test.wantImportSrcs)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -433,7 +432,7 @@ func (ec *errCollector) add(err error) {
|
||||
ec.mu.Unlock()
|
||||
}
|
||||
|
||||
func TestTypeCheckOK(t *testing.T) {
|
||||
func TestLoadSyntaxOK(t *testing.T) {
|
||||
tmp, cleanup := makeTree(t, map[string]string{
|
||||
"src/a/a.go": `package a; import "b"; const A = "a" + b.B`,
|
||||
"src/b/b.go": `package b; import "c"; const B = "b" + c.C`,
|
||||
@ -519,7 +518,7 @@ func TestTypeCheckOK(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTypeCheckError(t *testing.T) {
|
||||
func TestLoadSyntaxError(t *testing.T) {
|
||||
// A type error in a lower-level package (e) prevents go list
|
||||
// from producing export data for all packages that depend on it
|
||||
// [a-e]. Export data is only required for package d, so package
|
||||
@ -610,7 +609,7 @@ func TestTypeCheckError(t *testing.T) {
|
||||
|
||||
// This function tests use of the ParseFile hook to supply
|
||||
// alternative file contents to the parser and type-checker.
|
||||
func TestWholeProgramOverlay(t *testing.T) {
|
||||
func TestLoadAllSyntaxOverlay(t *testing.T) {
|
||||
type M = map[string]string
|
||||
|
||||
tmp, cleanup := makeTree(t, M{
|
||||
@ -670,7 +669,7 @@ func TestWholeProgramOverlay(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWholeProgramImportErrors(t *testing.T) {
|
||||
func TestLoadAllSyntaxImportErrors(t *testing.T) {
|
||||
// TODO(matloob): Remove this once go list -e -compiled is fixed. See golang.org/issue/26755
|
||||
t.Skip("go list -compiled -e fails with non-zero exit status for empty packages")
|
||||
|
||||
@ -819,7 +818,6 @@ func TestAbsoluteFilenames(t *testing.T) {
|
||||
continue
|
||||
}
|
||||
|
||||
// Don't check which files are included with the legacy loader (breaks with .s files).
|
||||
if got := strings.Join(srcs(pkgs[0]), " "); got != test.want {
|
||||
t.Errorf("in package %s, got %s, want %s", test.pattern, got, test.want)
|
||||
}
|
||||
@ -909,8 +907,9 @@ func errorMessages(errors []error) []string {
|
||||
func srcs(p *packages.Package) (basenames []string) {
|
||||
files := append(p.GoFiles, p.OtherFiles...)
|
||||
for i, src := range files {
|
||||
// TODO(suzmue): make cache names predictable on all os.
|
||||
if strings.Contains(src, ".cache/go-build") {
|
||||
// The default location for cache data is a subdirectory named go-build
|
||||
// in the standard user cache directory for the current operating system.
|
||||
if strings.Contains(filepath.ToSlash(src), "/go-build/") {
|
||||
src = fmt.Sprintf("%d.go", i) // make cache names predictable
|
||||
} else {
|
||||
src = filepath.Base(src)
|
||||
|
Loading…
Reference in New Issue
Block a user