Merge pull request #19002 from hashicorp/f-no-color

backend/remote: add support for `-no-color`
This commit is contained in:
Sander van Harmelen 2018-10-04 19:34:51 +02:00 committed by GitHub
commit 308d70d226
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 9 deletions

View File

@ -496,16 +496,16 @@ func (b *Remote) cancel(cancelCtx context.Context, op *backend.Operation, runID
// Colorize returns the Colorize structure that can be used for colorizing // Colorize returns the Colorize structure that can be used for colorizing
// output. This is guaranteed to always return a non-nil value and so useful // output. This is guaranteed to always return a non-nil value and so useful
// as a helper to wrap any potentially colored strings. // as a helper to wrap any potentially colored strings.
func (b *Remote) Colorize() *colorstring.Colorize { // func (b *Remote) Colorize() *colorstring.Colorize {
if b.CLIColor != nil { // if b.CLIColor != nil {
return b.CLIColor // return b.CLIColor
} // }
return &colorstring.Colorize{ // return &colorstring.Colorize{
Colors: colorstring.DefaultColors, // Colors: colorstring.DefaultColors,
Disable: true, // Disable: true,
} // }
} // }
func generalError(msg string, err error) error { func generalError(msg string, err error) error {
if urlErr, ok := err.(*url.Error); ok { if urlErr, ok := err.(*url.Error); ok {

View File

@ -0,0 +1,47 @@
package remote
import (
"regexp"
"github.com/mitchellh/colorstring"
)
// colorsRe is used to find ANSI escaped color codes.
var colorsRe = regexp.MustCompile("\033\\[\\d{1,3}m")
// Colorer is the interface that must be implemented to colorize strings.
type Colorer interface {
Color(v string) string
}
// Colorize is used to print output when the -no-color flag is used. It will
// strip all ANSI escaped color codes which are set while the operation was
// executed in Terraform Enterprise.
//
// When Terraform Enterprise supports run specific variables, this code can be
// removed as we can then pass the CLI flag to the backend and prevent the color
// codes from being written to the output.
type Colorize struct {
cliColor *colorstring.Colorize
}
// Color will strip all ANSI escaped color codes and return a uncolored string.
func (c *Colorize) Color(v string) string {
return colorsRe.ReplaceAllString(c.cliColor.Color(v), "")
}
// Colorize returns the Colorize structure that can be used for colorizing
// output. This is guaranteed to always return a non-nil value and so is useful
// as a helper to wrap any potentially colored strings.
func (b *Remote) Colorize() Colorer {
if b.CLIColor != nil && !b.CLIColor.Disable {
return b.CLIColor
}
if b.CLIColor != nil {
return &Colorize{cliColor: b.CLIColor}
}
return &Colorize{cliColor: &colorstring.Colorize{
Colors: colorstring.DefaultColors,
Disable: true,
}}
}