aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/primops.cc19
-rw-r--r--tests/impure-derivations.nix5
2 files changed, 11 insertions, 13 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index eaf04320e..969391725 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -991,8 +991,8 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
bool contentAddressed = false;
bool isImpure = false;
std::optional<std::string> outputHash;
- std::string outputHashAlgo;
- auto ingestionMethod = FileIngestionMethod::Flat;
+ std::optional<std::string> outputHashAlgo;
+ std::optional<FileIngestionMethod> ingestionMethod;
StringSet outputs;
outputs.insert("out");
@@ -1190,15 +1190,16 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
.errPos = posDrvName
});
- std::optional<HashType> ht = parseHashTypeOpt(outputHashAlgo);
+ std::optional<HashType> ht = parseHashTypeOpt(outputHashAlgo.value_or("sha256"));
Hash h = newHashAllowEmpty(*outputHash, ht);
- auto outPath = state.store->makeFixedOutputPath(ingestionMethod, h, drvName);
+ auto method = ingestionMethod.value_or(FileIngestionMethod::Flat);
+ auto outPath = state.store->makeFixedOutputPath(method, h, drvName);
drv.env["out"] = state.store->printStorePath(outPath);
drv.outputs.insert_or_assign("out",
DerivationOutput::CAFixed {
.hash = FixedOutputHash {
- .method = ingestionMethod,
+ .method = method,
.hash = std::move(h),
},
});
@@ -1211,19 +1212,21 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
.errPos = posDrvName
});
- HashType ht = parseHashType(outputHashAlgo);
+ auto ht = parseHashType(outputHashAlgo.value_or("sha256"));
+ auto method = ingestionMethod.value_or(FileIngestionMethod::Recursive);
+
for (auto & i : outputs) {
drv.env[i] = hashPlaceholder(i);
if (isImpure)
drv.outputs.insert_or_assign(i,
DerivationOutput::Impure {
- .method = ingestionMethod,
+ .method = method,
.hashType = ht,
});
else
drv.outputs.insert_or_assign(i,
DerivationOutput::CAFloating {
- .method = ingestionMethod,
+ .method = method,
.hashType = ht,
});
}
diff --git a/tests/impure-derivations.nix b/tests/impure-derivations.nix
index 2fed56fe7..98547e6c1 100644
--- a/tests/impure-derivations.nix
+++ b/tests/impure-derivations.nix
@@ -15,8 +15,6 @@ rec {
printf $((x + 1)) > $TEST_ROOT/counter
'';
__impure = true;
- outputHashAlgo = "sha256";
- outputHashMode = "recursive";
impureEnvVars = [ "TEST_ROOT" ];
};
@@ -32,8 +30,6 @@ rec {
ln -s $out $out/self
'';
__impure = true;
- outputHashAlgo = "sha256";
- outputHashMode = "recursive";
};
# This is not allowed.
@@ -53,7 +49,6 @@ rec {
x=$(< ${impureOnImpure}/n)
printf ''${x:0:1} > $out
'';
- outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-eBYxcgkuWuiqs4cKNgKwkb3vY/HR0vVsJnqe8itJGcQ=";
};