aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmain/progress-bar.cc66
-rw-r--r--src/libutil/logging.hh48
2 files changed, 95 insertions, 19 deletions
diff --git a/src/libmain/progress-bar.cc b/src/libmain/progress-bar.cc
index b3b46fc21..28bb14863 100644
--- a/src/libmain/progress-bar.cc
+++ b/src/libmain/progress-bar.cc
@@ -402,31 +402,59 @@ std::string ProgressBar::getStatus(State & state)
expected = std::max(expected, act.expected);
- std::string s;
+ std::string rendered;
if (running || done || expected || failed) {
- if (running)
- if (expected != 0)
- s = fmt(ANSI_BLUE + numberFmt + ANSI_NORMAL "/" ANSI_GREEN + numberFmt + ANSI_NORMAL "/" + numberFmt,
- running / unit, done / unit, expected / unit);
- else
- s = fmt(ANSI_BLUE + numberFmt + ANSI_NORMAL "/" ANSI_GREEN + numberFmt + ANSI_NORMAL,
- running / unit, done / unit);
- else if (expected != done)
- if (expected != 0)
- s = fmt(ANSI_GREEN + numberFmt + ANSI_NORMAL "/" + numberFmt,
- done / unit, expected / unit);
- else
- s = fmt(ANSI_GREEN + numberFmt + ANSI_NORMAL, done / unit);
- else
- s = fmt(done ? ANSI_GREEN + numberFmt + ANSI_NORMAL : numberFmt, done / unit);
- s = fmt(itemFmt, s);
+ if (running) {
+ if (expected != 0) {
+ auto const runningPart = fmt(numberFmt, running / unit);
+ auto const donePart = fmt(numberFmt, done / unit);
+ auto const expectedPart = fmt(numberFmt, expected / unit);
+ rendered = fmt(
+ ANSI_BLUE "%s" ANSI_NORMAL "/" ANSI_GREEN "%s" ANSI_NORMAL "/%s",
+ runningPart,
+ donePart,
+ expectedPart
+ );
+ } else {
+ auto const runningPart = fmt(numberFmt, running / unit);
+ auto const donePart = fmt(numberFmt, done / unit);
+ rendered = fmt(
+ ANSI_BLUE "%s" ANSI_NORMAL "/" ANSI_GREEN "%s" ANSI_NORMAL,
+ runningPart,
+ donePart
+ );
+ }
+ } else if (expected != done) {
+ if (expected != 0) {
+ auto const donePart = fmt(numberFmt, done / unit);
+ auto const expectedPart = fmt(numberFmt, expected / unit);
+ rendered = fmt(
+ ANSI_GREEN "%s" ANSI_NORMAL "/%s",
+ donePart,
+ expectedPart
+ );
+ } else {
+ auto const donePart = fmt(numberFmt, done / unit);
+ rendered = fmt(ANSI_GREEN "%s" ANSI_NORMAL, donePart);
+ }
+ } else {
+ auto const donePart = fmt(numberFmt, done / unit);
+
+ // We only color if `done` is non-zero.
+ if (done) {
+ rendered = concatStrings(ANSI_GREEN, donePart, ANSI_NORMAL);
+ } else {
+ rendered = donePart;
+ }
+ }
+ rendered = fmt(itemFmt, rendered);
if (failed)
- s += fmt(" (" ANSI_RED "%d failed" ANSI_NORMAL ")", failed / unit);
+ rendered += fmt(" (" ANSI_RED "%d failed" ANSI_NORMAL ")", failed / unit);
}
- return s;
+ return rendered;
};
auto showActivity = [&](ActivityType type, const std::string & itemFmt, const std::string & numberFmt = "%d", double unit = 1) {
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 115b979f8..3cead4296 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -14,23 +14,71 @@ typedef enum {
actRealise = 102,
actCopyPaths = 103,
actBuilds = 104,
+
+ /** Fields:
+ * 0: string: path to store derivation being built.
+ * 1: string: representing the machine this is being built on. Empty string if local machine.
+ * 2: int: curRound, not used anymore, always 1?
+ * 3: int: nrRounds, not used anymore always 1?
+ */
actBuild = 105,
actOptimiseStore = 106,
actVerifyPaths = 107,
+
+ /** Fields:
+ * 0: string: store path
+ * 1: string: substituter
+ */
actSubstitute = 108,
+
+ /** Fields:
+ * 0: string: store path
+ * 1: string: substituter
+ */
actQueryPathInfo = 109,
+
+ /** Fields:
+ * 0: string: store path
+ */
actPostBuildHook = 110,
actBuildWaiting = 111,
} ActivityType;
typedef enum {
+ /** Fields:
+ * 0: int: bytes linked
+ */
resFileLinked = 100,
+
+ /** Fields:
+ * 0: string: last line
+ */
resBuildLogLine = 101,
resUntrustedPath = 102,
resCorruptedPath = 103,
+
+ /** Fields:
+ * 0: string: phase name
+ */
resSetPhase = 104,
+
+ /** Fields:
+ * 0: int: done
+ * 1: int: expected
+ * 2: int: running
+ * 3: int: failed
+ */
resProgress = 105,
+
+ /** Fields:
+ * 0: int: ActivityType
+ * 1: int: expected
+ */
resSetExpected = 106,
+
+ /** Fields:
+ * 0: string: last line
+ */
resPostBuildLogLine = 107,
} ResultType;