From 700f4c538885bb9c1290d1723ec5380c2fe6e910 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Mon, 16 Dec 2019 12:57:04 -0500 Subject: [PATCH] dockerTools.buildLayeredImage: prepare to exclude some paths Without changing behavior, since this code is fiddly, make it possible to add a filtering step before packaging individual paths. --- pkgs/build-support/docker/default.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index 77edbb76601a..eb3863bcfbad 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -319,15 +319,20 @@ rec { | jshon -d config \ | jshon -s "1970-01-01T00:00:01Z" -i created > generic.json + # WARNING! # The following code is fiddly w.r.t. ensuring every layer is # created, and that no paths are missed. If you change the # following head and tail call lines, double-check that your # code behaves properly when the number of layers equals: # maxLayers-1, maxLayers, and maxLayers+1 - head -n $((maxLayers - 1)) $paths | cat -n | xargs -P$NIX_BUILD_CORES -n2 ${storePathToLayer} - if [ $(cat $paths | wc -l) -ge $maxLayers ]; then - tail -n+$maxLayers $paths | xargs ${storePathToLayer} $maxLayers + paths() { + cat $paths + } + + paths | head -n $((maxLayers - 1)) | cat -n | xargs -P$NIX_BUILD_CORES -n2 ${storePathToLayer} + if [ $(paths | wc -l) -ge $maxLayers ]; then + paths | tail -n+$maxLayers | xargs ${storePathToLayer} $maxLayers fi echo "Finished building layer '$name'"