Skip to content

Commit 99f8e51

Browse files
author
Christian Weichel
committed
Add --dot producing the dependency graph to describe
1 parent 522f0d2 commit 99f8e51

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

cmd/describe.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ import (
1515
)
1616

1717
var printDepTree bool
18+
var printDepGraph bool
1819

1920
// describeCmd represents the describe command
2021
var describeCmd = &cobra.Command{
2122
Use: "describe <component|package>",
2223
Short: "Describes a single component or package",
2324
Args: cobra.MaximumNArgs(1),
2425
Run: func(cmd *cobra.Command, args []string) {
26+
if printDepTree && printDepGraph {
27+
log.Fatal("--tree and --dot are exclusive. Choose one or the other.")
28+
}
29+
2530
workspace, err := getWorkspace()
2631
if err != nil {
2732
log.Fatal(err)
@@ -50,6 +55,12 @@ var describeCmd = &cobra.Command{
5055
log.Fatal(err)
5156
}
5257
return
58+
} else if printDepGraph {
59+
err = printDependencyGraph(pkg)
60+
if err != nil {
61+
log.Fatal(err)
62+
}
63+
return
5364
}
5465
describePackage(pkg)
5566
} else {
@@ -62,6 +73,9 @@ var describeCmd = &cobra.Command{
6273
if printDepTree {
6374
log.Fatal("--tree only makes sense for packages")
6475
}
76+
if printDepGraph {
77+
log.Fatal("--tree only makes sense for packages")
78+
}
6579
describeComponent(comp)
6680
}
6781
},
@@ -82,6 +96,36 @@ func printDependencyTree(pkg *leeway.Package) error {
8296
return err
8397
}
8498

99+
func printDependencyGraph(pkg *leeway.Package) error {
100+
allpkg := append(pkg.GetTransitiveDependencies(), pkg)
101+
102+
fmt.Println("digraph G {")
103+
for _, p := range allpkg {
104+
ver, err := p.Version()
105+
if err != nil {
106+
return err
107+
}
108+
fmt.Printf(" p%s [label=\"%s\"];\n", ver, p.FullName())
109+
}
110+
for _, p := range allpkg {
111+
ver, err := p.Version()
112+
if err != nil {
113+
return err
114+
}
115+
116+
for _, dep := range p.GetDependencies() {
117+
depver, err := dep.Version()
118+
if err != nil {
119+
return err
120+
}
121+
fmt.Printf(" p%s -> p%s;\n", ver, depver)
122+
}
123+
}
124+
fmt.Println("}")
125+
126+
return nil
127+
}
128+
85129
func describePackage(pkg *leeway.Package) {
86130
manifest, err := pkg.ContentManifest()
87131
if err != nil {
@@ -158,4 +202,5 @@ func describeConfig(cfg leeway.PackageConfig) string {
158202
func init() {
159203
rootCmd.AddCommand(describeCmd)
160204
describeCmd.Flags().BoolVar(&printDepTree, "tree", false, "print the dependency tree of a package")
205+
describeCmd.Flags().BoolVar(&printDepGraph, "dot", false, "print the dependency graph as Graphviz DOT")
161206
}

0 commit comments

Comments
 (0)