summary refs log tree commit diff
path: root/pkgs/build-support/fetchhg
diff options
context:
space:
mode:
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