diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index c5929a41c..cd2e86f29 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1004,16 +1004,18 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source, deletePath(realPath); + if (info.ca != "" && + !((hasPrefix(info.ca, "text:") && !info.references.count(info.path)) + || info.references.empty())) + settings.requireExperimentalFeature("ca-references"); + /* While restoring the path from the NAR, compute the hash of the NAR. */ std::unique_ptr hashSink; - if (info.ca == "") + if (info.ca == "" || !info.references.count(info.path)) hashSink = std::make_unique(htSHA256); - else { - if (!info.references.empty()) - settings.requireExperimentalFeature("ca-references"); + else hashSink = std::make_unique(htSHA256, storePathToHash(printStorePath(info.path))); - } LambdaSource wrapperSource([&](unsigned char * data, size_t len) -> size_t { size_t n = source.read(data, len); @@ -1268,7 +1270,7 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair) printMsg(lvlTalkative, "checking contents of '%s'", printStorePath(i)); std::unique_ptr hashSink; - if (info->ca == "") + if (info->ca == "" || !info->references.count(info->path)) hashSink = std::make_unique(info->narHash.type); else hashSink = std::make_unique(info->narHash.type, storePathToHash(printStorePath(info->path)));