From 1cf3103bcaf3b45aed2e8e0801f96207d2e98745 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 5 Jul 2024 12:49:55 +0200 Subject: [PATCH] devShellTools.unstructuredDerivationInputEnv: Match passAsFile basename --- pkgs/build-support/dev-shell-tools/default.nix | 18 ++++++++++++++++-- .../dev-shell-tools/tests/default.nix | 4 +--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/dev-shell-tools/default.nix b/pkgs/build-support/dev-shell-tools/default.nix index bf4c1f6de927..0a3acdcfb076 100644 --- a/pkgs/build-support/dev-shell-tools/default.nix +++ b/pkgs/build-support/dev-shell-tools/default.nix @@ -1,6 +1,6 @@ { lib, - writeText, + writeTextFile, }: let inherit (builtins) typeOf; @@ -29,7 +29,21 @@ rec { (name: value: let str = valueToString value; in if lib.elem name (drvAttrs.passAsFile or []) - then lib.nameValuePair "${name}Path" "${writeText "pass-as-text-${name}" str}" + then + let + nameHash = builtins.convertHash { + hash = "sha256:" + builtins.hashString "sha256" name; + toHashFormat = "nix32"; + }; + basename = ".attr-${nameHash}"; + in + lib.nameValuePair "${name}Path" "${ + writeTextFile { + name = "shell-passAsFile-${name}"; + text = str; + destination = "/${basename}"; + } + }/${basename}" else lib.nameValuePair name str ) (removeAttrs drvAttrs [ diff --git a/pkgs/build-support/dev-shell-tools/tests/default.nix b/pkgs/build-support/dev-shell-tools/tests/default.nix index e00ba24f8141..3f347bc4595a 100644 --- a/pkgs/build-support/dev-shell-tools/tests/default.nix +++ b/pkgs/build-support/dev-shell-tools/tests/default.nix @@ -143,9 +143,7 @@ in diff $exampleBarPathString $barPath - # TODO nice to have, as `cp $barPath foo/` preserves the basename: - # this is usually a mistake, so not that big a deal perhaps - # [[ "$(basename $exampleBarPathString)" = "$(basename $barPath)" ]] + [[ "$(basename $exampleBarPathString)" = "$(basename $barPath)" ]] ) ''${args:+fail "args should not be set by Nix. We don't expect it to and unstructuredDerivationInputEnv removes it."}