github.com/elubow/godep@v0.0.0-20140525002653-983ff9241cea/pkg.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "io" 6 "os" 7 "os/exec" 8 ) 9 10 type Package struct { 11 Dir string 12 Root string 13 ImportPath string 14 Deps []string 15 Standard bool 16 17 GoFiles []string 18 CgoFiles []string 19 IgnoredGoFiles []string 20 21 TestGoFiles []string 22 TestImports []string 23 XTestGoFiles []string 24 XTestImports []string 25 26 Error struct { 27 Err string 28 } 29 } 30 31 // LoadPackages loads the named packages using go list -json. 32 // Unlike the go tool, an empty argument list is treated as 33 // an empty list; "." must be given explicitly if desired. 34 func LoadPackages(name ...string) (a []*Package, err error) { 35 if len(name) == 0 { 36 return nil, nil 37 } 38 args := []string{"list", "-e", "-json"} 39 cmd := exec.Command("go", append(args, name...)...) 40 r, err := cmd.StdoutPipe() 41 if err != nil { 42 return nil, err 43 } 44 cmd.Stderr = os.Stderr 45 err = cmd.Start() 46 if err != nil { 47 return nil, err 48 } 49 d := json.NewDecoder(r) 50 for { 51 info := new(Package) 52 err = d.Decode(info) 53 if err == io.EOF { 54 break 55 } 56 if err != nil { 57 info.Error.Err = err.Error() 58 } 59 a = append(a, info) 60 } 61 err = cmd.Wait() 62 if err != nil { 63 return nil, err 64 } 65 return a, nil 66 } 67 68 func (p *Package) allGoFiles() (a []string) { 69 a = append(a, p.GoFiles...) 70 a = append(a, p.CgoFiles...) 71 a = append(a, p.TestGoFiles...) 72 a = append(a, p.XTestGoFiles...) 73 a = append(a, p.IgnoredGoFiles...) 74 return a 75 }