From 84444c00bf5ad06f8bca4e4cd68e6d227a8efd1e Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 12 Nov 2026 02:33:43 +0000 Subject: populate flake-input: replace symlinks pointing outside the store nix-store --add-root only replaces symlinks pointing into the store, so a symlink pointing elsewhere at the target path, e.g. one a symlink source left there, made delivering a flake fail. Populate removes such links. An edge case switches a symlink source to a flake source. --- pkgs/populate/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'pkgs/populate/default.nix') diff --git a/pkgs/populate/default.nix b/pkgs/populate/default.nix index 66c88c1..75fbf61 100644 --- a/pkgs/populate/default.nix +++ b/pkgs/populate/default.nix @@ -395,7 +395,13 @@ let set -efu read -r dir read -r path - if test -e ${quote target.path} && ! test -L ${quote target.path}; then + # nix-store --add-root only replaces links into the store. + if test -L ${quote target.path}; then + case $(readlink ${quote target.path}) in + /nix/store/*) ;; + *) rm ${quote target.path} ;; + esac + elif test -e ${quote target.path}; then rm -fR ${quote target.path} fi nix-store --realise "$path" --add-root ${quote target.path} --indirect >/dev/null -- cgit v1.3.1