2003-07-20 19:29:38 +00:00
|
|
|
#ifndef __NORMALISE_H
|
|
|
|
#define __NORMALISE_H
|
|
|
|
|
2003-11-18 11:22:29 +00:00
|
|
|
#include "storeexpr.hh"
|
2003-07-20 19:29:38 +00:00
|
|
|
|
2005-01-19 11:16:11 +00:00
|
|
|
/* Perform the specified derivation, if necessary. That is, do
|
|
|
|
whatever is necessary to create the output paths of the
|
|
|
|
derivation. If the output paths already exists, we're done. If
|
|
|
|
they have substitutes, we can use those instead. Otherwise, the
|
|
|
|
build action described by the derivation is performed, after
|
|
|
|
recursively building any sub-derivations. */
|
|
|
|
void buildDerivation(const Path & drvPath);
|
2003-07-20 19:29:38 +00:00
|
|
|
|
2003-10-16 16:29:57 +00:00
|
|
|
/* Ensure that a path exists, possibly by instantiating it by
|
|
|
|
realising a substitute. */
|
2005-01-19 11:16:11 +00:00
|
|
|
void ensurePath(const Path & storePath);
|
2003-10-16 16:29:57 +00:00
|
|
|
|
2005-01-19 11:16:11 +00:00
|
|
|
/* Read a derivation store expression, after ensuring its existence
|
|
|
|
through ensurePath(). */
|
|
|
|
Derivation derivationFromPath(const Path & drvPath);
|
2003-10-16 16:29:57 +00:00
|
|
|
|
2005-01-19 14:36:00 +00:00
|
|
|
/* Place in `paths' the set of all store paths in the file system
|
2005-01-19 11:16:11 +00:00
|
|
|
closure of `storePath'; that is, all paths than can be directly or
|
|
|
|
indirectly reached from it. `paths' is not cleared. */
|
|
|
|
void computeFSClosure(const Path & storePath,
|
|
|
|
PathSet & paths);
|
|
|
|
|
2005-01-19 14:36:00 +00:00
|
|
|
/* Place in `paths' the set of paths that are required to `realise'
|
|
|
|
the given store path, i.e., all paths necessary for valid
|
|
|
|
deployment of the path. For a derivation, this is the union of
|
|
|
|
requisites of the inputs, plus the derivation; for other store
|
|
|
|
paths, it is the set of paths in the FS closure of the path. If
|
|
|
|
`includeOutputs' is true, include the requisites of the output
|
|
|
|
paths of derivations as well.
|
|
|
|
|
|
|
|
Note that this function can be used to implement three different
|
|
|
|
deployment policies:
|
|
|
|
|
|
|
|
- Source deployment (when called on a derivation).
|
|
|
|
- Binary deployment (when called on an output path).
|
|
|
|
- Source/binary deployment (when called on a derivation with
|
|
|
|
`includeOutputs' set to true).
|
|
|
|
*/
|
|
|
|
void storePathRequisites(const Path & storePath,
|
|
|
|
bool includeOutputs, PathSet & paths);
|
2003-07-20 19:29:38 +00:00
|
|
|
|
|
|
|
#endif /* !__NORMALISE_H */
|