16
16
package packagemanager
17
17
18
18
import (
19
+ "bytes"
19
20
"encoding/json"
20
21
"fmt"
21
22
"runtime"
@@ -27,7 +28,6 @@ import (
27
28
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
28
29
"github.com/arduino/go-paths-helper"
29
30
"github.com/pkg/errors"
30
- "github.com/sirupsen/logrus"
31
31
)
32
32
33
33
// DownloadAndInstallPlatformUpgrades runs a full installation process to upgrade the given platform.
@@ -175,9 +175,13 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
175
175
if ! platformRelease .IsInstalled () {
176
176
return errors .New (tr ("platform not installed" ))
177
177
}
178
- if err := pme .RunPostInstallScript (platformRelease .InstallDir ); err != nil {
178
+ stdout , stderr , err := pme .RunPostInstallScript (platformRelease .InstallDir )
179
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stdout )})
180
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stderr )})
181
+ if err != nil {
179
182
taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err )})
180
183
}
184
+
181
185
} else {
182
186
log .Info ("Skipping platform configuration." )
183
187
taskCB (& rpc.TaskProgress {Message : tr ("Skipping platform configuration." )})
@@ -227,7 +231,7 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
227
231
228
232
// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
229
233
// specified platformRelease or toolRelease.
230
- func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) error {
234
+ func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) ([] byte , [] byte , error ) {
231
235
postInstallFilename := "post_install.sh"
232
236
if runtime .GOOS == "windows" {
233
237
postInstallFilename = "post_install.bat"
@@ -236,23 +240,16 @@ func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
236
240
if postInstall .Exist () && postInstall .IsNotDir () {
237
241
cmd , err := executils .NewProcessFromPath (pme .GetEnvVarsForSpawnedProcess (), postInstall )
238
242
if err != nil {
239
- return err
243
+ return [] byte {}, [] byte {}, err
240
244
}
241
- logInfo := pme .log .WriterLevel (logrus .InfoLevel )
242
- logErr := pme .log .WriterLevel (logrus .ErrorLevel )
243
- defer func () {
244
- logInfo .Close ()
245
- logErr .Close ()
246
- }()
247
- cmd .RedirectStdoutTo (logInfo )
248
- cmd .RedirectStderrTo (logErr )
249
-
245
+ cmdStdout , cmdStderr := bytes .NewBuffer ([]byte {}), bytes .NewBuffer ([]byte {})
246
+ cmd .RedirectStdoutTo (cmdStdout )
247
+ cmd .RedirectStderrTo (cmdStderr )
250
248
cmd .SetDirFromPath (installDir )
251
- if err := cmd .Run (); err != nil {
252
- return err
253
- }
249
+ err = cmd .Run ()
250
+ return cmdStdout .Bytes (), cmdStderr .Bytes (), err
254
251
}
255
- return nil
252
+ return [] byte {}, [] byte {}, nil
256
253
}
257
254
258
255
// IsManagedPlatformRelease returns true if the PlatforRelease is managed by the PackageManager
@@ -344,7 +341,10 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task
344
341
if ! skipPostInstall {
345
342
log .Info ("Running tool post_install script" )
346
343
taskCB (& rpc.TaskProgress {Message : tr ("Configuring tool." )})
347
- if err := pme .RunPostInstallScript (toolRelease .InstallDir ); err != nil {
344
+ stdout , stderr , err := pme .RunPostInstallScript (toolRelease .InstallDir )
345
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stdout )})
346
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stderr )})
347
+ if err != nil {
348
348
taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure tool: %s" , err )})
349
349
}
350
350
} else {
@@ -421,3 +421,12 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool {
421
421
}
422
422
return false
423
423
}
424
+
425
+ func skipEmptyMessageTaskProgressCB (taskCB rpc.TaskProgressCB ) rpc.TaskProgressCB {
426
+ return func (msg * rpc.TaskProgress ) {
427
+ if msg != nil && len (msg .Message ) == 0 {
428
+ return
429
+ }
430
+ taskCB (msg )
431
+ }
432
+ }
0 commit comments