Recursively substitute the realisations

Make sure that whenever we substitute a realisation, we also substitute
its entire closure
This commit is contained in:
regnat 2021-05-19 14:51:34 +02:00
parent ce1a6c6b13
commit a22755721b
3 changed files with 15 additions and 3 deletions

View file

@ -53,6 +53,12 @@ void DrvOutputSubstitutionGoal::tryNext()
return;
}
for (const auto & [drvOutputDep, _] : outputInfo->dependentRealisations) {
if (drvOutputDep != id) {
addWaitee(worker.makeDrvOutputSubstitutionGoal(drvOutputDep));
}
}
addWaitee(worker.makePathSubstitutionGoal(outputInfo->outPath));
if (waitees.empty()) outPathValid();

View file

@ -25,6 +25,8 @@
}
#define GENERATE_EQUAL(args...) GENERATE_ONE_CMP(==, args)
#define GENERATE_LEQ(args...) GENERATE_ONE_CMP(<, args)
#define GENERATE_NEQ(args...) GENERATE_ONE_CMP(!=, args)
#define GENERATE_CMP(args...) \
GENERATE_EQUAL(args) \
GENERATE_LEQ(args)
GENERATE_LEQ(args) \
GENERATE_NEQ(args)

View file

@ -17,11 +17,15 @@ buildDrvs () {
# Populate the remote cache
clearStore
buildDrvs --post-build-hook ../push-to-store.sh
nix copy --to $REMOTE_STORE --file ./content-addressed.nix
# Restart the build on an empty store, ensuring that we don't build
clearStore
buildDrvs --substitute --substituters $REMOTE_STORE --no-require-sigs -j0
buildDrvs --substitute --substituters $REMOTE_STORE --no-require-sigs -j0 transitivelyDependentCA
# Check that the thing weve just substituted has its realisation stored
nix realisation info --file ./content-addressed.nix transitivelyDependentCA
# Check that its dependencies have it too
nix realisation info --file ./content-addressed.nix dependentCA rootCA
# Same thing, but
# 1. With non-ca derivations