@@ -15,13 +15,18 @@ import (
1515)
1616
1717var printDepTree bool
18+ var printDepGraph bool
1819
1920// describeCmd represents the describe command
2021var 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+
85129func describePackage (pkg * leeway.Package ) {
86130 manifest , err := pkg .ContentManifest ()
87131 if err != nil {
@@ -158,4 +202,5 @@ func describeConfig(cfg leeway.PackageConfig) string {
158202func 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