@@ -47,13 +47,39 @@ func initInstallCommand() *cobra.Command {
47
47
48
48
func runInstallCommand (cmd * cobra.Command , args []string ) {
49
49
instance := instance .CreateInstaceIgnorePlatformIndexErrors ()
50
- refs , err := globals .ParseLibraryReferenceArgs (args )
50
+ libRefs , err := globals .ParseLibraryReferenceArgs (args )
51
51
if err != nil {
52
52
feedback .Errorf ("Arguments error: %v" , err )
53
53
os .Exit (errorcodes .ErrBadArgument )
54
54
}
55
55
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 {
57
83
libraryInstallReq := & rpc.LibraryInstallReq {
58
84
Instance : instance ,
59
85
Name : library .Name ,
0 commit comments