summary refs log tree commit diff
path: root/pkgs/build-support/fetchhg
diff options
context:
space:
mode:
authorRob Vermaas <rob.vermaas@gmail.com>2010-01-27 12:12:35 +0000
committerRob Vermaas <rob.vermaas@gmail.com>2010-01-27 12:12:35 +0000
commit13417770a3f6c5b1fc77fa8211505137f1758570 (patch)
tree77f45f3e20e742ee71f1800fcd9006c6fdd8da6c /pkgs/build-support/fetchhg
parent77bf39bf826fe945838e6868ae065ad08c29141c (diff)
downloadnixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar.gz
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar.bz2
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar.lz
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar.xz
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.tar.zst
nixpkgs-13417770a3f6c5b1fc77fa8211505137f1758570.zip
applying patches provided by griswold
svn path=/nixpkgs/trunk/; revision=19707
Diffstat (limited to 'pkgs/build-support/fetchhg')
-rw-r--r--pkgs/build-support/fetchhg/nix-prefetch-hg71
1 files changed, 71 insertions, 0 deletions
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