fix: NullIndicator for truly silent TUI mode - no stdout at all

This commit is contained in:
2025-11-05 13:55:41 +00:00
parent e2596c4207
commit a5560fd6b1
14 changed files with 32 additions and 6 deletions

View File

@ -62,6 +62,11 @@ func NewWithProgress(cfg *config.Config, log logger.Logger, db database.Database
// NewSilent creates a new backup engine in silent mode (for TUI)
func NewSilent(cfg *config.Config, log logger.Logger, db database.Database, progressIndicator progress.Indicator) *Engine {
// If no indicator provided, use null indicator (no output)
if progressIndicator == nil {
progressIndicator = progress.NewNullIndicator()
}
detailedReporter := progress.NewDetailedReporter(progressIndicator, &loggerAdapter{logger: log})
return &Engine{
@ -278,9 +283,16 @@ func (e *Engine) BackupCluster(ctx context.Context) error {
}
}
// Use a quiet progress indicator to avoid duplicate messages
quietProgress := progress.NewQuietLineByLine()
quietProgress.Start("Starting cluster backup (all databases)")
// Use appropriate progress indicator based on silent mode
var quietProgress progress.Indicator
if e.silent {
// In silent mode (TUI), use null indicator - no stdout output at all
quietProgress = progress.NewNullIndicator()
} else {
// In CLI mode, use quiet line-by-line output
quietProgress = progress.NewQuietLineByLine()
quietProgress.Start("Starting cluster backup (all databases)")
}
// Ensure backup directory exists
if err := os.MkdirAll(e.cfg.BackupDir, 0755); err != nil {

View File

@ -395,4 +395,18 @@ func NewIndicator(interactive bool, indicatorType string) Indicator {
default:
return NewLineByLine() // Default to line-by-line for better compatibility
}
}
}
// NullIndicator is a no-op indicator that produces no output (for TUI mode)
type NullIndicator struct{}
// NewNullIndicator creates an indicator that does nothing
func NewNullIndicator() *NullIndicator {
return &NullIndicator{}
}
func (n *NullIndicator) Start(message string) {}
func (n *NullIndicator) Update(message string) {}
func (n *NullIndicator) Complete(message string) {}
func (n *NullIndicator) Fail(message string) {}
func (n *NullIndicator) Stop() {}