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.
This commit is contained in:
clawbot
2026-03-14 17:45:31 -07:00
parent 82a93c4be6
commit 01c349ada1

View File

@@ -123,7 +123,7 @@ func (v *Vaultik) Restore(opts *RestoreOptions) error {
// Create progress bar if output is a terminal // Create progress bar if output is a terminal
var bar *progressbar.ProgressBar var bar *progressbar.ProgressBar
if isTerminal() { if v.isTerminal() {
bar = progressbar.NewOptions64( bar = progressbar.NewOptions64(
totalBytesExpected, totalBytesExpected,
progressbar.OptionSetDescription("Restoring"), progressbar.OptionSetDescription("Restoring"),
@@ -573,7 +573,7 @@ func (v *Vaultik) verifyRestoredFiles(
// Create progress bar if output is a terminal // Create progress bar if output is a terminal
var bar *progressbar.ProgressBar var bar *progressbar.ProgressBar
if isTerminal() { if v.isTerminal() {
bar = progressbar.NewOptions64( bar = progressbar.NewOptions64(
totalBytes, totalBytes,
progressbar.OptionSetDescription("Verifying"), progressbar.OptionSetDescription("Verifying"),
@@ -681,7 +681,16 @@ func (v *Vaultik) verifyFile(
return bytesVerified, nil return bytesVerified, nil
} }
// isTerminal returns true if stdout is a terminal // isTerminal returns true if stdout is a terminal.
func isTerminal() bool { // It checks whether v.Stdout implements Fd() (i.e. is an *os.File),
return term.IsTerminal(int(os.Stdout.Fd())) // 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()))
} }