From cbc35c48d252a1b44e4c30e26cfba2ff462a1f96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 13 Jun 2022 15:28:08 +0200 Subject: [PATCH] Respect NO_COLOR Fixes #10004 --- commands/hugo.go | 6 +----- common/loggers/loggers.go | 2 +- common/terminal/colors.go | 11 ++++++++++- common/text/position.go | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/commands/hugo.go b/commands/hugo.go index f10fec00b..5169d65a5 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -284,10 +284,6 @@ func setValueFromFlag(flags *flag.FlagSet, key string, cfg config.Provider, targ } } -func isTerminal() bool { - return terminal.IsTerminal(os.Stdout) -} - func (c *commandeer) fullBuild(noBuildLock bool) error { var ( g errgroup.Group @@ -297,7 +293,7 @@ func (c *commandeer) fullBuild(noBuildLock bool) error { if !c.h.quiet { fmt.Println("Start building sites … ") fmt.Println(hugo.BuildVersionString()) - if isTerminal() { + if terminal.IsTerminal(os.Stdout) { defer func() { fmt.Print(showCursor + clearLine) }() diff --git a/common/loggers/loggers.go b/common/loggers/loggers.go index c61c55a67..308635fe9 100644 --- a/common/loggers/loggers.go +++ b/common/loggers/loggers.go @@ -290,7 +290,7 @@ func InitGlobalLogger(stdoutThreshold, logThreshold jww.Threshold, outHandle, lo } func getLogWriters(outHandle, logHandle io.Writer) (io.Writer, io.Writer) { - isTerm := terminal.IsTerminal(os.Stdout) + isTerm := terminal.PrintANSIColors(os.Stdout) if logHandle != ioutil.Discard && isTerm { // Remove any Ansi coloring from log output logHandle = ansiCleaner{w: logHandle} diff --git a/common/terminal/colors.go b/common/terminal/colors.go index 334b82fae..c4a78291e 100644 --- a/common/terminal/colors.go +++ b/common/terminal/colors.go @@ -1,4 +1,4 @@ -// Copyright 2018 The Hugo Authors. All rights reserved. +// Copyright 2022 The Hugo Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,6 +29,15 @@ const ( noticeColor = "\033[1;36m%s\033[0m" ) +// PrintANSIColors returns false if NO_COLOR env variable is set, +// else IsTerminal(f). +func PrintANSIColors(f *os.File) bool { + if os.Getenv("NO_COLOR") != "" { + return false + } + return IsTerminal(f) +} + // IsTerminal return true if the file descriptor is terminal and the TERM // environment variable isn't a dumb one. func IsTerminal(f *os.File) bool { diff --git a/common/text/position.go b/common/text/position.go index 34e856c5d..cc1eda354 100644 --- a/common/text/position.go +++ b/common/text/position.go @@ -83,7 +83,7 @@ func createPositionStringFormatter(formatStr string) func(p Position) string { msg := fmt.Sprintf(format, args...) - if terminal.IsTerminal(os.Stdout) { + if terminal.PrintANSIColors(os.Stdout) { return terminal.Notice(msg) }