| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package goutil provides Go wrappers around the Go command-line |
| // tool. |
| package goutil |
| |
| import ( |
| "bytes" |
| "fmt" |
| "strings" |
| |
| "v.io/jiri" |
| ) |
| |
| // List inputs a list of Go package expressions and returns a list of |
| // Go packages that can be found in the GOPATH and match any of the |
| // expressions. The implementation invokes 'go list' internally with |
| // jiriArgs as arguments to the jiri-go subcommand. |
| func List(jirix *jiri.X, jiriArgs []string, pkgs ...string) ([]string, error) { |
| return list(jirix, jiriArgs, "{{.ImportPath}}", pkgs...) |
| } |
| |
| // ListDirs inputs a list of Go package expressions and returns a list of |
| // directories that match the expressions. The implementation invokes 'go list' |
| // internally with jiriArgs as arguments to the jiri-go subcommand. |
| func ListDirs(jirix *jiri.X, jiriArgs []string, pkgs ...string) ([]string, error) { |
| return list(jirix, jiriArgs, "{{.Dir}}", pkgs...) |
| } |
| |
| func list(jirix *jiri.X, jiriArgs []string, format string, pkgs ...string) ([]string, error) { |
| s := jirix.NewSeq() |
| args := append([]string{"go"}, jiriArgs...) |
| args = append(args, "list", "-f="+format) |
| args = append(args, pkgs...) |
| var out bytes.Buffer |
| if err := s.Capture(&out, &out).Last("jiri", args...); err != nil { |
| fmt.Fprintln(jirix.Stderr(), out.String()) |
| return nil, err |
| } |
| cleanOut := strings.TrimSpace(out.String()) |
| if cleanOut == "" { |
| return nil, nil |
| } |
| return strings.Split(cleanOut, "\n"), nil |
| } |