Commit 10c9a72
committed
feat: add a quiet flag to suppress all output except for errors
Signed-off-by: Brian McGee <brian@bmcgee.ie>
diff --git a/cmd/root.go b/cmd/root.go
index 72348f1..cd3f8f7 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -144,13 +144,19 @@ func runE(v *viper.Viper, statz *stats.Stats, cmd *cobra.Command, args []string)
log.SetOutput(os.Stderr)
log.SetReportTimestamp(false)
- switch v.GetInt("verbose") {
- case 0:
- log.SetLevel(log.WarnLevel)
- case 1:
- log.SetLevel(log.InfoLevel)
- default:
- log.SetLevel(log.DebugLevel)
+ if v.GetBool("quiet") {
+ // if quiet, we only log errors
+ log.SetLevel(log.ErrorLevel)
+ } else {
+ // otherwise, the verbose flag controls the log level
+ switch v.GetInt("verbose") {
+ case 0:
+ log.SetLevel(log.WarnLevel)
+ case 1:
+ log.SetLevel(log.InfoLevel)
+ default:
+ log.SetLevel(log.DebugLevel)
+ }
}
// format
diff --git a/cmd/root_test.go b/cmd/root_test.go
index 2846504..628a69b 100644
--- a/cmd/root_test.go
+++ b/cmd/root_test.go
@@ -131,6 +131,33 @@ func TestOnUnmatched(t *testing.T) {
})
}
+func TestQuiet(t *testing.T) {
+ as := require.New(t)
+ tempDir := test.TempExamples(t)
+
+ test.ChangeWorkDir(t, tempDir)
+
+ // allow missing formatter
+ t.Setenv("TREEFMT_ALLOW_MISSING_FORMATTER", "true")
+
+ noOutput := func(out []byte) {
+ as.Empty(out)
+ }
+
+ treefmt(t, withArgs("-q"), withNoError(t), withStdout(noOutput), withStderr(noOutput))
+ treefmt(t, withArgs("--quiet"), withNoError(t), withStdout(noOutput), withStderr(noOutput))
+
+ t.Setenv("TREEFMT_QUIET", "true")
+ treefmt(t, withNoError(t), withStdout(noOutput), withStderr(noOutput))
+
+ t.Setenv("TREEFMT_ALLOW_MISSING_FORMATTER", "false")
+
+ // check it doesn't suppress errors
+ treefmt(t, withError(func(err error) {
+ as.ErrorContains(err, "error looking up 'foo-fmt'")
+ }))
+}
+
func TestCpuProfile(t *testing.T) {
as := require.New(t)
tempDir := test.TempExamples(t)
diff --git a/config/config.go b/config/config.go
index f5d8e7a..c10df3f 100644
--- a/config/config.go
+++ b/config/config.go
@@ -22,6 +22,7 @@ type Config struct {
Formatters []string `mapstructure:"formatters" toml:"formatters,omitempty"`
NoCache bool `mapstructure:"no-cache" toml:"-"` // not allowed in config
OnUnmatched string `mapstructure:"on-unmatched" toml:"on-unmatched,omitempty"`
+ Quiet bool `mapstructure:"quiet" toml:"-"` // not allowed in config
TreeRoot string `mapstructure:"tree-root" toml:"tree-root,omitempty"`
TreeRootFile string `mapstructure:"tree-root-file" toml:"tree-root-file,omitempty"`
Verbose uint8 `mapstructure:"verbose" toml:"verbose,omitempty"`
@@ -110,6 +111,9 @@ func SetFlags(fs *pflag.FlagSet) {
"verbose", "v",
"Set the verbosity of logs e.g. -vv. (env $TREEFMT_VERBOSE)",
)
+ fs.BoolP(
+ "quiet", "q", false, "Disable all logs except errors. (env $TREEFMT_QUIET)",
+ )
fs.String(
"walk", "auto",
"The method used to traverse the files within the tree root. Currently supports "+
diff --git a/config/config_test.go b/config/config_test.go
index 281e18a..ae6dc83 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -323,6 +323,36 @@ func TestNoCache(t *testing.T) {
checkValue(true)
}
+func TestQuiet(t *testing.T) {
+ as := require.New(t)
+
+ cfg := &config.Config{}
+ v, flags := newViper(t)
+
+ checkValue := func(expected bool) {
+ readValue(t, v, cfg, func(cfg *config.Config) {
+ as.Equal(expected, cfg.Quiet)
+ })
+ }
+
+ // default with no flag, env or config
+ checkValue(false)
+
+ // set config value and check that it has no effect
+ // you are not allowed to set no-cache in config
+ cfg.Quiet = true
+
+ checkValue(false)
+
+ // env override
+ t.Setenv("TREEFMT_QUIET", "false")
+ checkValue(false)
+
+ // flag override
+ as.NoError(flags.Set("quiet", "true"))
+ checkValue(true)
+}
+
func TestOnUnmatched(t *testing.T) {
as := require.New(t)
diff --git a/docs/content/getting-started/configure.md b/docs/content/getting-started/configure.md
index efc8f2b..623077e 100644
--- a/docs/content/getting-started/configure.md
+++ b/docs/content/getting-started/configure.md
@@ -254,6 +254,22 @@ Possible values are `<debug|info|warn|error|fatal>`.
on-unmatched = "debug"
```
+### `quiet`
+
+Suppress all output except for errors.
+
+=== "Flag"
+
+ ```console
+ treefmt --quiet
+ ```
+
+=== "Env"
+
+ ```console
+ TREEFMT_QUIET=true treefmt
+ ```
+
### `stdin`
Format the context passed in via stdin.1 parent b76d839 commit 10c9a72
File tree
5 files changed
+90
-7
lines changed- cmd
- config
- docs/content/getting-started
5 files changed
+90
-7
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
154 | 160 | | |
155 | 161 | | |
156 | 162 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
134 | 161 | | |
135 | 162 | | |
136 | 163 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
110 | 111 | | |
111 | 112 | | |
112 | 113 | | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
113 | 117 | | |
114 | 118 | | |
115 | 119 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
323 | 323 | | |
324 | 324 | | |
325 | 325 | | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
326 | 356 | | |
327 | 357 | | |
328 | 358 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
257 | 273 | | |
258 | 274 | | |
259 | 275 | | |
| |||
0 commit comments