From 16699b2d33e2654d743c50b4525ab7e73e346238 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Wed, 27 Jun 2018 10:16:43 -0400 Subject: [PATCH] go/gcexportdata: add -package flag to diagnostic tool ...to show information about indirectly mentioned packages. Change-Id: Ib74b56493861bf41d9720760e76ace186efae2ea Reviewed-on: https://go-review.googlesource.com/121195 Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer TryBot-Result: Gobot Gobot --- go/gcexportdata/main.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/go/gcexportdata/main.go b/go/gcexportdata/main.go index 106046c4..2713dce6 100644 --- a/go/gcexportdata/main.go +++ b/go/gcexportdata/main.go @@ -20,11 +20,13 @@ import ( "golang.org/x/tools/go/types/typeutil" ) +var packageFlag = flag.String("package", "", "alternative package to print") + func main() { log.SetPrefix("gcexportdata: ") log.SetFlags(0) flag.Usage = func() { - fmt.Fprintln(os.Stderr, "usage: gcexportdata file.a") + fmt.Fprintln(os.Stderr, "usage: gcexportdata [-package path] file.a") } flag.Parse() if flag.NArg() != 1 { @@ -44,11 +46,27 @@ func main() { } // Decode the package. + const primary = "" imports := make(map[string]*types.Package) fset := token.NewFileSet() - pkg, err := gcexportdata.Read(r, fset, imports, "dummy") + pkg, err := gcexportdata.Read(r, fset, imports, primary) if err != nil { - log.Fatal("%s: %s", filename, err) + log.Fatalf("%s: %s", filename, err) + } + + // Optionally select an indirectly mentioned package. + if *packageFlag != "" { + pkg = imports[*packageFlag] + if pkg == nil { + fmt.Fprintf(os.Stderr, "export data file %s does not mention %s; has:\n", + filename, *packageFlag) + for p := range imports { + if p != primary { + fmt.Fprintf(os.Stderr, "\t%s\n", p) + } + } + os.Exit(1) + } } // Print all package-level declarations, including non-exported ones.