 cf127c9dc3
			
		
	
	
		cf127c9dc3
		
			
		
	
	
	
	
		
			
			It's hard to put the sourcing of ./.attrs.sh into all builder consistently - mistakes will happen. Thus, load structured attrs once in make-derivation and then source the remaining builder on top. This should fix quite a few builders with structured attributes in principle. Most importantly it helps substitute / substituteAll, which are required for bootstrap on some platforms.
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # 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 "[0m[01;36m=IPFS=[0m 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 "[0m[01;36m=IPFS=[0m 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 "[01;31merror:[0m cannot download $ipfs from ipfs or the given url"
 | ||
| echo
 | ||
| set +o noglob
 | ||
| exit 1
 |