@@ -47,17 +47,42 @@ 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.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 {
57
82
libraryInstallReq := & rpc.LibraryInstallReq {
58
83
Instance : instance ,
59
84
Name : library .Name ,
60
- Version : library .Version ,
85
+ Version : library .VersionRequired ,
61
86
}
62
87
err := lib .LibraryInstall (context .Background (), libraryInstallReq , output .ProgressBar (),
63
88
output .TaskProgress (), globals .NewHTTPClientHeader ())
0 commit comments