@@ -47,13 +47,39 @@ func initInstallCommand() *cobra.Command {
4747
4848func runInstallCommand (cmd * cobra.Command , args []string ) {
4949 instance := instance .CreateInstaceIgnorePlatformIndexErrors ()
50- refs , err := globals .ParseLibraryReferenceArgs (args )
50+ libRefs , err := globals .ParseLibraryReferenceArgs (args )
5151 if err != nil {
5252 feedback .Errorf ("Arguments error: %v" , err )
5353 os .Exit (errorcodes .ErrBadArgument )
5454 }
5555
56- for _ , library := range refs {
56+ toInstall := map [string ]* rpc.LibraryReference {}
57+ for _ , libRef := range libRefs {
58+ depsResp , err := lib .LibraryResolveDependencies (context .Background (), & rpc.LibraryResolveDependenciesReq {
59+ Instance : instance ,
60+ Name : libRef .Name ,
61+ Version : libRef .Version ,
62+ })
63+ if err != nil {
64+ feedback .Errorf ("Error resolving dependencies for %s: %s" , libRef , err )
65+ }
66+ deps := depsResp .GetDependencies ()
67+ for _ , dep := range deps {
68+ feedback .Printf ("%s depends on %s@%s" , libRef , dep .GetName (), dep .GetVersion ())
69+ if existingDep , has := toInstall [dep .GetName ()]; has {
70+ if existingDep .GetVersion () != dep .GetVersion () {
71+ // TODO: make a better error
72+ feedback .Errorf ("The library %s is required in two different versions: %s and %s" ,
73+ dep .GetName (), dep .GetVersion (), existingDep .GetVersion ())
74+ os .Exit (errorcodes .ErrGeneric )
75+ }
76+ }
77+ toInstall [dep .GetName ()] = dep
78+ }
79+ feedback .Print ()
80+ }
81+
82+ for _ , library := range toInstall {
5783 libraryInstallReq := & rpc.LibraryInstallReq {
5884 Instance : instance ,
5985 Name : library .Name ,
0 commit comments