From 01c349ada111b26c40594419d003fd18742a5f9b Mon Sep 17 00:00:00 2001 From: clawbot Date: Sat, 14 Mar 2026 17:45:31 -0700 Subject: [PATCH] fix: use v.Stdout in isTerminal() instead of os.Stdout.Fd() Convert isTerminal() from a standalone function to a method on Vaultik that checks whether v.Stdout implements Fd() (i.e. is an *os.File). Falls back to non-terminal for non-file writers (e.g. in tests). Eliminates all direct os.Stdout/os.Stderr references from restore.go. --- internal/vaultik/restore.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/internal/vaultik/restore.go b/internal/vaultik/restore.go index 59528fe..3b974cf 100644 --- a/internal/vaultik/restore.go +++ b/internal/vaultik/restore.go @@ -123,7 +123,7 @@ func (v *Vaultik) Restore(opts *RestoreOptions) error { // Create progress bar if output is a terminal var bar *progressbar.ProgressBar - if isTerminal() { + if v.isTerminal() { bar = progressbar.NewOptions64( totalBytesExpected, progressbar.OptionSetDescription("Restoring"), @@ -573,7 +573,7 @@ func (v *Vaultik) verifyRestoredFiles( // Create progress bar if output is a terminal var bar *progressbar.ProgressBar - if isTerminal() { + if v.isTerminal() { bar = progressbar.NewOptions64( totalBytes, progressbar.OptionSetDescription("Verifying"), @@ -681,7 +681,16 @@ func (v *Vaultik) verifyFile( return bytesVerified, nil } -// isTerminal returns true if stdout is a terminal -func isTerminal() bool { - return term.IsTerminal(int(os.Stdout.Fd())) +// isTerminal returns true if stdout is a terminal. +// It checks whether v.Stdout implements Fd() (i.e. is an *os.File), +// and falls back to false for non-file writers (e.g. in tests). +func (v *Vaultik) isTerminal() bool { + type fder interface { + Fd() uintptr + } + f, ok := v.Stdout.(fder) + if !ok { + return false + } + return term.IsTerminal(int(f.Fd())) }