diff options
author | Rob Vermaas <rob.vermaas@gmail.com> | 2010-01-27 12:12:35 +0000 |
---|---|---|
committer | Rob Vermaas <rob.vermaas@gmail.com> | 2010-01-27 12:12:35 +0000 |
commit | 13417770a3f6c5b1fc77fa8211505137f1758570 (patch) | |
tree | 77f45f3e20e742ee71f1800fcd9006c6fdd8da6c /pkgs/build-support | |
parent | 77bf39bf826fe945838e6868ae065ad08c29141c (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.sh | 6 | ||||
-rw-r--r-- | pkgs/build-support/fetchgit/default.nix | 4 | ||||
-rw-r--r-- | pkgs/build-support/fetchhg/nix-prefetch-hg | 71 |
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 |