Use IFD to reduce copySources invalidation surface #147
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes
copySources
invalidating the two-stage build. The reasons for the invalidation:copySourcesFrom
was an attribute of thedummy-src
derivation, causing invalidation if any sources changedcopySourcesFrom
was used directly as the cp source directory with$copySourcesFrom/$p
, invalidating the command script even if$p
has not changedThe PR introduces the following changes:
$copySourcesFrom/$p
changed to${copySourcesFrom + "/${p}"}
, and the surrounding for loop to aconcatStrings
. This causes the subdirectory to be treated like a proper nix path, so as long ascopySourcesFrom
is a local path, the script will only invalidate if$p
changes.ifdForceCopy
. This is to handle cases wherecopySourcesFrom
is not a local path, but a /nix/store one (like in our use case). The indirection effectively "snips" the dependency chain, so it doesn't matter what derivationcopySourcesFrom
comes from and how it invalidates,ifdForceCopy
will re-copy the subdirectory as a separate "leaf" store path. NOTE: this solution will effectively re-copy the sources twice. This could be reduced somewhat by using gzip instead of straight copying for the IFD.copySourcesFrom
was removed fromdummy-src
's attributes