mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 06:53:01 +00:00
checkpointBuildTools: minor refactor
Add some minor improvements of the package, and use temp files for the source difference patch, such that it is more reliable. This follows from the suggestions of @infinisil. Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
This commit is contained in:
parent
df62c3c87f
commit
5f3aad00ff
@ -1,4 +1,16 @@
|
|||||||
{ pkgs }:
|
{ lib
|
||||||
|
, buildPackages
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# rudimentary support for cross-compiling
|
||||||
|
# see: https://github.com/NixOS/nixpkgs/pull/279487#discussion_r1444449726
|
||||||
|
inherit (buildPackages)
|
||||||
|
mktemp
|
||||||
|
rsync
|
||||||
|
;
|
||||||
|
in
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
/* Prepare a derivation for local builds.
|
/* Prepare a derivation for local builds.
|
||||||
*
|
*
|
||||||
@ -51,23 +63,27 @@ rec {
|
|||||||
* checkpointArtifacts = prepareCheckpointBuild drv
|
* checkpointArtifacts = prepareCheckpointBuild drv
|
||||||
* in mkCheckpointBuild drv checkpointArtifacts
|
* in mkCheckpointBuild drv checkpointArtifacts
|
||||||
*/
|
*/
|
||||||
mkCheckpointBuild = drv: previousBuildArtifacts: drv.overrideAttrs (old: {
|
mkCheckpointBuild = drv: checkpointArtifacts: drv.overrideAttrs (old: {
|
||||||
# The actual checkpoint build phase.
|
# The actual checkpoint build phase.
|
||||||
# We compare the changed sources from a previous build with the current and create a patch
|
# 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)
|
# 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.
|
# The source difference patch is applied to get the latest changes again to allow short build times.
|
||||||
preBuild = (old.preBuild or "") + ''
|
preBuild = (old.preBuild or "") + ''
|
||||||
set +e
|
set +e
|
||||||
diff -ur ${previousBuildArtifacts}/sources ./ > sourceDifference.patch
|
sourceDifferencePatchFile=$(${mktemp}/bin/mktemp)
|
||||||
|
diff -ur ${checkpointArtifacts}/sources ./ > "$sourceDifferencePatchFile"
|
||||||
set -e
|
set -e
|
||||||
shopt -s extglob dotglob
|
shopt -s dotglob
|
||||||
rm -r !("sourceDifference.patch")
|
rm -r *
|
||||||
${pkgs.rsync}/bin/rsync -cutU --chown=$USER:$USER --chmod=+w -r ${previousBuildArtifacts}/outputs/* .
|
${rsync}/bin/rsync \
|
||||||
patch -p 1 -i sourceDifference.patch
|
--checksum --times --atimes --chown=$USER:$USER --chmod=+w \
|
||||||
|
-r ${checkpointArtifacts}/outputs/ .
|
||||||
|
patch -p 1 -i "$sourceDifferencePatchFile"
|
||||||
|
rm "$sourceDifferencePatchFile"
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
mkCheckpointedBuild = pkgs.lib.warn
|
mkCheckpointedBuild = lib.warn
|
||||||
"`mkCheckpointedBuild` is deprecated, use `mkCheckpointBuild` instead!"
|
"`mkCheckpointedBuild` is deprecated, use `mkCheckpointBuild` instead!"
|
||||||
mkCheckpointBuild;
|
mkCheckpointBuild;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user