command/*: colors on error messages (red)
This commit is contained in:
parent
77bfa5657e
commit
79c60e0331
|
@ -0,0 +1,42 @@
|
|||
package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/mitchellh/colorstring"
|
||||
)
|
||||
|
||||
// ColoredUi is a Ui implementation that colors its output according
|
||||
// to the given color schemes for the given type of output.
|
||||
type ColorizeUi struct {
|
||||
Colorize *colorstring.Colorize
|
||||
OutputColor string
|
||||
InfoColor string
|
||||
ErrorColor string
|
||||
Ui cli.Ui
|
||||
}
|
||||
|
||||
func (u *ColorizeUi) Ask(query string) (string, error) {
|
||||
return u.Ui.Ask(u.colorize(query, u.OutputColor))
|
||||
}
|
||||
|
||||
func (u *ColorizeUi) Output(message string) {
|
||||
u.Ui.Output(u.colorize(message, u.OutputColor))
|
||||
}
|
||||
|
||||
func (u *ColorizeUi) Info(message string) {
|
||||
u.Ui.Info(u.colorize(message, u.InfoColor))
|
||||
}
|
||||
|
||||
func (u *ColorizeUi) Error(message string) {
|
||||
u.Ui.Error(u.colorize(message, u.ErrorColor))
|
||||
}
|
||||
|
||||
func (u *ColorizeUi) colorize(message string, color string) string {
|
||||
if color == "" {
|
||||
return message
|
||||
}
|
||||
|
||||
return u.Colorize.Color(fmt.Sprintf("%s%s[reset]", color, message))
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package command
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/mitchellh/cli"
|
||||
)
|
||||
|
||||
func TestColorizeUi_impl(t *testing.T) {
|
||||
var _ cli.Ui = new(ColorizeUi)
|
||||
}
|
|
@ -15,6 +15,8 @@ type Meta struct {
|
|||
Color bool
|
||||
ContextOpts *terraform.ContextOpts
|
||||
Ui cli.Ui
|
||||
|
||||
oldUi cli.Ui
|
||||
}
|
||||
|
||||
// Colorize returns the colorization structure for a command.
|
||||
|
@ -104,15 +106,30 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
|
|||
// will potentially modify the args in-place. It will return the resulting
|
||||
// slice.
|
||||
func (m *Meta) process(args []string) []string {
|
||||
m.Color = true
|
||||
// We do this so that we retain the ability to technically call
|
||||
// process multiple times, even if we have no plans to do so
|
||||
if m.oldUi != nil {
|
||||
m.Ui = m.oldUi
|
||||
}
|
||||
|
||||
// Set colorization
|
||||
m.Color = true
|
||||
for i, v := range args {
|
||||
if v == "-no-color" {
|
||||
m.Color = false
|
||||
return append(args[:i], args[i+1:]...)
|
||||
args = append(args[:i], args[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Set the UI
|
||||
m.oldUi = m.Ui
|
||||
m.Ui = &ColorizeUi{
|
||||
Colorize: m.Colorize(),
|
||||
ErrorColor: "[red]",
|
||||
Ui: m.oldUi,
|
||||
}
|
||||
|
||||
return args
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue