1616package packagemanager
1717
1818import (
19+ "bytes"
1920 "encoding/json"
2021 "fmt"
2122 "runtime"
@@ -174,9 +175,13 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
174175 if ! platformRelease .IsInstalled () {
175176 return errors .New (tr ("platform not installed" ))
176177 }
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 })
179183 }
184+
180185 } else {
181186 log .Info ("Skipping platform configuration." )
182187 taskCB (& rpc.TaskProgress {Message : tr ("Skipping platform configuration." )})
@@ -226,7 +231,7 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
226231
227232// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
228233// specified platformRelease or toolRelease.
229- func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) error {
234+ func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) ([] byte , [] byte , error ) {
230235 postInstallFilename := "post_install.sh"
231236 if runtime .GOOS == "windows" {
232237 postInstallFilename = "post_install.bat"
@@ -235,14 +240,16 @@ func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
235240 if postInstall .Exist () && postInstall .IsNotDir () {
236241 cmd , err := executils .NewProcessFromPath (pme .GetEnvVarsForSpawnedProcess (), postInstall )
237242 if err != nil {
238- return err
243+ return [] byte {}, [] byte {}, err
239244 }
245+ cmdStdout , cmdStderr := bytes .NewBuffer ([]byte {}), bytes .NewBuffer ([]byte {})
246+ cmd .RedirectStdoutTo (cmdStdout )
247+ cmd .RedirectStderrTo (cmdStderr )
240248 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
244251 }
245- return nil
252+ return [] byte {}, [] byte {}, nil
246253}
247254
248255// 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
335342 if ! skipPostInstall {
336343 log .Info ("Running tool post_install script" )
337344 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 {
339349 taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure tool: %s" , err )})
340350 }
341351 } else {
@@ -412,3 +422,12 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool {
412422 }
413423 return false
414424}
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