diff options
Diffstat (limited to 'pkgs')
| -rw-r--r-- | pkgs/krops/default.nix | 11 | ||||
| -rw-r--r-- | pkgs/populate/default.nix | 41 |
2 files changed, 47 insertions, 5 deletions
diff --git a/pkgs/krops/default.nix b/pkgs/krops/default.nix index 75a4d14..dcda28f 100644 --- a/pkgs/krops/default.nix +++ b/pkgs/krops/default.nix @@ -80,6 +80,7 @@ in backup ? false, force ? false, allocateTTY ? false, + prune ? false, source, target }: let @@ -87,7 +88,7 @@ in in writers.writeDash name '' set -efu - ${populate { inherit backup force source; target = target'; }} + ${populate { inherit backup force prune source; target = target'; }} ${runShell target' { inherit allocateTTY; } (command target'.path)} ''; @@ -99,6 +100,7 @@ in flake ? null, force ? false, operation ? "switch", + prune ? false, source, target, useNixOutputMonitor ? "opportunistic" @@ -124,8 +126,8 @@ in writers.writeDash name '' set -efu ${lib.optionalString (buildTarget' != target') - (populate { inherit backup force source; target = buildTarget'; })} - ${populate { inherit backup force source; target = target'; }} + (populate { inherit backup force prune source; target = buildTarget'; })} + ${populate { inherit backup force prune source; target = target'; }} ${rebuild { flake = flake'; inherit useNixOutputMonitor; } ([ operation ] ++ lib.optionals crossDeploy [ @@ -142,6 +144,7 @@ in writeTest = name: { backup ? false, force ? false, + prune ? false, source, target, trace ? false @@ -151,7 +154,7 @@ in assert lib.isLocalTarget target'; writers.writeDash name '' set -efu - ${populate { inherit backup force source; target = target'; }} >&2 + ${populate { inherit backup force prune source; target = target'; }} >&2 NIX_PATH=${lib.escapeShellArg target'.path} \ ${nix}/bin/nix-build \ -A system \ diff --git a/pkgs/populate/default.nix b/pkgs/populate/default.nix index 5472b5d..553183e 100644 --- a/pkgs/populate/default.nix +++ b/pkgs/populate/default.nix @@ -169,6 +169,44 @@ let fi ''; + # Removes entries of the target directory that aren't sources, garbage + # collector roots of flake inputs of sources that aren't flake or + # flake-input sources, and uploads left behind by interrupted runs. + prune' = target: sources: let + pattern = names: concatMapStringsSep "|" quote names; + flakeNames = attrNames (filterAttrs + (_: source: elem source.type [ "flake" "flake-input" ]) + sources); + in runShell target /* sh */ '' + set -efu + cd ${quote target.path} + ls -A | while read -r name; do + case $name in + ${pattern (attrNames sources ++ [ ".populate" ])}) ;; + *) + >&2 printf 'pruning %s\n' ${quote target.path}/"$name" + rm -fR ./"$name" + ;; + esac + done + roots=.populate/flake-inputs + if test -d "$roots"; then + ls -A "$roots" | while read -r name; do + case $name in + ${optionalString (flakeNames != []) "${pattern flakeNames}) ;;"} + *) rm -fR "$roots"/"$name" ;; + esac + done + if test -z "$(ls -A "$roots")"; then + rmdir "$roots" + fi + fi + if test -e .populate/flake-uploads; then + chmod -R u+w .populate/flake-uploads + rm -fR .populate/flake-uploads + fi + ''; + pop.derivation = target: source: runShell target /* sh */ '' nix-build -E ${quote source.text} -o ${quote target.path} >&2 ''; @@ -761,7 +799,7 @@ let in -{ backup ? false, force ? false, source, target }: +{ backup ? false, force ? false, prune ? false, source, target }: writers.writeDash "populate.${target.host}" '' set -efu @@ -776,6 +814,7 @@ writers.writeDash "populate.${target.host}" '' ${optionalString backup (do-backup { inherit target; })} ${concatStringsSep "\n" (mapAttrsToList (populate target) source)} ${flakes target source} + ${optionalString prune (prune' target source)} # Stop the ssh master, if any source started one. if ${ssh' target} -q -O check ${quote target.host} 2>/dev/null; then |
