/
resolve-deps.go
62 lines (51 loc) · 1.34 KB
/
resolve-deps.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package main
import (
"encoding/json"
"flag"
"fmt"
"os"
"sort"
"strings"
"./resolver"
)
func prettyPrintJSON(j interface{}) {
e := json.NewEncoder(os.Stdout)
e.SetIndent("", " ")
e.Encode(j)
}
func main() {
flag.Usage = func() {
fmt.Println(` Scans the imports from all Go packages (and subpackages) rooted in current dir,
and prints the dependency graph in a JSON format that can be imported via npmjs.com/graphlib.
`)
flag.PrintDefaults()
fmt.Println("")
}
var ignoredPkgs = flag.String("ignoredPkgs", "", "Comma separated list of packages (canonically named) to ignore when scanning subfolders")
var outputDOT = flag.Bool("dot", false, "Output as Graphviz DOT format")
var outputList = flag.Bool("list", false, "Output a flat JSON array of all reachable deps")
flag.Parse()
ignoredPkgsList := strings.Split(*ignoredPkgs, ",")
var rc resolver.ResolveContext
err := rc.ResolvePath(".", ignoredPkgsList)
if err != nil {
panic(err)
}
graph := rc.GetGraph()
if *outputDOT {
fmt.Println(graph.ToDOT())
} else if *outputList {
prettyPrintJSON(graph.SortedNodeNames())
} else {
prettyPrintJSON(graph)
}
unresolved := rc.GetUnresolvedPackages()
if len(unresolved) != 0 {
fmt.Println("\nUnresolved packages:")
sort.Strings(unresolved)
for _, pkg := range unresolved {
fmt.Println(" - ", pkg)
}
os.Exit(1)
}
}