1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-27 08:31:16 +02:00

Add a function queryValidPaths()

queryValidPaths() combines multiple calls to isValidPath() in one.
This matters when using the Nix daemon because it reduces latency.
For instance, on "nix-env -qas \*" it reduces execution time from 5.7s
to 4.7s (which is indistinguishable from the non-daemon case).
This commit is contained in:
Eelco Dolstra 2012-07-11 11:08:47 -04:00
parent 667d5f1936
commit 58ef4d9a95
8 changed files with 49 additions and 3 deletions

View file

@ -932,6 +932,7 @@ static void opQuery(Globals & globals,
/* Query which paths have substitutes. */
SubstitutablePathInfos subs;
PathSet validPaths;
if (printStatus) {
PathSet paths;
foreach (vector<DrvInfo>::iterator, i, elems2)
@ -941,6 +942,7 @@ static void opQuery(Globals & globals,
printMsg(lvlTalkative, format("skipping derivation named `%1%' which gives an assertion failure") % i->name);
i->setFailed();
}
validPaths = store->queryValidPaths(paths);
store->querySubstitutablePathInfos(paths, subs);
}
@ -966,9 +968,10 @@ static void opQuery(Globals & globals,
XMLAttrs attrs;
if (printStatus) {
bool hasSubs = subs.find(i->queryOutPath(globals.state)) != subs.end();
bool isInstalled = installed.find(i->queryOutPath(globals.state)) != installed.end();
bool isValid = store->isValidPath(i->queryOutPath(globals.state));
Path outPath = i->queryOutPath(globals.state);
bool hasSubs = subs.find(outPath) != subs.end();
bool isInstalled = installed.find(outPath) != installed.end();
bool isValid = validPaths.find(outPath) != validPaths.end();
if (xmlOutput) {
attrs["installed"] = isInstalled ? "1" : "0";
attrs["valid"] = isValid ? "1" : "0";