mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
Disable ETUI for piped input (#571)
* fixed piped input Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * allow pipedinput helper to raise an error Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * factor out verbosity check to function Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
parent
6f3fa494d7
commit
5e315c0f17
@ -217,10 +217,21 @@ func packagesExec(_ *cobra.Command, args []string) error {
|
|||||||
setupSignals(),
|
setupSignals(),
|
||||||
eventSubscription,
|
eventSubscription,
|
||||||
stereoscope.Cleanup,
|
stereoscope.Cleanup,
|
||||||
ui.Select(appConfig.CliOptions.Verbosity > 0, appConfig.Quiet, reporter)...,
|
ui.Select(isVerbose(), appConfig.Quiet, reporter)...,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isVerbose() (result bool) {
|
||||||
|
isPipedInput, err := internal.IsPipedInput()
|
||||||
|
if err != nil {
|
||||||
|
// since we can't tell if there was piped input we assume that there could be to disable the ETUI
|
||||||
|
log.Warnf("unable to determine if there is piped input: %+v", err)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// verbosity should consider if there is piped input (in which case we should not show the ETUI)
|
||||||
|
return appConfig.CliOptions.Verbosity > 0 || isPipedInput
|
||||||
|
}
|
||||||
|
|
||||||
func packagesExecWorker(userInput string) <-chan error {
|
func packagesExecWorker(userInput string) <-chan error {
|
||||||
errs := make(chan error)
|
errs := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
|
|||||||
@ -83,7 +83,7 @@ func powerUserExec(_ *cobra.Command, args []string) error {
|
|||||||
setupSignals(),
|
setupSignals(),
|
||||||
eventSubscription,
|
eventSubscription,
|
||||||
stereoscope.Cleanup,
|
stereoscope.Cleanup,
|
||||||
ui.Select(appConfig.CliOptions.Verbosity > 0, appConfig.Quiet, reporter)...,
|
ui.Select(isVerbose(), appConfig.Quiet, reporter)...,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -124,35 +124,38 @@ func (cfg *Application) parseUploadOptions() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *Application) parseLogLevelOption() error {
|
func (cfg *Application) parseLogLevelOption() error {
|
||||||
if cfg.Quiet {
|
switch {
|
||||||
|
case cfg.Quiet:
|
||||||
// TODO: this is bad: quiet option trumps all other logging options (such as to a file on disk)
|
// TODO: this is bad: quiet option trumps all other logging options (such as to a file on disk)
|
||||||
// we should be able to quiet the console logging and leave file logging alone...
|
// we should be able to quiet the console logging and leave file logging alone...
|
||||||
// ... this will be an enhancement for later
|
// ... this will be an enhancement for later
|
||||||
cfg.Log.LevelOpt = logrus.PanicLevel
|
cfg.Log.LevelOpt = logrus.PanicLevel
|
||||||
} else {
|
case cfg.Log.Level != "":
|
||||||
if cfg.Log.Level != "" {
|
if cfg.CliOptions.Verbosity > 0 {
|
||||||
if cfg.CliOptions.Verbosity > 0 {
|
return fmt.Errorf("cannot explicitly set log level (cfg file or env var) and use -v flag together")
|
||||||
return fmt.Errorf("cannot explicitly set log level (cfg file or env var) and use -v flag together")
|
}
|
||||||
}
|
|
||||||
|
|
||||||
lvl, err := logrus.ParseLevel(strings.ToLower(cfg.Log.Level))
|
lvl, err := logrus.ParseLevel(strings.ToLower(cfg.Log.Level))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("bad log level configured (%q): %w", cfg.Log.Level, err)
|
return fmt.Errorf("bad log level configured (%q): %w", cfg.Log.Level, err)
|
||||||
}
|
}
|
||||||
// set the log level explicitly
|
|
||||||
cfg.Log.LevelOpt = lvl
|
cfg.Log.LevelOpt = lvl
|
||||||
} else {
|
if cfg.Log.LevelOpt >= logrus.InfoLevel {
|
||||||
// set the log level implicitly
|
cfg.CliOptions.Verbosity = 1
|
||||||
switch v := cfg.CliOptions.Verbosity; {
|
}
|
||||||
case v == 1:
|
default:
|
||||||
cfg.Log.LevelOpt = logrus.InfoLevel
|
|
||||||
case v >= 2:
|
switch v := cfg.CliOptions.Verbosity; {
|
||||||
cfg.Log.LevelOpt = logrus.DebugLevel
|
case v == 1:
|
||||||
default:
|
cfg.Log.LevelOpt = logrus.InfoLevel
|
||||||
cfg.Log.LevelOpt = logrus.ErrorLevel
|
case v >= 2:
|
||||||
}
|
cfg.Log.LevelOpt = logrus.DebugLevel
|
||||||
|
default:
|
||||||
|
cfg.Log.LevelOpt = logrus.ErrorLevel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
internal/input.go
Normal file
16
internal/input.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsPipedInput returns true if there is no input device, which means the user **may** be providing input via a pipe.
|
||||||
|
func IsPipedInput() (bool, error) {
|
||||||
|
fi, err := os.Stdin.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("unable to determine if there is piped input: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fi.Mode()&os.ModeCharDevice == 0, nil
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user