From 13417770a3f6c5b1fc77fa8211505137f1758570 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Wed, 27 Jan 2010 12:12:35 +0000 Subject: applying patches provided by griswold svn path=/nixpkgs/trunk/; revision=19707 --- pkgs/build-support/fetchhg/nix-prefetch-hg | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 pkgs/build-support/fetchhg/nix-prefetch-hg (limited to 'pkgs/build-support/fetchhg') diff --git a/pkgs/build-support/fetchhg/nix-prefetch-hg b/pkgs/build-support/fetchhg/nix-prefetch-hg new file mode 100644 index 00000000000..b2711392acc --- /dev/null +++ b/pkgs/build-support/fetchhg/nix-prefetch-hg @@ -0,0 +1,71 @@ +#! /bin/sh -e + +url=$1 +rev=$2 +expHash=$3 + +hashType=$NIX_HASH_ALGO +if test -z "$hashType"; then + hashType=sha256 +fi +if test -z "$hashFormat"; then + hashFormat=--base32 +fi + +if test -z "$url"; then + echo "syntax: nix-prefetch-hg URL [rev [EXPECTED-HASH]]" >&2 + exit 1 +fi + +test -n "$rev" || rev="tip" + + +# If the hash was given, a file with that hash may already be in the +# store. +if test -n "$expHash"; then + finalPath=$(nix-store --print-fixed-path --recursive "$hashType" "$expHash" hg-archive) + if ! nix-store --check-validity "$finalPath" 2> /dev/null; then + finalPath= + fi + hash=$expHash +fi + + +# If we don't know the hash or a path with that hash doesn't exist, +# download the file and add it to the store. +if test -z "$finalPath"; then + + tmpPath=/tmp/hg-checkout-tmp-$$ + tmpClone=$tmpPath/hg-clone + tmpArchive=$tmpPath/hg-archive + mkdir $tmpPath + + trap "rm -rf $tmpPath" EXIT + + # Perform the checkout. + hg clone -q -y -U "$url" $tmpClone >&2 + hg archive -q -y -r "$rev" --cwd $tmpClone $tmpArchive + + + # Compute the hash. + hash=$(nix-hash --type $hashType $hashFormat $tmpArchive) + if ! test -n "$QUIET"; then echo "hash is $hash" >&2; fi + + # Add the downloaded file to the Nix store. + finalPath=$(nix-store --add-fixed --recursive "$hashType" $tmpArchive) + + if test -n "$expHash" -a "$expHash" != "$hash"; then + echo "hash mismatch for URL \`$url'" + exit 1 + fi + + +fi + +if ! test -n "$QUIET"; then echo "path is $finalPath" >&2; fi + +echo $hash + +if test -n "$PRINT_PATH"; then + echo $finalPath +fi -- cgit 1.4.1