forked from lix-project/lix
Allow derivations to update the build phase
So the progress bar can show [1/0/1 built, 0.0 MiB DL] building hello-2.10 (configuring): checking whether pread is declared without a macro... yes
This commit is contained in:
parent
c137c0a5eb
commit
0ac35b67b8
|
@ -3325,6 +3325,11 @@ void DerivationGoal::flushLine()
|
|||
i->second.progress(json.value("done", 0), json.value("expected", 0), json.value("running", 0), json.value("failed", 0));
|
||||
}
|
||||
|
||||
else if (action == "setPhase") {
|
||||
std::string phase = json["phase"];
|
||||
act->result(resSetPhase, phase);
|
||||
}
|
||||
|
||||
} catch (std::exception & e) {
|
||||
printError("bad log message from builder: %s", e.what());
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ typedef enum {
|
|||
resBuildLogLine = 101,
|
||||
resUntrustedPath = 102,
|
||||
resCorruptedPath = 103,
|
||||
resSetPhase = 104,
|
||||
} ResultType;
|
||||
|
||||
typedef uint64_t ActivityId;
|
||||
|
|
|
@ -66,7 +66,7 @@ private:
|
|||
|
||||
struct ActInfo
|
||||
{
|
||||
std::string s, s2;
|
||||
std::string s, lastLine, phase;
|
||||
ActivityType type = actUnknown;
|
||||
uint64_t done = 0;
|
||||
uint64_t expected = 0;
|
||||
|
@ -232,13 +232,13 @@ public:
|
|||
}
|
||||
|
||||
else if (type == resBuildLogLine) {
|
||||
auto s2 = trim(getS(fields, 0));
|
||||
if (!s2.empty()) {
|
||||
auto lastLine = trim(getS(fields, 0));
|
||||
if (!lastLine.empty()) {
|
||||
auto i = state->its.find(act);
|
||||
assert(i != state->its.end());
|
||||
ActInfo info = *i->second;
|
||||
state->activities.erase(i->second);
|
||||
info.s2 = s2;
|
||||
info.lastLine = lastLine;
|
||||
state->activities.emplace_back(info);
|
||||
i->second = std::prev(state->activities.end());
|
||||
update(*state);
|
||||
|
@ -254,6 +254,12 @@ public:
|
|||
state->corruptedPaths++;
|
||||
update(*state);
|
||||
}
|
||||
|
||||
else if (type == resSetPhase) {
|
||||
auto i = state->its.find(act);
|
||||
assert(i != state->its.end());
|
||||
i->second->phase = getS(fields, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void update()
|
||||
|
@ -277,14 +283,19 @@ public:
|
|||
if (!status.empty()) line += " ";
|
||||
auto i = state.activities.rbegin();
|
||||
|
||||
while (i != state.activities.rend() && (!i->visible || (i->s.empty() && i->s2.empty())))
|
||||
while (i != state.activities.rend() && (!i->visible || (i->s.empty() && i->lastLine.empty())))
|
||||
++i;
|
||||
|
||||
if (i != state.activities.rend()) {
|
||||
line += i->s;
|
||||
if (!i->s2.empty()) {
|
||||
if (!i->phase.empty()) {
|
||||
line += " (";
|
||||
line += i->phase;
|
||||
line += ")";
|
||||
}
|
||||
if (!i->lastLine.empty()) {
|
||||
if (!i->s.empty()) line += ": ";
|
||||
line += i->s2;
|
||||
line += i->lastLine;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue