1 // rdeps scans GOPATH for all reverse dependencies of a set of Go
4 // rdeps will not sort its output, and the order of the output is
5 // undefined. Pipe its output through sort if you need stable output.
15 "honnef.co/go/tools/version"
17 "github.com/kisielk/gotool"
18 "golang.org/x/tools/go/buildutil"
19 "golang.org/x/tools/refactor/importgraph"
23 var tags buildutil.TagsFlag
24 flag.Var(&tags, "tags", "List of build tags")
25 stdin := flag.Bool("stdin", false, "Read packages from stdin instead of the command line")
26 recursive := flag.Bool("r", false, "Print reverse dependencies recursively")
27 printVersion := flag.Bool("version", false, "Print version and exit")
39 s := bufio.NewScanner(os.Stdin)
41 args = append(args, s.Text())
51 fmt.Fprintln(os.Stderr, err)
54 pkgs := gotool.ImportPaths(args)
55 for i, pkg := range pkgs {
56 bpkg, err := ctx.Import(pkg, wd, build.FindOnly)
60 pkgs[i] = bpkg.ImportPath
62 _, reverse, errors := importgraph.Build(&ctx)
65 seen := map[string]bool{}
66 var printRDeps func(pkg string)
67 printRDeps = func(pkg string) {
68 for rdep := range reverse[pkg] {
80 for _, pkg := range pkgs {
83 for pkg, err := range errors {
84 fmt.Fprintf(os.Stderr, "error in package %s: %s\n", pkg, err)