mirror of
https://github.com/NixOS/nix
synced 2025-06-28 22:01:15 +02:00
* Maintain the references/referers relation also for derivations.
This simplifies garbage collection and `nix-store --query --requisites' since we no longer need to treat derivations specially. * Better maintaining of the invariants, e.g., setReferences() can only be called on a valid/substitutable path.
This commit is contained in:
parent
2a2756b856
commit
a24b78e9f1
8 changed files with 84 additions and 82 deletions
|
@ -27,44 +27,3 @@ void computeFSClosure(const Path & storePath,
|
|||
i != references.end(); ++i)
|
||||
computeFSClosure(*i, paths, flipDirection);
|
||||
}
|
||||
|
||||
|
||||
void storePathRequisites(const Path & storePath,
|
||||
bool includeOutputs, PathSet & paths)
|
||||
{
|
||||
checkInterrupt();
|
||||
|
||||
if (paths.find(storePath) != paths.end()) return;
|
||||
|
||||
if (isDerivation(storePath)) {
|
||||
|
||||
paths.insert(storePath);
|
||||
|
||||
Derivation drv = derivationFromPath(storePath);
|
||||
|
||||
for (DerivationInputs::iterator i = drv.inputDrvs.begin();
|
||||
i != drv.inputDrvs.end(); ++i)
|
||||
/* !!! Maybe this is too strict, since it will include
|
||||
*all* output paths of the input derivation, not just
|
||||
the ones needed by this derivation. */
|
||||
storePathRequisites(i->first, includeOutputs, paths);
|
||||
|
||||
for (PathSet::iterator i = drv.inputSrcs.begin();
|
||||
i != drv.inputSrcs.end(); ++i)
|
||||
storePathRequisites(*i, includeOutputs, paths);
|
||||
|
||||
if (includeOutputs) {
|
||||
|
||||
for (DerivationOutputs::iterator i = drv.outputs.begin();
|
||||
i != drv.outputs.end(); ++i)
|
||||
if (isValidPath(i->second.path))
|
||||
storePathRequisites(i->second.path, includeOutputs, paths);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else {
|
||||
computeFSClosure(storePath, paths);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue