pass more --dirs to wasmtime so it can read the entire module tree
This allows compress/flate to pass on -target=wasi out of the box Fixes #2367
Этот коммит содержится в:
родитель
6afceb5621
коммит
c87bb0e9cc
3 изменённых файлов: 40 добавлений и 2 удалений
|
@ -45,6 +45,11 @@ type BuildResult struct {
|
|||
// binary must be run in the directory of the tested package.
|
||||
MainDir string
|
||||
|
||||
// The root of the Go module tree. This is used for running tests in emulator
|
||||
// that restrict file system access to allow them to grant access to the entire
|
||||
// source tree they're likely to need to read testdata from.
|
||||
ModuleRoot string
|
||||
|
||||
// ImportPath is the import path of the main package. This is useful for
|
||||
// correctly printing test results: the import path isn't always the same as
|
||||
// the path listed on the command line.
|
||||
|
@ -799,9 +804,18 @@ func Build(pkgName, outpath string, config *compileopts.Config, action func(Buil
|
|||
default:
|
||||
return fmt.Errorf("unknown output binary format: %s", outputBinaryFormat)
|
||||
}
|
||||
|
||||
// If there's a module root, use that.
|
||||
moduleroot := lprogram.MainPkg().Module.Dir
|
||||
if moduleroot == "" {
|
||||
// if not, just the regular root
|
||||
moduleroot = lprogram.MainPkg().Root
|
||||
}
|
||||
|
||||
return action(BuildResult{
|
||||
Binary: tmppath,
|
||||
MainDir: lprogram.MainPkg().Dir,
|
||||
ModuleRoot: moduleroot,
|
||||
ImportPath: lprogram.MainPkg().ImportPath,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -47,6 +47,14 @@ type PackageJSON struct {
|
|||
ImportPath string
|
||||
Name string
|
||||
ForTest string
|
||||
Root string
|
||||
Module struct {
|
||||
Path string
|
||||
Main bool
|
||||
Dir string
|
||||
GoMod string
|
||||
GoVersion string
|
||||
}
|
||||
|
||||
// Source files
|
||||
GoFiles []string
|
||||
|
|
20
main.go
20
main.go
|
@ -233,6 +233,19 @@ func Test(pkgName string, stdout, stderr io.Writer, options *compileopts.Options
|
|||
return passed, err
|
||||
}
|
||||
|
||||
func dirsToModuleRoot(maindir, modroot string) []string {
|
||||
var dirs = []string{"."}
|
||||
last := ".."
|
||||
// strip off path elements until we hit the module root
|
||||
// adding `..`, `../..`, `../../..` until we're done
|
||||
for maindir != modroot {
|
||||
dirs = append(dirs, last)
|
||||
last = filepath.Join(last, "..")
|
||||
maindir = filepath.Dir(maindir)
|
||||
}
|
||||
return dirs
|
||||
}
|
||||
|
||||
// runPackageTest runs a test binary that was previously built. The return
|
||||
// values are whether the test passed and any errors encountered while trying to
|
||||
// run the binary.
|
||||
|
@ -269,9 +282,12 @@ func runPackageTest(config *compileopts.Config, stdout, stderr io.Writer, result
|
|||
args = append(args, "--dir="+tmpdir, "--env=TMPDIR="+tmpdir)
|
||||
// TODO: add option to not delete temp dir for debugging?
|
||||
defer os.RemoveAll(tmpdir)
|
||||
// allow reading from current directory: --dir=.
|
||||
// allow reading from directories up to module root
|
||||
for _, d := range dirsToModuleRoot(result.MainDir, result.ModuleRoot) {
|
||||
args = append(args, "--dir="+d)
|
||||
}
|
||||
// mark end of wasmtime arguments and start of program ones: --
|
||||
args = append(args, "--dir=.", "--")
|
||||
args = append(args, "--")
|
||||
if testVerbose {
|
||||
args = append(args, "-test.v")
|
||||
}
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче