Merge pull request #6347 from edolstra/fix-output-hash-algo

Fix handling of outputHash when outputHashAlgo is not specified
This commit is contained in:
Eelco Dolstra 2022-04-01 13:18:26 +02:00 committed by GitHub
commit c74eac9fde
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 6 deletions

View file

@ -991,7 +991,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
bool contentAddressed = false; bool contentAddressed = false;
bool isImpure = false; bool isImpure = false;
std::optional<std::string> outputHash; std::optional<std::string> outputHash;
std::optional<std::string> outputHashAlgo; std::string outputHashAlgo;
std::optional<FileIngestionMethod> ingestionMethod; std::optional<FileIngestionMethod> ingestionMethod;
StringSet outputs; StringSet outputs;
@ -1190,8 +1190,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
.errPos = posDrvName .errPos = posDrvName
}); });
std::optional<HashType> ht = parseHashTypeOpt(outputHashAlgo.value_or("sha256")); auto h = newHashAllowEmpty(*outputHash, parseHashTypeOpt(outputHashAlgo));
Hash h = newHashAllowEmpty(*outputHash, ht);
auto method = ingestionMethod.value_or(FileIngestionMethod::Flat); auto method = ingestionMethod.value_or(FileIngestionMethod::Flat);
auto outPath = state.store->makeFixedOutputPath(method, h, drvName); auto outPath = state.store->makeFixedOutputPath(method, h, drvName);
@ -1212,7 +1211,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
.errPos = posDrvName .errPos = posDrvName
}); });
auto ht = parseHashType(outputHashAlgo.value_or("sha256")); auto ht = parseHashTypeOpt(outputHashAlgo).value_or(htSHA256);
auto method = ingestionMethod.value_or(FileIngestionMethod::Recursive); auto method = ingestionMethod.value_or(FileIngestionMethod::Recursive);
for (auto & i : outputs) { for (auto & i : outputs) {

View file

@ -64,8 +64,7 @@ rec {
dependentFixedOutput = mkDerivation { dependentFixedOutput = mkDerivation {
name = "dependent-fixed-output"; name = "dependent-fixed-output";
outputHashMode = "recursive"; outputHashMode = "recursive";
outputHashAlgo = "sha256"; outputHash = "sha512-7aJcmSuEuYP5tGKcmGY8bRr/lrCjJlOxP2mIUjO/vMQeg6gx/65IbzRWES8EKiPDOs9z+wF30lEfcwxM/cT4pw==";
outputHash = "sha256-QvtAMbUl/uvi+LCObmqOhvNOapHdA2raiI4xG5zI5pA=";
buildCommand = '' buildCommand = ''
cat ${dependentCA}/dep cat ${dependentCA}/dep
echo foo > $out echo foo > $out