2018-06-10 17:10:56 +03:00
|
|
|
package packages
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"go/build"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Program struct {
|
|
|
|
packages []Package
|
|
|
|
|
|
|
|
bctx build.Context
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Program) String() string {
|
|
|
|
files := p.Files(true)
|
|
|
|
if len(files) == 1 {
|
|
|
|
return files[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Sprintf("%s", p.Dirs())
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Program) BuildContext() *build.Context {
|
|
|
|
return &p.bctx
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p Program) Packages() []Package {
|
|
|
|
return p.packages
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Program) addPackage(pkg *Package) {
|
|
|
|
packagesToAdd := []Package{*pkg}
|
|
|
|
if len(pkg.bp.XTestGoFiles) != 0 {
|
|
|
|
// create separate package because xtest files have different package name
|
|
|
|
xbp := build.Package{
|
|
|
|
Dir: pkg.bp.Dir,
|
|
|
|
ImportPath: pkg.bp.ImportPath + "_test",
|
|
|
|
XTestGoFiles: pkg.bp.XTestGoFiles,
|
|
|
|
XTestImportPos: pkg.bp.XTestImportPos,
|
|
|
|
XTestImports: pkg.bp.XTestImports,
|
|
|
|
}
|
|
|
|
packagesToAdd = append(packagesToAdd, Package{
|
|
|
|
bp: &xbp,
|
|
|
|
})
|
|
|
|
pkg.bp.XTestGoFiles = nil
|
|
|
|
pkg.bp.XTestImportPos = nil
|
|
|
|
pkg.bp.XTestImports = nil
|
|
|
|
}
|
|
|
|
|
|
|
|
p.packages = append(p.packages, packagesToAdd...)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Program) Files(includeTest bool) []string {
|
|
|
|
var ret []string
|
|
|
|
for _, pkg := range p.packages {
|
|
|
|
ret = append(ret, pkg.Files(includeTest)...)
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Program) Dirs() []string {
|
|
|
|
var ret []string
|
|
|
|
for _, pkg := range p.packages {
|
|
|
|
if !pkg.isFake {
|
2018-06-18 00:06:45 +03:00
|
|
|
ret = append(ret, pkg.Dir())
|
2018-06-10 17:10:56 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret
|
|
|
|
}
|