1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-28 22:01:15 +02:00

* `nix-env (-i|-u) --dry-run' now shows exactly which missing paths

will be built or substituted.
This commit is contained in:
Eelco Dolstra 2006-03-06 11:21:15 +00:00
parent 7ba1fd2029
commit c8bfb11b34
9 changed files with 120 additions and 22 deletions

View file

@ -29,10 +29,55 @@ void computeFSClosure(const Path & storePath,
}
Path findOutput(const Derivation & drv, string id)
Path findOutput(const Derivation & drv, string id)
{
for (DerivationOutputs::const_iterator i = drv.outputs.begin();
i != drv.outputs.end(); ++i)
if (i->first == id) return i->second.path;
throw Error(format("derivation has no output `%1%'") % id);
}
void queryMissing(const PathSet & targets,
PathSet & willBuild, PathSet & willSubstitute)
{
PathSet todo(targets.begin(), targets.end()), done;
while (!todo.empty()) {
Path p = *(todo.begin());
todo.erase(p);
if (done.find(p) != done.end()) continue;
done.insert(p);
if (isDerivation(p)) {
if (!isValidPath(p)) continue;
Derivation drv = derivationFromPath(p);
bool mustBuild = false;
for (DerivationOutputs::iterator i = drv.outputs.begin();
i != drv.outputs.end(); ++i)
if (!isValidPath(i->second.path) &&
querySubstitutes(noTxn, i->second.path).size() == 0)
mustBuild = true;
if (mustBuild) {
willBuild.insert(p);
todo.insert(drv.inputSrcs.begin(), drv.inputSrcs.end());
for (DerivationInputs::iterator i = drv.inputDrvs.begin();
i != drv.inputDrvs.end(); ++i)
todo.insert(i->first);
} else
for (DerivationOutputs::iterator i = drv.outputs.begin();
i != drv.outputs.end(); ++i)
todo.insert(i->second.path);
}
else {
if (isValidPath(p)) continue;
if (querySubstitutes(noTxn, p).size() > 0)
willSubstitute.insert(p);
PathSet refs;
queryReferences(noTxn, p, todo);
}
}
}