Fix --color command line parameter ignorance (#7173)
authorHybridDog <ovvv@web.de>
Tue, 5 Mar 2019 07:14:33 +0000 (08:14 +0100)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Tue, 5 Mar 2019 07:14:33 +0000 (08:14 +0100)
* Fix color command line parameter ignorance

* coloured log: Support detecting the tty on windows

* Print an error message when setting something invalid as color mode instead of silently using mode never

* Revert "coloured log: Support detecting the tty on windows"

This reverts commit 4c9fc6366487ac0e6799e181796ca594797bb6f8.
It didn't work for travis and belongs to a separate PR

* Allow adjusting the log color with an environment variable

If --color is not passed to minetest,  is used to decide on the log colorization.
Minetest settings can not be used instead of an environment variable because logs may appear before loading them.

* fix empty if body

src/log.h
src/main.cpp

index 952ebadb1959a8544ea2b1f1a139e33007136c9f..1427d13647f805f2e91f645078a9b6724c554287 100644 (file)
--- a/src/log.h
+++ b/src/log.h
@@ -118,16 +118,16 @@ public:
                m_stream(stream)
        {
 #if !defined(_WIN32)
-               colored = (Logger::color_mode == LOG_COLOR_ALWAYS) ||
-                       (Logger::color_mode == LOG_COLOR_AUTO && isatty(fileno(stdout)));
+               is_tty = isatty(fileno(stdout));
 #else
-               colored = Logger::color_mode == LOG_COLOR_ALWAYS;
+               is_tty = false;
 #endif
        }
 
        void logRaw(LogLevel lev, const std::string &line)
        {
-               bool colored_message = colored;
+               bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) ||
+                       (Logger::color_mode == LOG_COLOR_AUTO && is_tty);
                if (colored_message)
                        switch (lev) {
                        case LL_ERROR:
@@ -160,7 +160,7 @@ public:
 
 private:
        std::ostream &m_stream;
-       bool colored;
+       bool is_tty;
 };
 
 class FileLogOutput : public ICombinedLogOutput {
index 26ad978c6f205cb3de34127428b7c73379429207..e4e47b1ac6ab4245c79bd7f56f18c865257e7f25 100644 (file)
@@ -407,14 +407,25 @@ static void setup_log_params(const Settings &cmd_args)
        }
 
        // Coloured log messages (see log.h)
+       std::string color_mode;
        if (cmd_args.exists("color")) {
-               std::string mode = cmd_args.get("color");
-               if (mode == "auto")
+               color_mode = cmd_args.get("color");
+#if !defined(_WIN32)
+       } else {
+               char *color_mode_env = getenv("MT_LOGCOLOR");
+               if (color_mode_env)
+                       color_mode = color_mode_env;
+#endif
+       }
+       if (color_mode != "") {
+               if (color_mode == "auto")
                        Logger::color_mode = LOG_COLOR_AUTO;
-               else if (mode == "always")
+               else if (color_mode == "always")
                        Logger::color_mode = LOG_COLOR_ALWAYS;
-               else
+               else if (color_mode == "never")
                        Logger::color_mode = LOG_COLOR_NEVER;
+               else
+                       errorstream << "Invalid color mode: " << color_mode << std::endl;
        }
 
        // If trace is enabled, enable logging of certain things