diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-01-25T21·28+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-01-25T21·28+0000 |
commit | a24b78e9f1a7326badb6c38d5d63aeb6ccdf9970 (patch) | |
tree | f1d9a3fde9ab4f70e78152263d69afc29da6e393 /src/libstore/derivations.cc | |
parent | 2a2756b85643de6355b7b9e3cc47574e7df82303 (diff) |
* 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.
Diffstat (limited to 'src/libstore/derivations.cc')
-rw-r--r-- | src/libstore/derivations.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc index 2d776fb74859..e31333e777b1 100644 --- a/src/libstore/derivations.cc +++ b/src/libstore/derivations.cc @@ -14,8 +14,16 @@ Hash hashTerm(ATerm t) Path writeDerivation(const Derivation & drv, const string & name) { + PathSet references; + references.insert(drv.inputSrcs.begin(), drv.inputSrcs.end()); + for (DerivationInputs::const_iterator i = drv.inputDrvs.begin(); + i != drv.inputDrvs.end(); ++i) + references.insert(i->first); + /* Note that the outputs of a derivation are *not* references + (that can be missing (of course) and should not necessarily be + held during a garbage collection). */ return addTextToStore(name + drvExtension, - atPrint(unparseDerivation(drv))); + atPrint(unparseDerivation(drv)), references); } |