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