mirror of https://github.com/gogs/gogs.git
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
// +build go1.9
|
|
|
|
// To work correctly with out of GOPATH modules, some functions needed to
|
|
// switch from using go/build to golang.org/x/tools/go/packages. But that
|
|
// package depends on changes to go/types that were introduced in Go 1.9. Since
|
|
// modules weren't introduced until Go 1.11, using
|
|
// golang.org/x/tools/go/packages can safely be restricted to users of Go 1.9
|
|
// or above.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"golang.org/x/tools/go/packages"
|
|
)
|
|
|
|
// This method exists because of a bug in the go cover tool that
|
|
// causes an infinite loop when you try to run `go test -cover`
|
|
// on a package that has an import cycle defined in one of it's
|
|
// test files. Yuck.
|
|
func testFilesImportTheirOwnPackage(packagePath string) bool {
|
|
meta, err := packages.Load(
|
|
&packages.Config{
|
|
Mode: packages.NeedName | packages.NeedImports,
|
|
Tests: true,
|
|
},
|
|
packagePath,
|
|
)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
testPackageID := fmt.Sprintf("%s [%s.test]", meta[0], meta[0])
|
|
|
|
for _, testPackage := range meta[1:] {
|
|
if testPackage.ID != testPackageID {
|
|
continue
|
|
}
|
|
|
|
for dependency := range testPackage.Imports {
|
|
if dependency == meta[0].PkgPath {
|
|
return true
|
|
}
|
|
}
|
|
break
|
|
}
|
|
return false
|
|
}
|
|
|
|
func resolvePackageName(path string) string {
|
|
pkg, err := packages.Load(
|
|
&packages.Config{
|
|
Mode: packages.NeedName,
|
|
},
|
|
path,
|
|
)
|
|
if err == nil {
|
|
return pkg[0].PkgPath
|
|
}
|
|
|
|
nameArr := strings.Split(path, endGoPath)
|
|
return nameArr[len(nameArr)-1]
|
|
}
|