Skip to content

Commit c4b8b03

Browse files
authored
fix: suppress wait messages and progress bars in quiet mode (#41)
Signed-off-by: Fnuworsu <nuworsufelix49@gmail.com>
1 parent 344e4e9 commit c4b8b03

File tree

5 files changed

+79
-7
lines changed

5 files changed

+79
-7
lines changed

internal/app/azldev/app.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ func (a *App) Execute(args []string) int {
248248
//
249249
stdioLogger := a.initStdioLogging()
250250

251-
if err := setEventListener(stdioLogger, envOptions); err != nil {
251+
if err := setEventListener(stdioLogger, a.quiet, envOptions); err != nil {
252252
slog.Error("Error setting event listener.", "err", err)
253253

254254
return 1
@@ -365,7 +365,7 @@ func (a *App) reInitLoggingWithLogFile(envOptions *EnvOptions) error {
365365
return fmt.Errorf("error re-initializing file logging:\n%w", err)
366366
}
367367

368-
err = setEventListener(logger, envOptions)
368+
err = setEventListener(logger, a.quiet, envOptions)
369369
if err != nil {
370370
return fmt.Errorf("error re-setting event listener:\n%w", err)
371371
}
@@ -429,8 +429,8 @@ func (a *App) handlePostInitCallbacks(env *Env) error {
429429
return nil
430430
}
431431

432-
func setEventListener(stdioLogger *slog.Logger, envOptions *EnvOptions) error {
433-
eventListener, err := NewEventListener(stdioLogger)
432+
func setEventListener(stdioLogger *slog.Logger, quiet bool, envOptions *EnvOptions) error {
433+
eventListener, err := NewEventListener(stdioLogger, quiet)
434434
if err != nil {
435435
return fmt.Errorf("error initializing event listener:\n%w", err)
436436
}

internal/app/azldev/core/testutils/testenv.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func setUpEventListener(t *testing.T, testEnv *TestEnv) {
9797

9898
testLogHandler := slogassert.New(t, slog.LevelDebug, nil)
9999
testEventLogger := slog.New(testLogHandler)
100-
testEventListener, err := azldev.NewEventListener(testEventLogger)
100+
testEventListener, err := azldev.NewEventListener(testEventLogger, false)
101101
require.NoError(t, err)
102102

103103
testEnv.EventListener = testEventListener

internal/app/azldev/event.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type event struct {
1818
parentEventListener *appEventListener
1919
name string
2020
spinner *spinner.Spinner
21+
quiet bool
2122

2223
lastReportedCompletionRatio float64
2324

@@ -49,6 +50,10 @@ func (e *event) End() {
4950
}
5051

5152
func (e *event) SetLongRunning(longRunningText string) {
53+
if e.quiet {
54+
return
55+
}
56+
5257
const percent = 100
5358

5459
// Start an indeterminate spinner to indicate to the user that *something* is happening.
@@ -60,6 +65,10 @@ func (e *event) SetLongRunning(longRunningText string) {
6065
}
6166

6267
func (e *event) SetProgress(unitsComplete int64, totalUnits int64) {
68+
if e.quiet {
69+
return
70+
}
71+
6372
// For now, only update progress visually when the completion ratio has increased by at least 1%
6473
// since progress was last rendered.
6574
const minRatioIncreaseForUpdate = 0.01

internal/app/azldev/event_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
//nolint:testpackage // testing unexported internal types
5+
package azldev
6+
7+
import (
8+
"io"
9+
"os"
10+
"testing"
11+
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/require"
14+
)
15+
16+
func captureStderr(t *testing.T, action func()) string {
17+
t.Helper()
18+
19+
originalStderr := os.Stderr
20+
reader, writer, err := os.Pipe()
21+
require.NoError(t, err)
22+
23+
t.Cleanup(func() {
24+
os.Stderr = originalStderr
25+
_ = writer.Close()
26+
_ = reader.Close()
27+
})
28+
29+
os.Stderr = writer
30+
31+
action()
32+
33+
require.NoError(t, writer.Close())
34+
35+
os.Stderr = originalStderr
36+
37+
output, err := io.ReadAll(reader)
38+
require.NoError(t, err)
39+
40+
return string(output)
41+
}
42+
43+
func TestEvent_QuietModeSkipsLongRunningAndProgressRendering(t *testing.T) {
44+
testEvent := &event{
45+
quiet: true,
46+
}
47+
48+
stderrOutput := captureStderr(t, func() {
49+
testEvent.SetLongRunning("working")
50+
testEvent.SetProgress(1, 10)
51+
})
52+
53+
assert.Empty(t, stderrOutput)
54+
assert.Nil(t, testEvent.spinner)
55+
assert.False(t, testEvent.initializedProgressBar)
56+
assert.Zero(t, testEvent.lastReportedCompletionRatio)
57+
}

internal/app/azldev/eventlistener.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@ import (
1616
type appEventListener struct {
1717
eventLevel int
1818
eventLogger *slog.Logger
19+
quiet bool
1920
}
2021

2122
// Ensure [appEventListener] implements [opctx.EventListener].
2223
var _ opctx.EventListener = &appEventListener{}
2324

2425
// NewEventListener creates a new event listener for the environment.
25-
func NewEventListener(eventLogger *slog.Logger) (*appEventListener, error) {
26+
func NewEventListener(eventLogger *slog.Logger, quiet bool) (*appEventListener, error) {
2627
if eventLogger == nil {
2728
return nil, errors.New("event logger cannot be nil")
2829
}
2930

3031
return &appEventListener{
3132
eventLevel: 0,
3233
eventLogger: eventLogger,
34+
quiet: quiet,
3335
}, nil
3436
}
3537

@@ -42,7 +44,10 @@ func (el *appEventListener) StartEvent(name string, args ...any) opctx.Event {
4244

4345
prefix := strings.Repeat(" ", el.eventLevel*spacesPerLevel)
4446

45-
fmt.Fprintf(os.Stderr, "\r")
47+
if !el.quiet {
48+
fmt.Fprintf(os.Stderr, "\r")
49+
}
50+
4651
el.eventLogger.Info(prefix+name, args...)
4752
}
4853

@@ -51,6 +56,7 @@ func (el *appEventListener) StartEvent(name string, args ...any) opctx.Event {
5156
return &event{
5257
parentEventListener: el,
5358
name: name,
59+
quiet: el.quiet,
5460
}
5561
}
5662

0 commit comments

Comments
 (0)