16
16
package packagemanager
17
17
18
18
import (
19
+ "bytes"
19
20
"encoding/json"
20
21
"fmt"
21
22
"runtime"
@@ -174,9 +175,13 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
174
175
if ! platformRelease .IsInstalled () {
175
176
return errors .New (tr ("platform not installed" ))
176
177
}
177
- if err := pme .RunPostInstallScript (platformRelease .InstallDir ); err != nil {
178
- taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err )})
178
+ stdout , stderr , err := pme .RunPostInstallScript (platformRelease .InstallDir )
179
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stdout ), Completed : true })
180
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stderr ), Completed : true })
181
+ if err != nil {
182
+ taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err ), Completed : true })
179
183
}
184
+
180
185
} else {
181
186
log .Info ("Skipping platform configuration." )
182
187
taskCB (& rpc.TaskProgress {Message : tr ("Skipping platform configuration." )})
@@ -226,7 +231,7 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
226
231
227
232
// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
228
233
// specified platformRelease or toolRelease.
229
- func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) error {
234
+ func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) ([] byte , [] byte , error ) {
230
235
postInstallFilename := "post_install.sh"
231
236
if runtime .GOOS == "windows" {
232
237
postInstallFilename = "post_install.bat"
@@ -235,14 +240,16 @@ func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
235
240
if postInstall .Exist () && postInstall .IsNotDir () {
236
241
cmd , err := executils .NewProcessFromPath (pme .GetEnvVarsForSpawnedProcess (), postInstall )
237
242
if err != nil {
238
- return err
243
+ return [] byte {}, [] byte {}, err
239
244
}
245
+ cmdStdout , cmdStderr := bytes .NewBuffer ([]byte {}), bytes .NewBuffer ([]byte {})
246
+ cmd .RedirectStdoutTo (cmdStdout )
247
+ cmd .RedirectStderrTo (cmdStderr )
240
248
cmd .SetDirFromPath (installDir )
241
- if err := cmd .Run (); err != nil {
242
- return err
243
- }
249
+ err = cmd .Run ()
250
+ return cmdStdout .Bytes (), cmdStderr .Bytes (), err
244
251
}
245
- return nil
252
+ return [] byte {}, [] byte {}, nil
246
253
}
247
254
248
255
// IsManagedPlatformRelease returns true if the PlatforRelease is managed by the PackageManager
@@ -335,7 +342,10 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task
335
342
if ! skipPostInstall {
336
343
log .Info ("Running tool post_install script" )
337
344
taskCB (& rpc.TaskProgress {Message : tr ("Configuring tool." )})
338
- if err := pme .RunPostInstallScript (toolRelease .InstallDir ); err != nil {
345
+ stdout , stderr , err := pme .RunPostInstallScript (toolRelease .InstallDir )
346
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stdout )})
347
+ skipEmptyMessageTaskProgressCB (taskCB )(& rpc.TaskProgress {Message : string (stderr )})
348
+ if err != nil {
339
349
taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure tool: %s" , err )})
340
350
}
341
351
} else {
@@ -412,3 +422,12 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool {
412
422
}
413
423
return false
414
424
}
425
+
426
+ func skipEmptyMessageTaskProgressCB (taskCB rpc.TaskProgressCB ) rpc.TaskProgressCB {
427
+ return func (msg * rpc.TaskProgress ) {
428
+ if msg != nil && len (msg .Message ) == 0 {
429
+ return
430
+ }
431
+ taskCB (msg )
432
+ }
433
+ }
0 commit comments