// TestPackageList returns the list of packages in the dag rooted at roots
// as visited in a depth-first post-order traversal, including the test
// imports of the roots. This ignores errors in test packages.
-func TestPackageList(ctx context.Context, opts PackageOpts, roots []*Package) []*Package {
+func TestPackageList(loaderstate *modload.State, ctx context.Context, opts PackageOpts, roots []*Package) []*Package {
seen := map[*Package]bool{}
all := []*Package{}
var walk func(*Package)
}
walkTest := func(root *Package, path string) {
var stk ImportStack
- p1, err := loadImport(modload.LoaderState, ctx, opts, nil, path, root.Dir, root, &stk, root.Internal.Build.TestImportPos[path], ResolveImport)
+ p1, err := loadImport(loaderstate, ctx, opts, nil, path, root.Dir, root, &stk, root.Internal.Build.TestImportPos[path], ResolveImport)
if err != nil && root.Error == nil {
// Assign error importing the package to the importer.
root.Error = err
// Select for coverage all dependencies matching the -coverpkg
// patterns.
- plist := load.TestPackageList(ctx, pkgOpts, pkgs)
+ plist := load.TestPackageList(modload.LoaderState, ctx, pkgOpts, pkgs)
testCoverPkgs = load.SelectCoverPackages(modload.LoaderState, plist, match, "test")
if len(testCoverPkgs) > 0 {
// create a new singleton action that will collect up the
"testing": true,
"time": true,
}
- for _, p := range load.TestPackageList(ctx, pkgOpts, pkgs) {
+ for _, p := range load.TestPackageList(modload.LoaderState, ctx, pkgOpts, pkgs) {
if !skipInstrumentation[p.ImportPath] {
p.Internal.FuzzInstrument = true
}
reportSetupFailed(firstErrPkg, firstErrPkg.Error)
continue
}
- buildTest, runTest, printTest, perr, err := builderTest(b, ctx, pkgOpts, p, allImports[p], writeCoverMetaAct)
+ buildTest, runTest, printTest, perr, err := builderTest(modload.LoaderState, b, ctx, pkgOpts, p, allImports[p], writeCoverMetaAct)
if err != nil {
reportErr(perr, err)
reportSetupFailed(perr, err)
"update",
}
-func builderTest(b *work.Builder, ctx context.Context, pkgOpts load.PackageOpts, p *load.Package, imported bool, writeCoverMetaAct *work.Action) (buildAction, runAction, printAction *work.Action, perr *load.Package, err error) {
+func builderTest(loaderstate *modload.State, b *work.Builder, ctx context.Context, pkgOpts load.PackageOpts, p *load.Package, imported bool, writeCoverMetaAct *work.Action) (buildAction, runAction, printAction *work.Action, perr *load.Package, err error) {
if len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 {
build := b.CompileAction(work.ModeBuild, work.ModeBuild, p)
run := &work.Action{
run.Deps = append(run.Deps, writeCoverMetaAct)
writeCoverMetaAct.Deps = append(writeCoverMetaAct.Deps, build)
}
- addTestVet(b, p, run, nil)
+ addTestVet(loaderstate, b, p, run, nil)
print := &work.Action{
Mode: "test print",
Actor: work.ActorFunc(builderPrintTest),
Paths: cfg.BuildCoverPkg,
}
}
- pmain, ptest, pxtest, perr := load.TestPackagesFor(modload.LoaderState, ctx, pkgOpts, p, cover)
+ pmain, ptest, pxtest, perr := load.TestPackagesFor(loaderstate, ctx, pkgOpts, p, cover)
if perr != nil {
return nil, nil, nil, perr, perr.Error
}
}
}
- a := b.LinkAction(modload.LoaderState, work.ModeBuild, work.ModeBuild, pmain)
+ a := b.LinkAction(loaderstate, work.ModeBuild, work.ModeBuild, pmain)
a.Target = testDir + testBinary + cfg.ExeSuffix
if cfg.Goos == "windows" {
// There are many reserved words on Windows that,
}
if len(ptest.GoFiles)+len(ptest.CgoFiles) > 0 {
- addTestVet(b, ptest, vetRunAction, installAction)
+ addTestVet(loaderstate, b, ptest, vetRunAction, installAction)
}
if pxtest != nil {
- addTestVet(b, pxtest, vetRunAction, installAction)
+ addTestVet(loaderstate, b, pxtest, vetRunAction, installAction)
}
if installAction != nil {
return buildAction, runAction, printAction, nil, nil
}
-func addTestVet(b *work.Builder, p *load.Package, runAction, installAction *work.Action) {
+func addTestVet(loaderstate *modload.State, b *work.Builder, p *load.Package, runAction, installAction *work.Action) {
if testVet.off {
return
}
- vet := b.VetAction(work.ModeBuild, work.ModeBuild, p)
+ vet := b.VetAction(loaderstate, work.ModeBuild, work.ModeBuild, p)
runAction.Deps = append(runAction.Deps, vet)
// Install will clean the build directory.
// Make sure vet runs first.
// It depends on the action for compiling p.
// If the caller may be causing p to be installed, it is up to the caller
// to make sure that the install depends on (runs after) vet.
-func (b *Builder) VetAction(mode, depMode BuildMode, p *load.Package) *Action {
- a := b.vetAction(mode, depMode, p)
+func (b *Builder) VetAction(loaderstate *modload.State, mode, depMode BuildMode, p *load.Package) *Action {
+ a := b.vetAction(loaderstate, mode, depMode, p)
a.VetxOnly = false
return a
}
-func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action {
+func (b *Builder) vetAction(loaderstate *modload.State, mode, depMode BuildMode, p *load.Package) *Action {
// Construct vet action.
a := b.cacheAction("vet", p, func() *Action {
a1 := b.CompileAction(mode|ModeVetOnly, depMode, p)
deps = []*Action{a1}
}
for _, p1 := range p.Internal.Imports {
- deps = append(deps, b.vetAction(mode, depMode, p1))
+ deps = append(deps, b.vetAction(loaderstate, mode, depMode, p1))
}
a := &Action{