diff --git a/CHANGELOG.md b/CHANGELOG.md index 073bfb195..c8f250c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ FEATURES: IMPROVEMENTS: +* core: Colors won't be outputted on Windows unless in Cygwin. * builder/amazon/all: Added `iam_instance_profile` to launch the source image with a given IAM profile. [GH-226] diff --git a/packer/ui.go b/packer/ui.go index 9d06fed93..3b21214b6 100644 --- a/packer/ui.go +++ b/packer/ui.go @@ -10,6 +10,7 @@ import ( "os/signal" "strings" "sync" + "runtime" "unicode" ) @@ -80,6 +81,10 @@ func (u *ColoredUi) Error(message string) { } func (u *ColoredUi) colorize(message string, color UiColor, bold bool) string { + if !u.supportsColors() { + return message + } + attr := 0 if bold { attr = 1 @@ -88,6 +93,20 @@ func (u *ColoredUi) colorize(message string, color UiColor, bold bool) string { return fmt.Sprintf("\033[%d;%d;40m%s\033[0m", attr, color, message) } +func (u *ColoredUi) supportsColors() bool { + // For now, on non-Windows machine, just assume it does + if runtime.GOOS != "windows" { + return true + } + + // On Windows, if we appear to be in Cygwin, then it does + cygwin := os.Getenv("CYGWIN") != "" || + os.Getenv("OSTYPE") == "cygwin" || + os.Getenv("TERM") == "cygwin" + + return cygwin +} + func (u *PrefixedUi) Ask(query string) (string, error) { return u.Ui.Ask(u.prefixLines(u.SayPrefix, query)) }