@@ -130,19 +130,18 @@ func GetLibraryManager(req rpc.InstanceCommand) *librariesmanager.LibrariesManag
130
130
return i .lm
131
131
}
132
132
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 ()
137
136
taskCB (& rpc.TaskProgress {Name : tr ("Downloading missing tool %s" , tool )})
138
137
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 )
140
139
}
141
140
taskCB (& rpc.TaskProgress {Completed : true })
142
141
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 )
144
143
}
145
- return true , nil
144
+ return nil
146
145
}
147
146
148
147
// 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
328
327
// otherwise we wouldn't find them and reinstall them each time
329
328
// and they would never get reloaded.
330
329
331
- builtinToolReleases := []* cores.ToolRelease {}
330
+ builtinToolsToInstall := []* cores.ToolRelease {}
332
331
for name , tool := range pmb .GetOrCreatePackage ("builtin" ).Tools {
333
- latestRelease := tool .LatestRelease ()
334
- if latestRelease == nil {
332
+ latest := tool .LatestRelease ()
333
+ if latest == nil {
335
334
s := status .Newf (codes .Internal , tr ("can't find latest release of tool %s" , name ))
336
335
responseError (s )
337
- continue
336
+ } else if ! latest .IsInstalled () {
337
+ builtinToolsToInstall = append (builtinToolsToInstall , latest )
338
338
}
339
- builtinToolReleases = append (builtinToolReleases , latestRelease )
340
339
}
341
340
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
+ }
350
348
}
351
- toolsHaveBeenInstalled = toolsHaveBeenInstalled || installed
352
- }
353
349
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
356
351
// so we must reload again otherwise we would never found them.
357
352
for _ , err := range loadBuiltinTools () {
358
353
s := & arduino.PlatformLoadingError {Cause : err }
0 commit comments