temporary patch for module support inside GOPATH
Этот коммит содержится в:
родитель
d266d9188c
коммит
722f647346
2 изменённых файлов: 97 добавлений и 47 удалений
|
@ -143,11 +143,15 @@ func Build(bin string) error {
|
||||||
|
|
||||||
// godog library may not be imported in tested package
|
// godog library may not be imported in tested package
|
||||||
// but we need it for our testmain package.
|
// but we need it for our testmain package.
|
||||||
// So we look it up in available source paths
|
godogPkg := locateModule(godogImportPath)
|
||||||
// including vendor directory, supported since 1.5.
|
if godogPkg == nil {
|
||||||
godogPkg, err := locatePackage(godogImportPath)
|
// if it was not located as module
|
||||||
if err != nil {
|
// we look it up in available source paths
|
||||||
return err
|
// including vendor directory, supported since 1.5.
|
||||||
|
godogPkg, err = locatePackage(godogImportPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure godog package archive is installed, gherkin
|
// make sure godog package archive is installed, gherkin
|
||||||
|
@ -444,10 +448,16 @@ func dependencies(pkg *build.Package, visited map[string]string, vendor bool) er
|
||||||
if _, ok := visited[name]; ok {
|
if _, ok := visited[name]; ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
next, err := locatePackage(name)
|
|
||||||
if err != nil {
|
next := locateModule(name) // module takes priority
|
||||||
return err
|
if next == nil {
|
||||||
|
var err error
|
||||||
|
next, err = locatePackage(name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
visited[name] = pkg.PkgObj
|
visited[name] = pkg.PkgObj
|
||||||
if err := dependencies(next, visited, vendor); err != nil {
|
if err := dependencies(next, visited, vendor); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -455,3 +465,44 @@ func dependencies(pkg *build.Package, visited map[string]string, vendor bool) er
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func locateModule(name string) *build.Package {
|
||||||
|
// for module support, query the module import path
|
||||||
|
cmd := exec.Command("go", "mod", "download", "-json")
|
||||||
|
out, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
// Unable to read stdout
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if cmd.Start() != nil {
|
||||||
|
// Does not using modules
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type module struct {
|
||||||
|
Dir string
|
||||||
|
Path string
|
||||||
|
}
|
||||||
|
|
||||||
|
var mod *module
|
||||||
|
if err := json.NewDecoder(out).Decode(&mod); err != nil {
|
||||||
|
// Unexpected result
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if cmd.Wait() != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Index(name, mod.Path) == -1 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
suffix := strings.Replace(name, mod.Path, "", 1)
|
||||||
|
add := strings.Replace(suffix, "/", string(filepath.Separator), -1)
|
||||||
|
pkg, err := build.ImportDir(mod.Dir+add, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return pkg
|
||||||
|
}
|
||||||
|
|
|
@ -47,47 +47,46 @@ func TestGodogBuildWithModuleOutsideGopath(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// func TestGodogBuildWithModuleInsideGopath(t *testing.T) {
|
func TestGodogBuildWithModuleInsideGopath(t *testing.T) {
|
||||||
// gopath := filepath.Join(os.TempDir(), "_gp")
|
gopath := filepath.Join(os.TempDir(), "_gp")
|
||||||
// dir := filepath.Join(gopath, "src", "godogs")
|
dir := filepath.Join(gopath, "src", "godogs")
|
||||||
// err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile)
|
err := buildTestPackage(dir, builderFeatureFile, builderMainCodeFile, builderTestFile)
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// os.RemoveAll(gopath)
|
os.RemoveAll(gopath)
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
// defer os.RemoveAll(gopath)
|
defer os.RemoveAll(gopath)
|
||||||
|
|
||||||
// prevDir, err := os.Getwd()
|
prevDir, err := os.Getwd()
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if err := os.Chdir(dir); err != nil {
|
if err := os.Chdir(dir); err != nil {
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
// defer os.Chdir(prevDir)
|
defer os.Chdir(prevDir)
|
||||||
|
|
||||||
// c := exec.Command("go", "mod", "init", "godogs")
|
c := exec.Command("go", "mod", "init", "godogs")
|
||||||
// c.Env = os.Environ()
|
c.Env = os.Environ()
|
||||||
// c.Env = append(c.Env, "GOPATH="+gopath)
|
c.Env = append(c.Env, "GOPATH="+gopath)
|
||||||
// c.Env = append(c.Env, "GO111MODULE=on")
|
c.Env = append(c.Env, "GO111MODULE=on")
|
||||||
// if out, err := c.CombinedOutput(); err != nil {
|
if out, err := c.CombinedOutput(); err != nil {
|
||||||
// t.Log(string(out))
|
t.Log(string(out))
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
|
|
||||||
// var stdout, stderr bytes.Buffer
|
var stdout, stderr bytes.Buffer
|
||||||
// cmd := exec.Command("godog", "godogs.feature")
|
cmd := exec.Command("godog", "godogs.feature")
|
||||||
// cmd.Stdout = &stdout
|
cmd.Stdout = &stdout
|
||||||
// cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
// cmd.Env = os.Environ()
|
cmd.Env = os.Environ()
|
||||||
// cmd.Env = append(cmd.Env, "GOPATH="+gopath)
|
cmd.Env = append(cmd.Env, "GOPATH="+gopath)
|
||||||
// cmd.Env = append(cmd.Env, "GO111MODULE=on")
|
cmd.Env = append(cmd.Env, "GO111MODULE=on")
|
||||||
|
|
||||||
// if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
// t.Log(stdout.String())
|
t.Log(stdout.String())
|
||||||
// t.Log(stderr.String())
|
t.Log(stderr.String())
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
// fmt.Println(stdout.String())
|
}
|
||||||
// }
|
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче