Skip to content

Commit a8f527b

Browse files
committed
ProfileAddLibrary now accepts a full ProfileLibraryReference object
1 parent 54bde68 commit a8f527b

File tree

4 files changed

+689
-685
lines changed

4 files changed

+689
-685
lines changed

commands/service_profile_lib_add.go

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,34 +48,48 @@ func (s *arduinoCoreServerImpl) ProfileLibAdd(ctx context.Context, req *rpc.Prof
4848
return nil, err
4949
}
5050

51-
// Obtain the library index from the manager
52-
li, err := instances.GetLibrariesIndex(req.GetInstance())
53-
if err != nil {
54-
return nil, err
55-
}
56-
version, err := parseVersion(req.LibVersion)
57-
if err != nil {
58-
return nil, err
59-
}
60-
libRelease, err := li.FindRelease(req.GetLibName(), version)
61-
if err != nil {
62-
return nil, err
63-
}
64-
65-
// If the library has been already added to the profile, just update the version
66-
if lib, _ := profile.GetLibrary(req.LibName, false); lib != nil {
67-
lib.Version = libRelease.GetVersion()
51+
var addedLib *sketch.ProfileLibraryReference
52+
if reqLocalLib := req.GetLibrary().GetLocalLibrary(); reqLocalLib != nil {
53+
// Add a local library
54+
path := paths.New(reqLocalLib.GetPath())
55+
if path == nil {
56+
return nil, &cmderrors.InvalidArgumentError{Message: "invalid library path"}
57+
}
58+
addedLib = &sketch.ProfileLibraryReference{InstallDir: path}
59+
profile.Libraries = append(profile.Libraries, addedLib)
60+
} else if reqIndexLib := req.GetLibrary().GetIndexLibrary(); reqIndexLib != nil {
61+
// Obtain the library index from the manager
62+
li, err := instances.GetLibrariesIndex(req.GetInstance())
63+
if err != nil {
64+
return nil, err
65+
}
66+
version, err := parseVersion(reqIndexLib.GetVersion())
67+
if err != nil {
68+
return nil, err
69+
}
70+
libRelease, err := li.FindRelease(reqIndexLib.GetName(), version)
71+
if err != nil {
72+
return nil, err
73+
}
74+
// If the library has been already added to the profile, just update the version
75+
if lib, _ := profile.GetLibrary(reqIndexLib.GetName(), false); lib != nil {
76+
lib.Version = libRelease.GetVersion()
77+
addedLib = lib
78+
} else {
79+
addedLib = &sketch.ProfileLibraryReference{
80+
Library: reqIndexLib.GetName(),
81+
Version: libRelease.GetVersion(),
82+
}
83+
profile.Libraries = append(profile.Libraries, addedLib)
84+
}
6885
} else {
69-
profile.Libraries = append(profile.Libraries, &sketch.ProfileLibraryReference{
70-
Library: req.GetLibName(),
71-
Version: libRelease.GetVersion(),
72-
})
86+
return nil, &cmderrors.InvalidArgumentError{Message: "library must be specified"}
7387
}
7488

7589
err = projectFilePath.WriteFile([]byte(sk.Project.AsYaml()))
7690
if err != nil {
7791
return nil, err
7892
}
7993

80-
return &rpc.ProfileLibAddResponse{LibName: req.LibName, LibVersion: libRelease.GetVersion().String(), ProfileName: profileName}, nil
94+
return &rpc.ProfileLibAddResponse{Library: addedLib.ToRpc(), ProfileName: profileName}, nil
8195
}

internal/cli/profile/lib.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/arduino/arduino-cli/internal/cli/arguments"
2424
"github.com/arduino/arduino-cli/internal/cli/feedback"
25+
"github.com/arduino/arduino-cli/internal/cli/feedback/result"
2526
"github.com/arduino/arduino-cli/internal/cli/instance"
2627
"github.com/arduino/arduino-cli/internal/cli/lib"
2728
"github.com/arduino/arduino-cli/internal/i18n"
@@ -83,13 +84,21 @@ func runLibAddCommand(ctx context.Context, args []string, srv rpc.ArduinoCoreSer
8384
Instance: instance,
8485
SketchPath: sketchPath.String(),
8586
ProfileName: profileArg.Get(),
86-
LibName: lib.Name,
87-
LibVersion: lib.Version,
87+
Library: &rpc.ProfileLibraryReference{
88+
Library: &rpc.ProfileLibraryReference_IndexLibrary_{
89+
IndexLibrary: &rpc.ProfileLibraryReference_IndexLibrary{
90+
Name: lib.Name,
91+
Version: lib.Version,
92+
},
93+
},
94+
},
8895
})
8996
if err != nil {
9097
feedback.Fatal(i18n.Tr("Error adding %s to the profile %s: %v", lib.Name, profileArg.Get(), err), feedback.ErrGeneric)
9198
}
92-
feedback.PrintResult(libAddResult{LibName: resp.GetLibName(), LibVersion: resp.GetLibVersion(), ProfileName: resp.ProfileName})
99+
feedback.PrintResult(libAddResult{
100+
Library: result.NewProfileLibraryReference_IndexLibraryResult(resp.GetLibrary().GetIndexLibrary()),
101+
ProfileName: resp.ProfileName})
93102
}
94103
}
95104

@@ -140,17 +149,16 @@ func runLibRemoveCommand(ctx context.Context, args []string, srv rpc.ArduinoCore
140149
}
141150

142151
type libAddResult struct {
143-
LibName string `json:"library_name"`
144-
LibVersion string `json:"library_version"`
145-
ProfileName string `json:"profile_name"`
152+
Library *result.ProfileLibraryReference_IndexLibraryResult `json:"library"`
153+
ProfileName string `json:"profile_name"`
146154
}
147155

148156
func (lr libAddResult) Data() interface{} {
149157
return lr
150158
}
151159

152160
func (lr libAddResult) String() string {
153-
return i18n.Tr("Profile %s: %s@%s added successfully", lr.ProfileName, lr.LibName, lr.LibVersion)
161+
return i18n.Tr("Profile %s: %s@%s added successfully", lr.ProfileName, lr.Library.Name, lr.Library.Version)
154162
}
155163

156164
type libRemoveResult struct {

0 commit comments

Comments
 (0)