Merge changes I697f4f39,I9f25235d into main

* changes:
  doc-comment Fields for Activity and Result types
  mildly refactor the renderActivity if hell-chain
This commit is contained in:
Qyriad 2024-06-23 16:55:36 +00:00 committed by Gerrit Code Review
commit 521e08cbde
2 changed files with 95 additions and 19 deletions

View file

@ -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) {

View file

@ -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;