aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-04-16 13:12:58 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-04-16 18:03:38 +0200
commit67a5941472ab56a798556ee2d5afc62fc38a799a (patch)
treec96092cfc32ebb4355f99f7d678810a5a4ff3276 /src
parentfcd048a526bd239fa615457e77d61d69d679bf03 (diff)
Logger: Add method for writing to stdout
Usually this just writes to stdout, but for ProgressBar, we need to clear the current line, write the line to stdout, and then redraw the progress bar. (cherry picked from commit 696c026006a6ac46adc990ed5cb0f31535bac076)
Diffstat (limited to 'src')
-rw-r--r--src/libutil/logging.cc6
-rw-r--r--src/libutil/logging.hh10
-rw-r--r--src/nix/progress-bar.cc13
3 files changed, 29 insertions, 0 deletions
diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc
index bb437cf1c..3cc4ef8f1 100644
--- a/src/libutil/logging.cc
+++ b/src/libutil/logging.cc
@@ -3,6 +3,7 @@
#include <atomic>
#include <nlohmann/json.hpp>
+#include <iostream>
namespace nix {
@@ -24,6 +25,11 @@ void Logger::warn(const std::string & msg)
log(lvlWarn, ANSI_YELLOW "warning:" ANSI_NORMAL " " + msg);
}
+void Logger::writeToStdout(std::string_view s)
+{
+ std::cout << s << "\n";
+}
+
class SimpleLogger : public Logger
{
public:
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 108b5dcb0..18c24d508 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -78,6 +78,16 @@ public:
virtual void stopActivity(ActivityId act) { };
virtual void result(ActivityId act, ResultType type, const Fields & fields) { };
+
+ virtual void writeToStdout(std::string_view s);
+
+ template<typename... Args>
+ inline void stdout(const std::string & fs, const Args & ... args)
+ {
+ boost::format f(fs);
+ formatHelper(f, args...);
+ writeToStdout(f.str());
+ }
};
ActivityId getCurActivity();
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index adc9b9a5d..8e7ba95a3 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -7,6 +7,7 @@
#include <atomic>
#include <map>
#include <thread>
+#include <iostream>
namespace nix {
@@ -442,6 +443,18 @@ public:
return res;
}
+
+ void writeToStdout(std::string_view s) override
+ {
+ auto state(state_.lock());
+ if (state->active) {
+ std::cerr << "\r\e[K";
+ Logger::writeToStdout(s);
+ draw(*state);
+ } else {
+ Logger::writeToStdout(s);
+ }
+ }
};
void startProgressBar(bool printBuildLogs)