From d8012c545827786fa35f6df33d1e2225c1513e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85smund=20=C3=98stvold?= Date: Thu, 10 Mar 2022 09:11:04 +0100 Subject: [PATCH] nuget-to-nix: deterministic sorting of output list (#162187) It is the package list output that should be sorted. The current output sequence is not logical because '.' is sorted in front of '/' with input sorting and is not deterministic for different language environments. To get a deterministic and logical sorting in environments with different language configured, env "LC_ALL=C" is set and the produced strings is that is sorted. To get alphabetic sorting and not a pure ASCII value sort "--ignore-case" is added. --- pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh index 55a49937018..2d02767814e 100755 --- a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh +++ b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh @@ -8,6 +8,8 @@ if [ $# -eq 0 ]; then fi pkgs=$1 +tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX) +trap 'rm -f "$tmpfile" EXIT echo "{ fetchNuGet }: [" @@ -17,7 +19,9 @@ while read pkg_spec; do sed -nE 's/.*([^<]*).*/\1/p; s/.*([^<+]*).*/\1/p' "$pkg_spec") pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)" - echo " (fetchNuGet { pname = \"$pkg_name\"; version = \"$pkg_version\"; sha256 = \"$pkg_sha256\"; })" -done < <(find $1 -name '*.nuspec' | sort) + echo " (fetchNuGet { pname = \"$pkg_name\"; version = \"$pkg_version\"; sha256 = \"$pkg_sha256\"; })" >> ${tmpfile} +done < <(find $1 -name '*.nuspec') + +LC_ALL=C sort --ignore-case ${tmpfile} echo "]"