2011-08-28 18:03:14 +02:00
|
|
|
{stdenv, git, cacert}:
|
2010-01-27 13:12:35 +01:00
|
|
|
{url, rev ? "HEAD", md5 ? "", sha256 ? "", leaveDotGit ? false }:
|
2009-06-24 14:48:01 +02:00
|
|
|
|
2009-11-08 04:02:10 +01:00
|
|
|
/* NOTE:
|
|
|
|
fetchgit has one problem: git fetch only works for refs.
|
|
|
|
This is because fetching arbitrary (maybe dangling) commits may be a security risk
|
|
|
|
and checking whether a commit belongs to a ref is expensive. This may
|
|
|
|
change in the future when some caching is added to git (?)
|
|
|
|
Usually refs are either tags (refs/tags/*) or branches (refs/heads/*)
|
|
|
|
Cloning branches will make the hash check fail when there is an update.
|
|
|
|
But not all patches we want can be accessed by tags.
|
|
|
|
|
|
|
|
The workaround is getting the last n commits so that it's likly that they
|
|
|
|
still contain the hash we want.
|
|
|
|
|
|
|
|
for now : increase depth iteratively (TODO)
|
|
|
|
|
|
|
|
real fix: ask git folks to add a
|
|
|
|
git fetch $HASH contained in $BRANCH
|
|
|
|
facility because checking that $HASH is contained in $BRANCH is less
|
|
|
|
expensive than fetching --depth $N.
|
|
|
|
Even if git folks implemented this feature soon it may take years until
|
|
|
|
server admins start using the new version?
|
|
|
|
*/
|
|
|
|
|
2009-06-24 14:48:01 +02:00
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "git-export";
|
|
|
|
builder = ./builder.sh;
|
2011-08-20 16:29:57 +02:00
|
|
|
fetcher = ./nix-prefetch-git;
|
2009-06-24 14:48:01 +02:00
|
|
|
buildInputs = [git];
|
|
|
|
|
|
|
|
outputHashAlgo = if sha256 == "" then "md5" else "sha256";
|
|
|
|
outputHashMode = "recursive";
|
|
|
|
outputHash = if sha256 == "" then md5 else sha256;
|
|
|
|
|
2010-01-27 13:12:35 +01:00
|
|
|
inherit url rev leaveDotGit;
|
2009-06-24 14:48:01 +02:00
|
|
|
|
2011-08-28 18:03:14 +02:00
|
|
|
GIT_SSL_CAINFO = "${cacert}/etc/ca-bundle.crt";
|
|
|
|
|
2009-06-24 14:48:01 +02:00
|
|
|
impureEnvVars = [
|
|
|
|
# We borrow these environment variables from the caller to allow
|
|
|
|
# easy proxy configuration. This is impure, but a fixed-output
|
|
|
|
# derivation like fetchurl is allowed to do so since its result is
|
|
|
|
# by definition pure.
|
|
|
|
"http_proxy" "https_proxy" "ftp_proxy" "all_proxy" "no_proxy"
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|