nixpkgs/pkgs/build-support/fetchipfs/builder.sh

88 lines
2.3 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

source $stdenv/setup
# Curl flags to handle redirects, not use EPSV, handle cookies for
# servers to need them during redirects, and work on SSL without a
# certificate (this isn't a security problem because we check the
# cryptographic hash of the output anyway).
set -o noglob
curl="curl \
--location \
--max-redirs 20 \
--retry 2 \
--disable-epsv \
--cookie-jar cookies \
--insecure \
--speed-time 5 \
-# \
--fail \
$curlOpts \
$NIX_CURL_FLAGS"
finish() {
runHook postFetch
set +o noglob
exit 0
}
ipfs_add() {
if curl --retry 0 --head --silent "localhost:5001" > /dev/null; then
echo "=IPFS= add $ipfs"
tar --owner=root --group=root -cWf "source.tar" $(echo *)
res=$(curl -# -F "file=@source.tar" "localhost:5001/api/v0/tar/add" | sed 's/.*"Hash":"\(.*\)".*/\1/')
if [ $ipfs != $res ]; then
echo "\`ipfs tar add' results in $res when $ipfs is expected"
exit 1
fi
rm "source.tar"
fi
}
echo
mkdir download
cd download
if curl --retry 0 --head --silent "localhost:5001" > /dev/null; then
curlexit=18;
echo "=IPFS= get $ipfs"
# if we get error code 18, resume partial download
while [ $curlexit -eq 18 ]; do
# keep this inside an if statement, since on failure it doesn't abort the script
if $curl -C - "http://localhost:5001/api/v0/tar/cat?arg=$ipfs" --output "$ipfs.tar"; then
unpackFile "$ipfs.tar"
rm "$ipfs.tar"
set +o noglob
mv $(echo *) "$out"
finish
else
curlexit=$?;
fi
done
fi
if test -n "$url"; then
curlexit=18;
echo "Downloading $url"
while [ $curlexit -eq 18 ]; do
# keep this inside an if statement, since on failure it doesn't abort the script
if $curl "$url" -O; then
set +o noglob
tmpfile=$(echo *)
unpackFile $tmpfile
rm $tmpfile
ipfs_add
mv $(echo *) "$out"
finish
else
curlexit=$?;
fi
done
fi
echo "error: cannot download $ipfs from ipfs or the given url"
echo
set +o noglob
exit 1