aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/derivations.hh
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2020-07-12 16:12:21 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-07-12 23:53:33 +0000
commit230c9b4329b3d285e57f4cce058c121256187da1 (patch)
treed17f75152403cc73f03d7934a3900b7ebb1bf0cc /src/libstore/derivations.hh
parentfedfc913ad75984b476e7838d6254c547f9134d5 (diff)
Change types to prepare the way for CA derivations
We've added the variant to `DerivationOutput` to support them, but made `DerivationOutput::path` partial to avoid actually implementing them. With this chage, we can all collaborate on "just" removing `DerivationOutput::path` calls to implement CA derivations.
Diffstat (limited to 'src/libstore/derivations.hh')
-rw-r--r--src/libstore/derivations.hh21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/libstore/derivations.hh b/src/libstore/derivations.hh
index 4dc542536..36ac09210 100644
--- a/src/libstore/derivations.hh
+++ b/src/libstore/derivations.hh
@@ -15,6 +15,8 @@ namespace nix {
struct DerivationOutputInputAddressed
{
+ /* Will need to become `std::optional<StorePath>` once input-addressed
+ derivations are allowed to depend on cont-addressed derivations */
StorePath path;
};
@@ -23,13 +25,28 @@ struct DerivationOutputFixed
FixedOutputHash hash; /* hash used for expected hash computation */
};
+struct DerivationOutputFloating
+{
+ /* information used for expected hash computation */
+ FileIngestionMethod method;
+ HashType hashType;
+};
+
struct DerivationOutput
{
std::variant<
DerivationOutputInputAddressed,
- DerivationOutputFixed
+ DerivationOutputFixed,
+ DerivationOutputFloating
> output;
- StorePath path(const Store & store, std::string_view drvName) const;
+ std::optional<HashType> hashAlgoOpt(const Store & store) const;
+ std::optional<StorePath> pathOpt(const Store & store, std::string_view drvName) const;
+ /* DEPRECATED: Remove after CA drvs are fully implemented */
+ StorePath path(const Store & store, std::string_view drvName) const {
+ auto p = pathOpt(store, drvName);
+ if (!p) throw Error("floating content-addressed derivations are not yet implemented");
+ return *p;
+ }
};
typedef std::map<string, DerivationOutput> DerivationOutputs;