summaryrefslogtreecommitdiff
path: root/src/cmd/go/list.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/list.go')
-rw-r--r--src/cmd/go/list.go114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/cmd/go/list.go b/src/cmd/go/list.go
new file mode 100644
index 000000000..af211f98d
--- /dev/null
+++ b/src/cmd/go/list.go
@@ -0,0 +1,114 @@
+// Copyright 2011 The Go 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 main
+
+import (
+ "encoding/json"
+ "os"
+ "text/template"
+)
+
+var cmdList = &Command{
+ UsageLine: "list [-e] [-f format] [-json] [importpath...]",
+ Short: "list packages",
+ Long: `
+List lists the packages named by the import paths, one per line.
+
+The default output shows the package import path:
+
+ code.google.com/p/google-api-go-client/books/v1
+ code.google.com/p/goauth2/oauth
+ code.google.com/p/sqlite
+
+The -f flag specifies an alternate format for the list,
+using the syntax of package template. The default output
+is equivalent to -f '{{.ImportPath}}'. The struct
+being passed to the template is:
+
+ type Package struct {
+ Name string // package name
+ Doc string // package documentation string
+ ImportPath string // import path of package in dir
+ Dir string // directory containing package sources
+ Version string // version of installed package (TODO)
+ Stale bool // would 'go install' do anything for this package?
+
+ // Source files
+ GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, and XTestGoFiles)
+ TestGoFiles []string // _test.go source files internal to the package they are testing
+ XTestGoFiles []string // _test.go source files external to the package they are testing
+ CFiles []string // .c source files
+ HFiles []string // .h source files
+ SFiles []string // .s source files
+ CgoFiles []string // .go sources files that import "C"
+
+ // Dependency information
+ Imports []string // import paths used by this package
+ Deps []string // all (recursively) imported dependencies
+
+ // Error information
+ Incomplete bool // this package or a dependency has an error
+ Error *PackageError // error loading package
+ DepsErrors []*PackageError // errors loading dependencies
+ }
+
+The -json flag causes the package data to be printed in JSON format
+instead of using the template format.
+
+The -e flag changes the handling of erroneous packages, those that
+cannot be found or are malformed. By default, the list command
+prints an error to standard error for each erroneous package and
+omits the packages from consideration during the usual printing.
+With the -e flag, the list command never prints errors to standard
+error and instead processes the erroneous packages with the usual
+printing. Erroneous packages will have a non-empty ImportPath and
+a non-nil Error field; other information may or may not be missing
+(zeroed).
+
+For more about import paths, see 'go help importpath'.
+ `,
+}
+
+func init() {
+ cmdList.Run = runList // break init cycle
+}
+
+var listE = cmdList.Flag.Bool("e", false, "")
+var listFmt = cmdList.Flag.String("f", "{{.ImportPath}}", "")
+var listJson = cmdList.Flag.Bool("json", false, "")
+var nl = []byte{'\n'}
+
+func runList(cmd *Command, args []string) {
+ var do func(*Package)
+ if *listJson {
+ do = func(p *Package) {
+ b, err := json.MarshalIndent(p, "", "\t")
+ if err != nil {
+ fatalf("%s", err)
+ }
+ os.Stdout.Write(b)
+ os.Stdout.Write(nl)
+ }
+ } else {
+ tmpl, err := template.New("main").Parse(*listFmt + "\n")
+ if err != nil {
+ fatalf("%s", err)
+ }
+ do = func(p *Package) {
+ if err := tmpl.Execute(os.Stdout, p); err != nil {
+ fatalf("%s", err)
+ }
+ }
+ }
+
+ load := packages
+ if *listE {
+ load = packagesAndErrors
+ }
+
+ for _, pkg := range load(args) {
+ do(pkg)
+ }
+}