Add missing temproots for cached sources and existing derivations
This commit is contained in:
@@ -47,6 +47,12 @@ std::pair<StorePath, Hash> fetchToStore2(
|
||||
auto hash = Hash::parseSRI(fetchers::getStrAttr(*res, "hash"));
|
||||
auto storePath =
|
||||
store.makeFixedOutputPathFromCA(name, ContentAddressWithReferences::fromParts(method, hash, {}));
|
||||
|
||||
/* Add a temproot before the call to isValidPath to prevent accidental GC in case the
|
||||
input is cached. Note that this must be done before to avoid races. */
|
||||
if (mode != FetchMode::DryRun)
|
||||
store.addTempRoot(storePath);
|
||||
|
||||
if (mode == FetchMode::DryRun || store.isValidPath(storePath)) {
|
||||
debug(
|
||||
"source path '%s' cache hit in '%s' (hash '%s')",
|
||||
|
||||
@@ -139,6 +139,12 @@ StorePath Store::writeDerivation(const Derivation & drv, RepairFlag repair)
|
||||
{
|
||||
auto [suffix, contents, references, path] = infoForDerivation(*this, drv);
|
||||
|
||||
/* In case the derivation is already valid, we bail out early since that's
|
||||
faster. But we need to make sure that the derivation has a corresponding
|
||||
temproot. It is added by the remote in addToStoreFromDump, but we'd like
|
||||
to avoid sending a lot of drv contents to the daemon. */
|
||||
addTempRoot(path);
|
||||
|
||||
if (isValidPath(path) && !repair)
|
||||
return path;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user