1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-21 09:49:36 +01:00

Progress bar: Handle verify

This commit is contained in:
Eelco Dolstra 2020-11-19 13:29:11 +01:00
parent 2f512dd29f
commit 07ba1eb67e
3 changed files with 46 additions and 3 deletions

View file

@ -122,6 +122,7 @@ private:
idQueryMissing,
idCopyPaths,
idBuilds,
idVerifyPaths,
idStatus,
idQuit
};
@ -448,12 +449,16 @@ public:
i->ignored = true;
}
if (type == actVerifyPath)
i->s = getS(fields, 0);
if (type == actFileTransfer
|| (type == actCopyPath && hasAncestor(*state, actSubstitute, parent)) // FIXME?
|| type == actBuild
|| type == actSubstitute
|| type == actLockFlake
|| type == actQueryMissing)
|| type == actQueryMissing
|| type == actVerifyPath)
i->visible = false;
if (type == actBuild)
@ -613,6 +618,8 @@ public:
auto doneMark = ANSI_GREEN "";
auto failMark = ANSI_RED "";
if (state.activitiesByType.count(actEvaluate)) {
state.statusLines.insert_or_assign({idEvaluate, 0},
fmt("%s Evaluate",
@ -719,7 +726,7 @@ public:
{idBuilds, n++},
fmt("%s Build %d / %d derivations",
builds.failed
? ANSI_RED ""
? failMark
: builds.running || builds.done < builds.expected
? busyMark
: doneMark,
@ -742,6 +749,39 @@ public:
state.statusLines.insert_or_assign({idBuilds, n++}, "");
}
auto verify = getActivityStats(state.activitiesByType[actVerifyPaths]);
if (verify.done || verify.expected) {
removeStatusLines(state, idVerifyPaths);
auto bad = state.corruptedPaths + state.untrustedPaths + verify.failed;
size_t n = 0;
state.statusLines.insert_or_assign(
{idVerifyPaths, n++},
fmt("%s Verify %d / %d paths",
verify.done < verify.expected
? busyMark
: bad
? failMark
: doneMark,
verify.done, verify.expected)
+ (state.corruptedPaths ? fmt(", %d corrupted", state.corruptedPaths) : "")
+ (state.untrustedPaths ? fmt(", %d untrusted", state.untrustedPaths) : "")
+ (verify.failed ? fmt(", %d failed", verify.failed) : "")
);
state.statusLines.insert_or_assign({idVerifyPaths, n++},
fmt(" %s", renderBar(verify.done - bad, bad, verify.running, verify.expected)));
for (auto & build : state.activitiesByType[actVerifyPath].its) {
state.statusLines.insert_or_assign({idVerifyPaths, n++},
fmt(ANSI_BOLD " ‣ %s", build.second->s));
}
state.statusLines.insert_or_assign({idVerifyPaths, n++}, "");
}
}
void draw(State & state, std::optional<std::string_view> msg = {})

View file

@ -23,6 +23,7 @@ typedef enum {
actEvaluate = 112,
actLockFlake = 113,
actQueryMissing = 114,
actVerifyPath = 115,
} ActivityType;
typedef enum {

View file

@ -76,7 +76,9 @@ struct CmdVerify : StorePathsCommand
// Note: info->path can be different from storePath
// for binary cache stores when using --all (since we
// can't enumerate names efficiently).
Activity act2(*logger, lvlInfo, actUnknown, fmt("checking '%s'", store->printStorePath(info->path)));
Activity act2(*logger, lvlInfo, actVerifyPath,
fmt("checking '%s'", store->printStorePath(info->path)),
{store->printStorePath(info->path)});
if (!noContents) {