diff --git a/src/libmain/progress-bar.cc b/src/libmain/progress-bar.cc index c852eeaf3..7a984ea6a 100644 --- a/src/libmain/progress-bar.cc +++ b/src/libmain/progress-bar.cc @@ -143,7 +143,7 @@ private: bool helpShown = false; }; - bool isTTY; + const bool isTTY; Sync state_; @@ -173,14 +173,9 @@ public: draw(*state); state.wait_for(quitCV, std::chrono::milliseconds(50)); } - - if (savedTermAttrs) { - tcsetattr(STDIN_FILENO, TCSANOW, &*savedTermAttrs); - savedTermAttrs.reset(); - } }); - if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) && isatty(STDERR_FILENO)) { + if (isTTY) { struct termios term; if (tcgetattr(STDIN_FILENO, &term)) @@ -291,6 +286,11 @@ public: state->active = false; updateCV.notify_one(); quitCV.notify_one(); + + if (savedTermAttrs) { + tcsetattr(STDIN_FILENO, TCSANOW, &*savedTermAttrs); + savedTermAttrs.reset(); + } } updateThread.join(); diff --git a/src/nix/main.cc b/src/nix/main.cc index b2406fafe..c3d32083b 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -88,11 +88,12 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs }}, }); + // FIXME: make this a setting, remove LogFormat::barWithLogs. addFlag({ .longName = "print-build-logs", .shortName = 'L', .description = "print full build logs on stderr", - .handler = {[&]() {setLogFormat(LogFormat::barWithLogs); }}, + .handler = {[&]() { printBuildLogs = true; }}, }); addFlag({ @@ -254,10 +255,6 @@ void mainWrapped(int argc, char * * argv) settings.verboseBuild = false; evalSettings.pureEval = true; - setLogFormat("bar"); - - Finally f([] { logger->stop(); }); - NixArgs args; if (argc == 2 && std::string(argv[1]) == "__dump-args") { @@ -301,6 +298,10 @@ void mainWrapped(int argc, char * * argv) if (completions) return; + setLogFormat(args.printBuildLogs ? LogFormat::bar : LogFormat::barWithLogs); + + Finally f([] { logger->stop(); }); + initPlugins(); if (!args.command) args.showHelpAndExit();