aboutsummaryrefslogtreecommitdiff
path: root/src/libmain/progress-bar.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmain/progress-bar.cc')
-rw-r--r--src/libmain/progress-bar.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libmain/progress-bar.cc b/src/libmain/progress-bar.cc
index 3f7d99a1d..15354549a 100644
--- a/src/libmain/progress-bar.cc
+++ b/src/libmain/progress-bar.cc
@@ -122,6 +122,7 @@ public:
void log(Verbosity lvl, const FormatOrString & fs) override
{
+ if (lvl > verbosity) return;
auto state(state_.lock());
log(*state, lvl, fs.s);
}
@@ -256,7 +257,7 @@ public:
}
else if (type == resBuildLogLine || type == resPostBuildLogLine) {
- auto lastLine = trim(getS(fields, 0));
+ auto lastLine = chomp(getS(fields, 0));
if (!lastLine.empty()) {
auto i = state->its.find(act);
assert(i != state->its.end());
@@ -362,7 +363,7 @@ public:
auto width = getWindowSize().second;
if (width <= 0) width = std::numeric_limits<decltype(width)>::max();
- writeToStderr("\r" + filterANSIEscapes(line, false, width) + "\e[K");
+ writeToStderr("\r" + filterANSIEscapes(line, false, width) + ANSI_NORMAL + "\e[K");
}
std::string getStatus(State & state)
@@ -466,6 +467,17 @@ public:
Logger::writeToStdout(s);
}
}
+
+ std::optional<char> ask(std::string_view msg) override
+ {
+ auto state(state_.lock());
+ if (!state->active || !isatty(STDIN_FILENO)) return {};
+ std::cerr << fmt("\r\e[K%s ", msg);
+ auto s = trim(readLine(STDIN_FILENO));
+ if (s.size() != 1) return {};
+ draw(*state);
+ return s[0];
+ }
};
Logger * makeProgressBar(bool printBuildLogs)