Skip to content

Commit 1bc3537

Browse files
committed
fix: log in feedback stream
1 parent 765d01d commit 1bc3537

File tree

2 files changed

+32
-49
lines changed

2 files changed

+32
-49
lines changed

Diff for: arduino/cores/packagemanager/install_uninstall.go

+27-18
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package packagemanager
1717

1818
import (
19+
"bytes"
1920
"encoding/json"
2021
"fmt"
2122
"runtime"
@@ -27,7 +28,6 @@ import (
2728
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2829
"github.com/arduino/go-paths-helper"
2930
"github.com/pkg/errors"
30-
"github.com/sirupsen/logrus"
3131
)
3232

3333
// DownloadAndInstallPlatformUpgrades runs a full installation process to upgrade the given platform.
@@ -175,9 +175,13 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
175175
if !platformRelease.IsInstalled() {
176176
return errors.New(tr("platform not installed"))
177177
}
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 {
179182
taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure platform: %s", err)})
180183
}
184+
181185
} else {
182186
log.Info("Skipping platform configuration.")
183187
taskCB(&rpc.TaskProgress{Message: tr("Skipping platform configuration.")})
@@ -227,7 +231,7 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
227231

228232
// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
229233
// specified platformRelease or toolRelease.
230-
func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
234+
func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) ([]byte, []byte, error) {
231235
postInstallFilename := "post_install.sh"
232236
if runtime.GOOS == "windows" {
233237
postInstallFilename = "post_install.bat"
@@ -236,23 +240,16 @@ func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
236240
if postInstall.Exist() && postInstall.IsNotDir() {
237241
cmd, err := executils.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), postInstall)
238242
if err != nil {
239-
return err
243+
return []byte{}, []byte{}, err
240244
}
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)
250248
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
254251
}
255-
return nil
252+
return []byte{}, []byte{}, nil
256253
}
257254

258255
// 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
344341
if !skipPostInstall {
345342
log.Info("Running tool post_install script")
346343
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 {
348348
taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure tool: %s", err)})
349349
}
350350
} else {
@@ -421,3 +421,12 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool {
421421
}
422422
return false
423423
}
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+
}

Diff for: arduino/cores/packagemanager/package_manager_test.go

+5-31
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616
package packagemanager_test
1717

1818
import (
19-
"bytes"
2019
"fmt"
21-
"io"
2220
"net/url"
2321
"os"
2422
"runtime"
@@ -30,8 +28,6 @@ import (
3028
"github.com/arduino/arduino-cli/configuration"
3129
"github.com/arduino/go-paths-helper"
3230
"github.com/arduino/go-properties-orderedmap"
33-
"github.com/sirupsen/logrus"
34-
"github.com/sirupsen/logrus/hooks/writer"
3531
"github.com/stretchr/testify/require"
3632
semver "go.bug.st/relaxed-semver"
3733
)
@@ -646,13 +642,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
646642
}
647643
}
648644

649-
type plainFormatter struct{}
650-
651-
func (f *plainFormatter) Format(e *logrus.Entry) ([]byte, error) {
652-
return []byte(e.Message), nil
653-
}
654645
func TestRunPostInstall(t *testing.T) {
655-
logger := logrus.StandardLogger()
656646
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
657647
pm := pmb.Build()
658648
pme, release := pm.NewExplorer()
@@ -661,23 +651,6 @@ func TestRunPostInstall(t *testing.T) {
661651
// prepare dummy post install script
662652
dir := paths.New(t.TempDir())
663653

664-
// capture logs for inspection
665-
infoBuffer, errorBuffer := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
666-
logger.SetOutput(io.Discard)
667-
logger.SetFormatter(&plainFormatter{})
668-
logger.AddHook(&writer.Hook{
669-
Writer: infoBuffer,
670-
LogLevels: []logrus.Level{
671-
logrus.InfoLevel,
672-
},
673-
})
674-
logger.AddHook(&writer.Hook{
675-
Writer: errorBuffer,
676-
LogLevels: []logrus.Level{
677-
logrus.ErrorLevel,
678-
},
679-
})
680-
681654
var scriptPath *paths.Path
682655
var err error
683656
if runtime.GOOS == "windows" {
@@ -697,9 +670,10 @@ func TestRunPostInstall(t *testing.T) {
697670
require.NoError(t, err)
698671
err = os.Chmod(scriptPath.String(), 0777)
699672
require.NoError(t, err)
700-
pme.RunPostInstallScript(dir)
701-
// `HasPrefix` because windows seem to add a trailing space at the end
673+
stdout, stderr, err := pme.RunPostInstallScript(dir)
674+
require.NoError(t, err)
702675

703-
require.Equal(t, "sent in stdout", strings.Trim(infoBuffer.String(), "\n\r "))
704-
require.Equal(t, "sent in stderr", strings.Trim(errorBuffer.String(), "\n\r "))
676+
// `HasPrefix` because windows seem to add a trailing space at the end
677+
require.Equal(t, "sent in stdout", strings.Trim(string(stdout), "\n\r "))
678+
require.Equal(t, "sent in stderr", strings.Trim(string(stderr), "\n\r "))
705679
}

0 commit comments

Comments
 (0)