Skip to content

Commit 22111d9

Browse files
committed
Refactored automatic builtin-tool installation
1 parent b06324b commit 22111d9

File tree

1 file changed

+19
-24
lines changed

1 file changed

+19
-24
lines changed

Diff for: commands/instances.go

+19-24
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,18 @@ func GetLibraryManager(req rpc.InstanceCommand) *librariesmanager.LibrariesManag
130130
return i.lm
131131
}
132132

133-
func installToolIfMissing(pme *packagemanager.Explorer, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (bool, error) {
134-
if tool.IsInstalled() {
135-
return false, nil
136-
}
133+
func installTool(pm *packagemanager.PackageManager, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error {
134+
pme, release := pm.NewExplorer()
135+
defer release()
137136
taskCB(&rpc.TaskProgress{Name: tr("Downloading missing tool %s", tool)})
138137
if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil {
139-
return false, fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err)
138+
return fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err)
140139
}
141140
taskCB(&rpc.TaskProgress{Completed: true})
142141
if err := pme.InstallTool(tool, taskCB); err != nil {
143-
return false, fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err)
142+
return fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err)
144143
}
145-
return true, nil
144+
return nil
146145
}
147146

148147
// Create a new CoreInstance ready to be initialized, supporting directories are also created.
@@ -328,31 +327,27 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
328327
// otherwise we wouldn't find them and reinstall them each time
329328
// and they would never get reloaded.
330329

331-
builtinToolReleases := []*cores.ToolRelease{}
330+
builtinToolsToInstall := []*cores.ToolRelease{}
332331
for name, tool := range pmb.GetOrCreatePackage("builtin").Tools {
333-
latestRelease := tool.LatestRelease()
334-
if latestRelease == nil {
332+
latest := tool.LatestRelease()
333+
if latest == nil {
335334
s := status.Newf(codes.Internal, tr("can't find latest release of tool %s", name))
336335
responseError(s)
337-
continue
336+
} else if !latest.IsInstalled() {
337+
builtinToolsToInstall = append(builtinToolsToInstall, latest)
338338
}
339-
builtinToolReleases = append(builtinToolReleases, latestRelease)
340339
}
341340

342-
// Install tools if necessary
343-
toolsHaveBeenInstalled := false
344-
for _, toolRelease := range builtinToolReleases {
345-
installed, err := instance.installToolIfMissing(toolRelease, downloadCallback, taskCallback)
346-
if err != nil {
347-
s := status.Newf(codes.Internal, err.Error())
348-
responseError(s)
349-
continue
341+
// Install builtin tools if necessary
342+
if len(builtinToolsToInstall) > 0 {
343+
for _, toolRelease := range builtinToolsToInstall {
344+
if err := installTool(pmb.Build(), toolRelease, downloadCallback, taskCallback); err != nil {
345+
s := status.Newf(codes.Internal, err.Error())
346+
responseError(s)
347+
}
350348
}
351-
toolsHaveBeenInstalled = toolsHaveBeenInstalled || installed
352-
}
353349

354-
if toolsHaveBeenInstalled {
355-
// We installed at least one new tool after loading hardware
350+
// We installed at least one builtin tool after loading hardware
356351
// so we must reload again otherwise we would never found them.
357352
for _, err := range loadBuiltinTools() {
358353
s := &arduino.PlatformLoadingError{Cause: err}

0 commit comments

Comments
 (0)