@@ -47,17 +47,42 @@ 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.LibraryDependencyStatus {}
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+ for _ , dep := range depsResp .GetDependencies () {
67+ feedback .Printf ("%s depends on %s@%s" , libRef , dep .GetName (), dep .GetVersionRequired ())
68+ if existingDep , has := toInstall [dep .GetName ()]; has {
69+ if existingDep .GetVersionRequired () != dep .GetVersionRequired () {
70+ // TODO: make a better error
71+ feedback .Errorf ("The library %s is required in two different versions: %s and %s" ,
72+ dep .GetName (), dep .GetVersionRequired (), existingDep .GetVersionRequired ())
73+ os .Exit (errorcodes .ErrGeneric )
74+ }
75+ }
76+ toInstall [dep .GetName ()] = dep
77+ }
78+ feedback .Print ()
79+ }
80+
81+ for _ , library := range toInstall {
5782 libraryInstallReq := & rpc.LibraryInstallReq {
5883 Instance : instance ,
5984 Name : library .Name ,
60- Version : library .Version ,
85+ Version : library .VersionRequired ,
6186 }
6287 err := lib .LibraryInstall (context .Background (), libraryInstallReq , output .ProgressBar (),
6388 output .TaskProgress (), globals .HTTPClientHeader )
0 commit comments