From 60e7948db1fa335108cb43dc58d1c77859069896 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 17 Dec 2004 11:04:18 +0000 Subject: [PATCH] * Allow a known hash to be specified. svn path=/nixpkgs/trunk/; revision=1892 --- pkgs/build-support/fetchsvn/nix-prefetch-svn | 48 ++++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/pkgs/build-support/fetchsvn/nix-prefetch-svn b/pkgs/build-support/fetchsvn/nix-prefetch-svn index 4ff17d7789d..7f5f6828941 100755 --- a/pkgs/build-support/fetchsvn/nix-prefetch-svn +++ b/pkgs/build-support/fetchsvn/nix-prefetch-svn @@ -2,6 +2,7 @@ url=$1 rev=$2 +hash=$3 if test -z "$url"; then echo "syntax: nix-prefetch-svn URL [REVISION]" >&2 @@ -10,27 +11,32 @@ fi test -n "$rev" || rev="HEAD" -# !!! hacky; we should have a way to query the location of the store. -if storeDir=$(which nix-store); then - storeDir=$(dirname $(dirname "$storeDir"))/store -else - storeDir=/nix/store +# Determine the hash, unless it was given. +if test -z "$hash"; then + + # !!! hacky; we should have a way to query the location of the store. + if storeDir=$(which nix-store); then + storeDir=$(dirname $(dirname "$storeDir"))/store + else + storeDir=/nix/store + fi + + # !!! race? should be relatively safe, `svn export' barfs if $tmpPath exists. + tmpPath1=$storeDir/svn-checkout-tmp-$$ + + # Perform the checkout. + svn export -r "$rev" "$url" $tmpPath1 >&2 + + # Compute the hash. + hash=$(nix-hash $tmpPath1) + echo "hash is $hash" >&2 + + # Rename it so that the fetchsvn builder can find it. + tmpPath2=$storeDir/svn-checkout-tmp-$hash + test -e $tmpPath2 || mv $tmpPath1 $tmpPath2 # !!! race + fi -# !!! race? should be relatively safe, `svn export' barfs if $tmpPath exists. -tmpPath1=$storeDir/svn-checkout-tmp-$$ - -# Perform the checkout. -svn export -r "$rev" "$url" $tmpPath1 >&2 - -# Compute the hash. -hash=$(nix-hash $tmpPath1) -echo "hash is $hash" >&2 - -# Rename it so that the fetchsvn builder can find it. -tmpPath2=$storeDir/svn-checkout-tmp-$hash -test -e $tmpPath2 || mv $tmpPath1 $tmpPath2 # !!! race - # Create a Nix expression that does a fetchsvn. nixExpr=$(dirname $(readlink -f $0))/../../system/i686-linux.nix storeExpr=$( \ @@ -42,7 +48,9 @@ finalPath=$(nix-store -qnB --force-realise $storeExpr) echo "path is $finalPath" >&2 -rm -rf $tmpPath2 || true +if test -n "$tmpPath2"; then + rm -rf $tmpPath2 || true +fi echo $hash