aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/derivations.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/derivations.hh')
-rw-r--r--src/libstore/derivations.hh64
1 files changed, 27 insertions, 37 deletions
diff --git a/src/libstore/derivations.hh b/src/libstore/derivations.hh
index 8e02c9bc5..c2df66229 100644
--- a/src/libstore/derivations.hh
+++ b/src/libstore/derivations.hh
@@ -10,26 +10,18 @@
namespace nix {
-/* Extension of derivations in the Nix store. */
-const string drvExtension = ".drv";
-
-
/* Abstract syntax of derivations. */
struct DerivationOutput
{
- Path path;
- string hashAlgo; /* hash used for expected hash computation */
- string hash; /* expected hash, may be null */
- DerivationOutput()
- {
- }
- DerivationOutput(Path path, string hashAlgo, string hash)
- {
- this->path = path;
- this->hashAlgo = hashAlgo;
- this->hash = hash;
- }
+ StorePath path;
+ std::string hashAlgo; /* hash used for expected hash computation */
+ std::string hash; /* expected hash, may be null */
+ DerivationOutput(StorePath && path, std::string && hashAlgo, std::string && hash)
+ : path(std::move(path))
+ , hashAlgo(std::move(hashAlgo))
+ , hash(std::move(hash))
+ { }
void parseHashInfo(bool & recursive, Hash & hash) const;
};
@@ -37,24 +29,26 @@ typedef std::map<string, DerivationOutput> DerivationOutputs;
/* For inputs that are sub-derivations, we specify exactly which
output IDs we are interested in. */
-typedef std::map<Path, StringSet> DerivationInputs;
+typedef std::map<StorePath, StringSet> DerivationInputs;
typedef std::map<string, string> StringPairs;
struct BasicDerivation
{
DerivationOutputs outputs; /* keyed on symbolic IDs */
- PathSet inputSrcs; /* inputs that are sources */
+ StorePathSet inputSrcs; /* inputs that are sources */
string platform;
Path builder;
Strings args;
StringPairs env;
+ BasicDerivation() { }
+ explicit BasicDerivation(const BasicDerivation & other);
virtual ~BasicDerivation() { };
/* Return the path corresponding to the output identifier `id' in
the given derivation. */
- Path findOutput(const string & id) const;
+ const StorePath & findOutput(const std::string & id) const;
bool isBuiltin() const;
@@ -62,7 +56,7 @@ struct BasicDerivation
bool isFixedOutput() const;
/* Return the output paths of a derivation. */
- PathSet outputPaths() const;
+ StorePathSet outputPaths() const;
};
@@ -71,7 +65,12 @@ struct Derivation : BasicDerivation
DerivationInputs inputDrvs; /* inputs that are sub-derivations */
/* Print a derivation. */
- std::string unparse() const;
+ std::string unparse(const Store & store, bool maskOutputs,
+ std::map<std::string, StringSet> * actualInputs = nullptr) const;
+
+ Derivation() { }
+ Derivation(Derivation && other) = default;
+ explicit Derivation(const Derivation & other);
};
@@ -79,38 +78,29 @@ class Store;
/* Write a derivation to the Nix store, and return its path. */
-Path writeDerivation(ref<Store> store,
+StorePath writeDerivation(ref<Store> store,
const Derivation & drv, const string & name, RepairFlag repair = NoRepair);
/* Read a derivation from a file. */
-Derivation readDerivation(const Path & drvPath);
+Derivation readDerivation(const Store & store, const Path & drvPath);
-/* Check whether a file name ends with the extension for
- derivations. */
+// FIXME: remove
bool isDerivation(const string & fileName);
-Hash hashDerivationModulo(Store & store, Derivation drv);
+Hash hashDerivationModulo(Store & store, const Derivation & drv, bool maskOutputs);
/* Memoisation of hashDerivationModulo(). */
-typedef std::map<Path, Hash> DrvHashes;
+typedef std::map<StorePath, Hash> DrvHashes;
extern DrvHashes drvHashes; // FIXME: global, not thread-safe
-/* Split a string specifying a derivation and a set of outputs
- (/nix/store/hash-foo!out1,out2,...) into the derivation path and
- the outputs. */
-typedef std::pair<string, std::set<string> > DrvPathWithOutputs;
-DrvPathWithOutputs parseDrvPathWithOutputs(const string & s);
-
-Path makeDrvPathWithOutputs(const Path & drvPath, const std::set<string> & outputs);
-
bool wantOutput(const string & output, const std::set<string> & wanted);
struct Source;
struct Sink;
-Source & readDerivation(Source & in, Store & store, BasicDerivation & drv);
-Sink & operator << (Sink & out, const BasicDerivation & drv);
+Source & readDerivation(Source & in, const Store & store, BasicDerivation & drv);
+void writeDerivation(Sink & out, const Store & store, const BasicDerivation & drv);
std::string hashPlaceholder(const std::string & outputName);