diff --git a/pkgs/build-support/fetchsvn/default.nix b/pkgs/build-support/fetchsvn/default.nix index 5a5f7533e7f7..ae8aabf858cd 100644 --- a/pkgs/build-support/fetchsvn/default.nix +++ b/pkgs/build-support/fetchsvn/default.nix @@ -1,8 +1,27 @@ {stdenv, subversion, sshSupport ? false, openssh ? null}: {url, rev ? "HEAD", md5 ? "", sha256 ? ""}: +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 = "svn-export"; + name = "${repoName}-r${toString rev}"; builder = ./builder.sh; buildInputs = [subversion]; diff --git a/pkgs/build-support/fetchsvn/nix-prefetch-svn b/pkgs/build-support/fetchsvn/nix-prefetch-svn index d15eb9a060cd..b9d10fea21ca 100755 --- a/pkgs/build-support/fetchsvn/nix-prefetch-svn +++ b/pkgs/build-support/fetchsvn/nix-prefetch-svn @@ -19,11 +19,18 @@ fi test -n "$rev" || rev="HEAD" +repoName=$(echo $url | sed ' + s,.*/\([^/]\+\)/trunk/*$,\1,;t + s,.*/\([^/]\+\)/branches/\([^/]\+\)/*$,\1-\2,;t + s,.*/\([^/]\+\)/tags/\([^/]\+\)/*$,\1-\2,;t + s,.*/\([^/]\+\)/*$,\1,;t +') +dstFile=$repoName-r$rev # 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" svn-export) + finalPath=$(nix-store --print-fixed-path --recursive "$hashType" "$expHash" $dstFile) if ! nix-store --check-validity "$finalPath" 2> /dev/null; then finalPath= fi @@ -34,9 +41,8 @@ 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/svn-checkout-tmp-$$ - tmpFile=$tmpPath/svn-export + tmpFile=$tmpPath/$dstFile mkdir $tmpPath trap "rm -rf $tmpPath" EXIT