58 lines
1.3 KiB
Bash
Executable File
58 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p jq -p xmlstarlet -p curl
|
|
set -euo pipefail
|
|
|
|
cat << EOL
|
|
{ fetchurl }: [
|
|
EOL
|
|
|
|
mapfile -t repos < <(
|
|
xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.config |
|
|
while IFS= read index
|
|
do
|
|
curl --compressed -fsL "$index" | \
|
|
jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
|
|
done
|
|
)
|
|
|
|
find .packages fake-home/.nuget/packages -name \*.nupkg -printf '%P\n' | sort -u |
|
|
while IFS= read file
|
|
do
|
|
packagedir=$(dirname $file)
|
|
version=$(basename $packagedir)
|
|
package=$(dirname $packagedir)
|
|
|
|
found=false
|
|
for repo in "${repos[@]}"
|
|
do
|
|
url="$repo$package/$version/$package.$version.nupkg"
|
|
if curl -fsL "$url" -o /dev/null
|
|
then
|
|
found=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if ! $found
|
|
then
|
|
echo "couldn't find $package $version" >&2
|
|
exit 1
|
|
fi
|
|
|
|
sha256=$(nix-prefetch-url "$url" 2>/dev/null)
|
|
cat << EOL
|
|
{
|
|
name = "$package";
|
|
version = "$version";
|
|
src = fetchurl {
|
|
url = "$url";
|
|
sha256 = "$sha256";
|
|
};
|
|
}
|
|
EOL
|
|
done
|
|
|
|
cat << EOL
|
|
]
|
|
EOL
|