diff options
| author | Martin Messer <martin.messer@cyberus-technology.de> | 2022-12-20 10:43:15 +0100 |
|---|---|---|
| committer | Martin Messer <martin.messer@cyberus-technology.de> | 2023-12-07 16:55:39 +0100 |
| commit | ddfddf4b719134ac0acd04595372ca1bde4d0879 (patch) | |
| tree | 9c95c7db81af75df15d2933dda7562ad82674ddb | |
| parent | checkpointedBuilds: allow dotglob and remove debugging leftover (diff) | |
| download | nixpkgs-ddfddf4b719134ac0acd04595372ca1bde4d0879.tar.gz | |
checkpointedBuilds: add comments in the code
| -rw-r--r-- | pkgs/build-support/build-incremental.nix | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/pkgs/build-support/build-incremental.nix b/pkgs/build-support/build-incremental.nix index d3ddb3a68384..e7bbf3871069 100644 --- a/pkgs/build-support/build-incremental.nix +++ b/pkgs/build-support/build-incremental.nix @@ -20,11 +20,21 @@ rec { prepareIncrementalBuild = drv: drv.overrideAttrs (old: { outputs = [ "out" ]; name = drv.name + "-incrementalBuildArtifacts"; + # To determine differences between the state of the build directory + # from an earlier build and a later one we store the state of the build + # directory before build, but after patch phases. + # This way, the same derivation can be used multiple times and only changes are detected. + # Additionally Removed files are handled correctly in later builds. preBuild = (old.preBuild or "") + '' mkdir -p $out/sources cp -r ./* $out/sources/ ''; + # After the build the build directory is copied again + # to get the output files. + # We copy the complete build folder, to take care for + # Build tools, building in the source directory, instead of + # having a build root directory, e.G the Linux kernel. installPhase = '' mkdir -p $out/outputs cp -r ./* $out/outputs/ @@ -40,6 +50,10 @@ rec { * in mkIncrementalBuild drv incrementalBuildArtifacts */ mkIncrementalBuild = drv: previousBuildArtifacts: drv.overrideAttrs (old: { + # The actual incremental build phase. + # We compare the changed sources from a previous build with the current and create a patch + # Afterwards we clean the build directory to copy the previous output files (Including the sources) + # The source difference patch is applied to get the latest changes again to allow short build times. preBuild = (old.preBuild or "") + '' set +e diff -ur ${previousBuildArtifacts}/sources ./ > sourceDifference.patch |
