Skip to content

Commit 65ab95f

Browse files
committed
Removed the massive code duplication in the 'outdated' command
1 parent 21ae1e0 commit 65ab95f

File tree

6 files changed

+58
-136
lines changed

6 files changed

+58
-136
lines changed

cli/outdated/outdated.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
"github.com/arduino/arduino-cli/cli/feedback"
2323
"github.com/arduino/arduino-cli/cli/instance"
24-
"github.com/arduino/arduino-cli/commands"
24+
"github.com/arduino/arduino-cli/commands/outdated"
2525
"github.com/arduino/arduino-cli/i18n"
2626
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2727
"github.com/arduino/arduino-cli/table"
@@ -50,7 +50,7 @@ func runOutdatedCommand(cmd *cobra.Command, args []string) {
5050
inst := instance.CreateAndInit()
5151
logrus.Info("Executing `arduino-cli outdated`")
5252

53-
outdatedResp, err := commands.Outdated(context.Background(), &rpc.OutdatedRequest{
53+
outdatedResp, err := outdated.Outdated(context.Background(), &rpc.OutdatedRequest{
5454
Instance: inst,
5555
})
5656
if err != nil {

cli/update/update.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/arduino/arduino-cli/cli/instance"
2525
"github.com/arduino/arduino-cli/cli/output"
2626
"github.com/arduino/arduino-cli/commands"
27+
"github.com/arduino/arduino-cli/commands/outdated"
2728
"github.com/arduino/arduino-cli/i18n"
2829
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2930
"github.com/arduino/arduino-cli/table"
@@ -70,7 +71,7 @@ func runUpdateCommand(cmd *cobra.Command, args []string) {
7071
feedback.Errorf(tr("Error initializing instance: %v"), err)
7172
}
7273

73-
outdatedResp, err := commands.Outdated(context.Background(), &rpc.OutdatedRequest{
74+
outdatedResp, err := outdated.Outdated(context.Background(), &rpc.OutdatedRequest{
7475
Instance: inst,
7576
})
7677
if err != nil {

commands/daemon/daemon.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/arduino/arduino-cli/commands/core"
3030
"github.com/arduino/arduino-cli/commands/lib"
3131
"github.com/arduino/arduino-cli/commands/monitor"
32+
"github.com/arduino/arduino-cli/commands/outdated"
3233
"github.com/arduino/arduino-cli/commands/sketch"
3334
"github.com/arduino/arduino-cli/commands/upgrade"
3435
"github.com/arduino/arduino-cli/commands/upload"
@@ -203,7 +204,7 @@ func (s *ArduinoCoreServerImpl) UpdateCoreLibrariesIndex(req *rpc.UpdateCoreLibr
203204

204205
// Outdated FIXMEDOC
205206
func (s *ArduinoCoreServerImpl) Outdated(ctx context.Context, req *rpc.OutdatedRequest) (*rpc.OutdatedResponse, error) {
206-
resp, err := commands.Outdated(ctx, req)
207+
resp, err := outdated.Outdated(ctx, req)
207208
return resp, convertErrorToRPCStatus(err)
208209
}
209210

commands/instances.go

Lines changed: 0 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -521,124 +521,6 @@ func UpdateCoreLibrariesIndex(ctx context.Context, req *rpc.UpdateCoreLibrariesI
521521
return nil
522522
}
523523

524-
// Outdated returns a list struct containing both Core and Libraries that can be updated
525-
func Outdated(ctx context.Context, req *rpc.OutdatedRequest) (*rpc.OutdatedResponse, error) {
526-
id := req.GetInstance().GetId()
527-
528-
lm := GetLibraryManager(id)
529-
if lm == nil {
530-
return nil, &arduino.InvalidInstanceError{}
531-
}
532-
533-
outdatedLibraries := []*rpc.InstalledLibrary{}
534-
for _, libAlternatives := range lm.Libraries {
535-
for _, library := range libAlternatives.Alternatives {
536-
if library.Location != libraries.User {
537-
continue
538-
}
539-
available := lm.Index.FindLibraryUpdate(library)
540-
if available == nil {
541-
continue
542-
}
543-
544-
outdatedLibraries = append(outdatedLibraries, &rpc.InstalledLibrary{
545-
Library: getOutputLibrary(library),
546-
Release: getOutputRelease(available),
547-
})
548-
}
549-
}
550-
551-
pm := GetPackageManager(id)
552-
if pm == nil {
553-
return nil, &arduino.InvalidInstanceError{}
554-
}
555-
556-
outdatedPlatforms := []*rpc.Platform{}
557-
for _, targetPackage := range pm.Packages {
558-
for _, installed := range targetPackage.Platforms {
559-
if installedRelease := pm.GetInstalledPlatformRelease(installed); installedRelease != nil {
560-
latest := installed.GetLatestRelease()
561-
if latest == nil || latest == installedRelease {
562-
continue
563-
}
564-
rpcPlatform := PlatformReleaseToRPC(latest)
565-
rpcPlatform.Installed = installedRelease.Version.String()
566-
567-
outdatedPlatforms = append(
568-
outdatedPlatforms,
569-
rpcPlatform,
570-
)
571-
}
572-
}
573-
}
574-
575-
return &rpc.OutdatedResponse{
576-
OutdatedLibraries: outdatedLibraries,
577-
OutdatedPlatforms: outdatedPlatforms,
578-
}, nil
579-
}
580-
581-
func getOutputLibrary(lib *libraries.Library) *rpc.Library {
582-
insdir := ""
583-
if lib.InstallDir != nil {
584-
insdir = lib.InstallDir.String()
585-
}
586-
srcdir := ""
587-
if lib.SourceDir != nil {
588-
srcdir = lib.SourceDir.String()
589-
}
590-
utldir := ""
591-
if lib.UtilityDir != nil {
592-
utldir = lib.UtilityDir.String()
593-
}
594-
cntplat := ""
595-
if lib.ContainerPlatform != nil {
596-
cntplat = lib.ContainerPlatform.String()
597-
}
598-
599-
return &rpc.Library{
600-
Name: lib.Name,
601-
Author: lib.Author,
602-
Maintainer: lib.Maintainer,
603-
Sentence: lib.Sentence,
604-
Paragraph: lib.Paragraph,
605-
Website: lib.Website,
606-
Category: lib.Category,
607-
Architectures: lib.Architectures,
608-
Types: lib.Types,
609-
InstallDir: insdir,
610-
SourceDir: srcdir,
611-
UtilityDir: utldir,
612-
Location: lib.Location.ToRPCLibraryLocation(),
613-
ContainerPlatform: cntplat,
614-
Layout: lib.Layout.ToRPCLibraryLayout(),
615-
RealName: lib.RealName,
616-
DotALinkage: lib.DotALinkage,
617-
Precompiled: lib.Precompiled,
618-
LdFlags: lib.LDflags,
619-
IsLegacy: lib.IsLegacy,
620-
Version: lib.Version.String(),
621-
License: lib.License,
622-
}
623-
}
624-
625-
func getOutputRelease(lib *librariesindex.Release) *rpc.LibraryRelease {
626-
if lib != nil {
627-
return &rpc.LibraryRelease{
628-
Author: lib.Author,
629-
Version: lib.Version.String(),
630-
Maintainer: lib.Maintainer,
631-
Sentence: lib.Sentence,
632-
Paragraph: lib.Paragraph,
633-
Website: lib.Website,
634-
Category: lib.Category,
635-
Architectures: lib.Architectures,
636-
Types: lib.Types,
637-
}
638-
}
639-
return &rpc.LibraryRelease{}
640-
}
641-
642524
// LoadSketch collects and returns all files composing a sketch
643525
func LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) {
644526
// TODO: This should be a ToRpc function for the Sketch struct

commands/outdated/outdated.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// This file is part of arduino-cli.
2+
//
3+
// Copyright 2022 ARDUINO SA (http://www.arduino.cc/)
4+
//
5+
// This software is released under the GNU General Public License version 3,
6+
// which covers the main part of arduino-cli.
7+
// The terms of this license can be found at:
8+
// https://www.gnu.org/licenses/gpl-3.0.en.html
9+
//
10+
// You can be released from the requirements of the above licenses by purchasing
11+
// a commercial license. Buying such a license is mandatory if you want to
12+
// modify or otherwise use the software for commercial activities involving the
13+
// Arduino software without disclosing the source code of your own applications.
14+
// To purchase a commercial license, send an email to [email protected].
15+
16+
package outdated
17+
18+
import (
19+
"context"
20+
21+
"github.com/arduino/arduino-cli/commands/core"
22+
"github.com/arduino/arduino-cli/commands/lib"
23+
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
24+
)
25+
26+
// Outdated returns a list struct containing both Core and Libraries that can be updated
27+
func Outdated(ctx context.Context, req *rpc.OutdatedRequest) (*rpc.OutdatedResponse, error) {
28+
libraryListResponse, err := lib.LibraryList(ctx, &rpc.LibraryListRequest{
29+
Instance: req.GetInstance(),
30+
Updatable: true,
31+
})
32+
if err != nil {
33+
return nil, err
34+
}
35+
36+
getPlatformsResp, err := core.GetPlatforms(&rpc.PlatformListRequest{
37+
Instance: req.GetInstance(),
38+
UpdatableOnly: true,
39+
})
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
return &rpc.OutdatedResponse{
45+
OutdatedLibraries: libraryListResponse.GetInstalledLibraries(),
46+
OutdatedPlatforms: getPlatformsResp,
47+
}, nil
48+
}

commands/upgrade/upgrade.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,18 @@ import (
2121

2222
"github.com/arduino/arduino-cli/commands/core"
2323
"github.com/arduino/arduino-cli/commands/lib"
24+
"github.com/arduino/arduino-cli/commands/outdated"
2425
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2526
)
2627

2728
// Upgrade downloads and installs outdated Cores and Libraries
2829
func Upgrade(ctx context.Context, req *rpc.UpgradeRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error {
29-
libraryListResponse, err := lib.LibraryList(ctx, &rpc.LibraryListRequest{
30-
Instance: req.GetInstance(),
31-
Updatable: true,
32-
})
30+
outdatedResp, err := outdated.Outdated(ctx, &rpc.OutdatedRequest{Instance: req.GetInstance()})
3331
if err != nil {
3432
return err
3533
}
3634

37-
getPlatformsResp, err := core.GetPlatforms(&rpc.PlatformListRequest{
38-
Instance: req.GetInstance(),
39-
UpdatableOnly: true,
40-
})
41-
if err != nil {
42-
return err
43-
}
44-
45-
for _, libToUpgrade := range libraryListResponse.GetInstalledLibraries() {
35+
for _, libToUpgrade := range outdatedResp.GetOutdatedLibraries() {
4636
err := lib.LibraryInstall(ctx, &rpc.LibraryInstallRequest{
4737
Instance: req.GetInstance(),
4838
Name: libToUpgrade.GetLibrary().GetName(),
@@ -52,7 +42,7 @@ func Upgrade(ctx context.Context, req *rpc.UpgradeRequest, downloadCB rpc.Downlo
5242
}
5343
}
5444

55-
for _, platformToUpgrade := range getPlatformsResp {
45+
for _, platformToUpgrade := range outdatedResp.GetOutdatedPlatforms() {
5646
split := strings.Split(platformToUpgrade.GetId(), ":")
5747
_, err := core.PlatformUpgrade(ctx, &rpc.PlatformUpgradeRequest{
5848
Instance: req.GetInstance(),

0 commit comments

Comments
 (0)