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.
This commit is contained in:
Åsmund Østvold 2022-03-10 09:11:04 +01:00 committed by GitHub
parent eb7e73916e
commit d8012c5458
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\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 "]"