Skip to content

Commit 52a962f

Browse files
committed
Implementation of deps install in 'lib install' command
1 parent b6917d3 commit 52a962f

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

Diff for: cli/lib/install.go

+28-2
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,39 @@ func initInstallCommand() *cobra.Command {
4747

4848
func 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

Comments
 (0)