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:
parent
7ba1fd2029
commit
c8bfb11b34
9 changed files with 120 additions and 22 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue