about summary refs log tree commit diff
path: root/pkgs/build-support
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
parent77bf39bf826fe945838e6868ae065ad08c29141c (diff)
applying patches provided by griswold
svn path=/nixpkgs/trunk/; revision=19707
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/fetchgit/builder.sh6
-rw-r--r--pkgs/build-support/fetchgit/default.nix4
-rw-r--r--pkgs/build-support/fetchhg/nix-prefetch-hg71
3 files changed, 77 insertions, 4 deletions
diff --git a/pkgs/build-support/fetchgit/builder.sh b/pkgs/build-support/fetchgit/builder.sh
index 08a1cc5d34190..ba06aed90e18d 100644
--- a/pkgs/build-support/fetchgit/builder.sh
+++ b/pkgs/build-support/fetchgit/builder.sh
@@ -7,7 +7,9 @@ if test -n "$rev"; then
   cd $out
   git checkout $rev
 fi
-find $out -name .git\* | xargs rm -rf
 
-stopNest
+if test -z "$leaveDotGit"; then
+    find $out -name .git\* | xargs rm -rf
+fi
 
+stopNest
diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix
index 8fd86cd24815e..a0ad57ea30643 100644
--- a/pkgs/build-support/fetchgit/default.nix
+++ b/pkgs/build-support/fetchgit/default.nix
@@ -1,5 +1,5 @@
 {stdenv, git}:
-{url, rev ? "HEAD", md5 ? "", sha256 ? ""}:
+{url, rev ? "HEAD", md5 ? "", sha256 ? "", leaveDotGit ? false }:
 
 /* NOTE:
    fetchgit has one problem: git fetch only works for refs.
@@ -32,7 +32,7 @@ stdenv.mkDerivation {
   outputHashMode = "recursive";
   outputHash = if sha256 == "" then md5 else sha256;
 
-  inherit url rev;
+  inherit url rev leaveDotGit;
 
   impureEnvVars = [
     # We borrow these environment variables from the caller to allow
diff --git a/pkgs/build-support/fetchhg/nix-prefetch-hg b/pkgs/build-support/fetchhg/nix-prefetch-hg
new file mode 100644
index 0000000000000..b2711392acc4e
--- /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