From bc67c840d62b6c09690c722da617781ef3aa6306 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Thu, 16 Apr 2026 09:11:19 +0100 Subject: [PATCH] symlinkJoin: support __structuredAttrs Use the $paths bash array from __structuredAttrs. Populate it from $pathsPath if passAsFile is used instead. --- .../build-support/trivial-builders/default.nix | 5 ++++- .../trivial-builders/test/symlink-join.nix | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/trivial-builders/default.nix b/pkgs/build-support/trivial-builders/default.nix index 4c7a35e15bb6..33ff9598ed3b 100644 --- a/pkgs/build-support/trivial-builders/default.nix +++ b/pkgs/build-support/trivial-builders/default.nix @@ -559,7 +559,10 @@ rec { paths = mapPaths (path: "${path}${stripPrefix}") paths; buildCommand = '' mkdir -p $out - for i in $(cat $pathsPath); do + if [ -n "''${pathsPath:-}" ] && [ -f "$pathsPath" ]; then + mapfile -d " " -t paths < "$pathsPath" + fi + for i in "''${paths[@]}"; do ${optionalString (!failOnMissing) "if test -d $i; then "}${lndir}/bin/lndir -silent $i $out${ optionalString (!failOnMissing) "; fi" } diff --git a/pkgs/build-support/trivial-builders/test/symlink-join.nix b/pkgs/build-support/trivial-builders/test/symlink-join.nix index d50581d3f38a..4750d9680d4a 100644 --- a/pkgs/build-support/trivial-builders/test/symlink-join.nix +++ b/pkgs/build-support/trivial-builders/test/symlink-join.nix @@ -55,6 +55,24 @@ in ''; }; + symlinkJoin-structured-attrs = testEqualContents { + assertion = "symlinkJoin-structured-attrs"; + actual = symlinkJoin { + __structuredAttrs = true; + name = "symlinkJoin-structured-attrs"; + paths = [ + foo + bar + baz + ]; + }; + expected = runCommand "symlinkJoin-foo-bar-baz" { } '' + mkdir -p $out/{var/lib/arbitrary,etc/test.d} + ln -s {${foo},${bar}}/etc/test.d/* $out/etc/test.d + ln -s ${baz}/var/lib/arbitrary/baz $out/var/lib/arbitrary/ + ''; + }; + symlinkJoin-strip-paths = testEqualContents { assertion = "symlinkJoin-strip-paths"; actual = symlinkJoin {