From b1a3c47018acfb8ac6a4a980dd8fc31b7cd8b6c8 Mon Sep 17 00:00:00 2001 From: ItsBasi <5033630+ItsBasi@users.noreply.github.com> Date: Sat, 14 Jun 2025 11:29:48 +0200 Subject: [PATCH] linkFarm: allow files/directories with leading dashes Calling linkFarm with leading dashes, makes the used coreutils commands misidentify a filename, like "-foo", as a list of options, instead of an positional argument. --- pkgs/build-support/trivial-builders/default.nix | 4 ++-- pkgs/build-support/trivial-builders/test/link-farm.nix | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/trivial-builders/default.nix b/pkgs/build-support/trivial-builders/default.nix index ca2f33afa7b3..ab98daa585a4 100644 --- a/pkgs/build-support/trivial-builders/default.nix +++ b/pkgs/build-support/trivial-builders/default.nix @@ -671,8 +671,8 @@ rec { throw "linkFarm entries must be either attrs or a list!"; linkCommands = lib.mapAttrsToList (name: path: '' - mkdir -p "$(dirname ${lib.escapeShellArg "${name}"})" - ln -s ${lib.escapeShellArg "${path}"} ${lib.escapeShellArg "${name}"} + mkdir -p -- "$(dirname -- ${lib.escapeShellArg "${name}"})" + ln -s -- ${lib.escapeShellArg "${path}"} ${lib.escapeShellArg "${name}"} '') entries'; in runCommand name diff --git a/pkgs/build-support/trivial-builders/test/link-farm.nix b/pkgs/build-support/trivial-builders/test/link-farm.nix index f74aaa6667fd..b9b669741b9b 100644 --- a/pkgs/build-support/trivial-builders/test/link-farm.nix +++ b/pkgs/build-support/trivial-builders/test/link-farm.nix @@ -39,6 +39,11 @@ let linkFarmFromAttrs = linkFarm "linkFarmFromAttrs" { inherit foo hello; }; + + linkFarmDelimitOptionList = linkFarm "linkFarmDelimitOptionList" { + "-foo" = foo; + "-hello" = hello; + }; in runCommand "test-linkFarm" { } '' function assertPathEquals() { @@ -61,5 +66,9 @@ runCommand "test-linkFarm" { } '' assertPathEquals "${linkFarmFromAttrs}/foo" "${foo}" assertPathEquals "${linkFarmFromAttrs}/hello" "${hello}" + + assertPathEquals "${linkFarmDelimitOptionList}/-foo" "${foo}" + assertPathEquals "${linkFarmDelimitOptionList}/-hello" "${hello}" + touch $out ''