Skip to content

Commit afdc20c

Browse files
authored
Optimization: skip Init() when no library or platform was installed (#1663)
* Optimization: skip commands.Init() when no library was installed * Optimization: skip commands.Init() when no platform was installed
1 parent b6d36c6 commit afdc20c

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

Diff for: commands/core/install.go

+14-12
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,15 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
4949
return nil, &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err}
5050
}
5151

52-
err = installPlatform(pm, platform, tools, downloadCB, taskCB, req.GetSkipPostInstall())
52+
didInstall, err := installPlatform(pm, platform, tools, downloadCB, taskCB, req.GetSkipPostInstall())
5353
if err != nil {
5454
return nil, err
5555
}
5656

57-
if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil {
58-
return nil, err
57+
if didInstall {
58+
if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil {
59+
return nil, err
60+
}
5961
}
6062

6163
return &rpc.PlatformInstallResponse{}, nil
@@ -64,14 +66,14 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
6466
func installPlatform(pm *packagemanager.PackageManager,
6567
platformRelease *cores.PlatformRelease, requiredTools []*cores.ToolRelease,
6668
downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB,
67-
skipPostInstall bool) error {
69+
skipPostInstall bool) (bool, error) {
6870
log := pm.Log.WithField("platform", platformRelease)
6971

7072
// Prerequisite checks before install
7173
if platformRelease.IsInstalled() {
7274
log.Warn("Platform already installed")
7375
taskCB(&rpc.TaskProgress{Name: tr("Platform %s already installed", platformRelease), Completed: true})
74-
return nil
76+
return false, nil
7577
}
7678
toolsToInstall := []*cores.ToolRelease{}
7779
for _, tool := range requiredTools {
@@ -87,18 +89,18 @@ func installPlatform(pm *packagemanager.PackageManager,
8789
taskCB(&rpc.TaskProgress{Name: tr("Downloading packages")})
8890
for _, tool := range toolsToInstall {
8991
if err := downloadTool(pm, tool, downloadCB); err != nil {
90-
return err
92+
return false, err
9193
}
9294
}
9395
if err := downloadPlatform(pm, platformRelease, downloadCB); err != nil {
94-
return err
96+
return false, err
9597
}
9698
taskCB(&rpc.TaskProgress{Completed: true})
9799

98100
// Install tools first
99101
for _, tool := range toolsToInstall {
100102
if err := commands.InstallToolRelease(pm, tool, taskCB); err != nil {
101-
return err
103+
return false, err
102104
}
103105
}
104106

@@ -124,14 +126,14 @@ func installPlatform(pm *packagemanager.PackageManager,
124126
var err error
125127
_, installedTools, err = pm.FindPlatformReleaseDependencies(platformRef)
126128
if err != nil {
127-
return &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", platformRef), Cause: err}
129+
return false, &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", platformRef), Cause: err}
128130
}
129131
}
130132

131133
// Install
132134
if err := pm.InstallPlatform(platformRelease); err != nil {
133135
log.WithError(err).Error("Cannot install platform")
134-
return &arduino.FailedInstallError{Message: tr("Cannot install platform"), Cause: err}
136+
return false, &arduino.FailedInstallError{Message: tr("Cannot install platform"), Cause: err}
135137
}
136138

137139
// If upgrading remove previous release
@@ -149,7 +151,7 @@ func installPlatform(pm *packagemanager.PackageManager,
149151
taskCB(&rpc.TaskProgress{Message: tr("Error rolling-back changes: %s", err)})
150152
}
151153

152-
return &arduino.FailedInstallError{Message: tr("Cannot upgrade platform"), Cause: uninstallErr}
154+
return false, &arduino.FailedInstallError{Message: tr("Cannot upgrade platform"), Cause: uninstallErr}
153155
}
154156

155157
// Uninstall unused tools
@@ -175,5 +177,5 @@ func installPlatform(pm *packagemanager.PackageManager,
175177

176178
log.Info("Platform installed")
177179
taskCB(&rpc.TaskProgress{Message: tr("Platform %s installed", platformRelease), Completed: true})
178-
return nil
180+
return true, nil
179181
}

Diff for: commands/core/upgrade.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func upgradePlatform(pm *packagemanager.PackageManager, platformRef *packagemana
7474
if err != nil {
7575
return &arduino.PlatformNotFoundError{Platform: platformRef.String()}
7676
}
77-
if err := installPlatform(pm, platformRelease, tools, downloadCB, taskCB, skipPostInstall); err != nil {
77+
if _, err := installPlatform(pm, platformRelease, tools, downloadCB, taskCB, skipPostInstall); err != nil {
7878
return err
7979
}
8080

Diff for: commands/lib/install.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func LibraryInstall(ctx context.Context, req *rpc.LibraryInstallRequest, downloa
6464
}
6565
}
6666

67+
didInstall := false
6768
for _, lib := range toInstall {
6869
libRelease, err := findLibraryIndexRelease(lm, &rpc.LibraryInstallRequest{
6970
Name: lib.Name,
@@ -78,13 +79,21 @@ func LibraryInstall(ctx context.Context, req *rpc.LibraryInstallRequest, downloa
7879
}
7980

8081
if err := installLibrary(lm, libRelease, taskCB); err != nil {
81-
return err
82+
if errors.Is(err, librariesmanager.ErrAlreadyInstalled) {
83+
continue
84+
} else {
85+
return err
86+
}
8287
}
88+
didInstall = true
8389
}
8490

85-
if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil {
86-
return err
91+
if didInstall {
92+
if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil {
93+
return err
94+
}
8795
}
96+
8897
return nil
8998
}
9099

@@ -94,7 +103,7 @@ func installLibrary(lm *librariesmanager.LibrariesManager, libRelease *libraries
94103
libPath, libReplaced, err := lm.InstallPrerequisiteCheck(libRelease)
95104
if errors.Is(err, librariesmanager.ErrAlreadyInstalled) {
96105
taskCB(&rpc.TaskProgress{Message: tr("Already installed %s", libRelease), Completed: true})
97-
return nil
106+
return err
98107
}
99108

100109
if err != nil {

Diff for: commands/lib/upgrade.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package lib
1717

1818
import (
19+
"errors"
20+
1921
"github.com/arduino/arduino-cli/arduino"
2022
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
2123
"github.com/arduino/arduino-cli/commands"
@@ -65,7 +67,9 @@ func upgrade(lm *librariesmanager.LibrariesManager, libs []*installedLib, downlo
6567
// Go through the list and install them
6668
for _, lib := range libs {
6769
if err := installLibrary(lm, lib.Available, taskCB); err != nil {
68-
return err
70+
if !errors.Is(err, librariesmanager.ErrAlreadyInstalled) {
71+
return err
72+
}
6973
}
7074
}
7175

0 commit comments

Comments
 (0)