nixpkgs/pkgs/build-support/fetchsvn/default.nix
aszlig 463378f7cc
fetchsvn: Add ignoreExternals attribute.
There are some SVN repositories out there which don't have revision information
tied to externals. By using ignoreExternals, fetchsvn won't fetch these
externals anymore, so the fetch won't fail with a checksum mismatch, should
there be some changes in some of those external repositories.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2013-03-27 00:26:55 +01:00

42 lines
1.3 KiB
Nix

{stdenv, subversion, sshSupport ? false, openssh ? null}:
{url, rev ? "HEAD", md5 ? "", sha256 ? "", ignoreExternals ? false}:
let
repoName = with stdenv.lib;
let
fst = head;
snd = l: head (tail l);
trd = l: head (tail (tail l));
path_ = reverseList (splitString "/" url);
path = if head path_ == "" then tail path_ else path_;
in
# ../repo/trunk -> repo
if fst path == "trunk" then snd path
# ../repo/branches/branch -> repo-branch
else if snd path == "branches" then "${trd path}-${fst path}"
# ../repo/tags/tag -> repo-tag
else if snd path == "tags" then "${trd path}-${fst path}"
# ../repo (no trunk) -> repo
else fst path;
in
stdenv.mkDerivation {
name = "${repoName}-r${toString rev}";
builder = ./builder.sh;
buildInputs = [subversion];
outputHashAlgo = if sha256 == "" then "md5" else "sha256";
outputHashMode = "recursive";
outputHash = if sha256 == "" then md5 else sha256;
inherit url rev sshSupport openssh ignoreExternals;
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"
];
}