@@ -138,7 +138,7 @@ func installTool(pm *packagemanager.PackageManager, tool *cores.ToolRelease, dow
138138 return fmt .Errorf (tr ("downloading %[1]s tool: %[2]s" ), tool , err )
139139 }
140140 taskCB (& rpc.TaskProgress {Completed : true })
141- if err := pme .InstallTool (tool , taskCB ); err != nil {
141+ if err := pme .InstallTool (tool , taskCB , true ); err != nil {
142142 return fmt .Errorf (tr ("installing %[1]s tool: %[2]s" ), tool , err )
143143 }
144144 return nil
@@ -307,23 +307,35 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
307307 for _ , u := range urls {
308308 URL , err := utils .URLParse (u )
309309 if err != nil {
310- s := status .Newf (codes .InvalidArgument , tr ("Invalid additional URL: %v" ), err )
311- responseError (s )
310+ e := & arduino.InitFailedError {
311+ Code : codes .InvalidArgument ,
312+ Cause : fmt .Errorf (tr ("Invalid additional URL: %v" , err )),
313+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL ,
314+ }
315+ responseError (e .ToRPCStatus ())
312316 continue
313317 }
314318
315319 if URL .Scheme == "file" {
316320 _ , err := pmb .LoadPackageIndexFromFile (paths .New (URL .Path ))
317321 if err != nil {
318- s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
319- responseError (s )
322+ e := & arduino.InitFailedError {
323+ Code : codes .FailedPrecondition ,
324+ Cause : fmt .Errorf (tr ("Loading index file: %v" , err )),
325+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR ,
326+ }
327+ responseError (e .ToRPCStatus ())
320328 }
321329 continue
322330 }
323331
324332 if err := pmb .LoadPackageIndex (URL ); err != nil {
325- s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
326- responseError (s )
333+ e := & arduino.InitFailedError {
334+ Code : codes .FailedPrecondition ,
335+ Cause : fmt .Errorf (tr ("Loading index file: %v" , err )),
336+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR ,
337+ }
338+ responseError (e .ToRPCStatus ())
327339 }
328340 }
329341
@@ -335,8 +347,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
335347 for name , tool := range pmb .GetOrCreatePackage ("builtin" ).Tools {
336348 latest := tool .LatestRelease ()
337349 if latest == nil {
338- s := status .Newf (codes .Internal , tr ("can't find latest release of tool %s" , name ))
339- responseError (s )
350+ e := & arduino.InitFailedError {
351+ Code : codes .Internal ,
352+ Cause : fmt .Errorf (tr ("can't find latest release of tool %s" , name )),
353+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
354+ }
355+ responseError (e .ToRPCStatus ())
340356 } else if ! latest .IsInstalled () {
341357 builtinToolsToInstall = append (builtinToolsToInstall , latest )
342358 }
@@ -346,8 +362,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
346362 if len (builtinToolsToInstall ) > 0 {
347363 for _ , toolRelease := range builtinToolsToInstall {
348364 if err := installTool (pmb .Build (), toolRelease , downloadCallback , taskCallback ); err != nil {
349- s := status .Newf (codes .Internal , err .Error ())
350- responseError (s )
365+ e := & arduino.InitFailedError {
366+ Code : codes .Internal ,
367+ Cause : err ,
368+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
369+ }
370+ responseError (e .ToRPCStatus ())
351371 }
352372 }
353373
0 commit comments