aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
committerMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
commitc4625b175f8200f643fd6e11010932ea44c78433 (patch)
treebce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn
parent49f735974dd103039ddc4cb576bb76555164a9e7 (diff)
parentd661aa56a8843e991261510c1bb28fdc2f6975ae (diff)
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7 git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/builder.sh25
-rw-r--r--infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/default.nix54
-rwxr-xr-xinfra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/nix-prefetch-svn79
3 files changed, 158 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/builder.sh b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/builder.sh
new file mode 100644
index 000000000000..ed3e65f07695
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/builder.sh
@@ -0,0 +1,25 @@
+source $stdenv/setup
+
+header "exporting $url (r$rev) into $out"
+
+if test -n "$http_proxy"; then
+ # Configure proxy
+ mkdir .subversion
+ proxy="${http_proxy#*://}"
+
+ echo '[global]' > .subversion/servers
+ echo "http-proxy-host = ${proxy%:*}" >> .subversion/servers
+ echo "http-proxy-port = ${proxy##*:}" >> .subversion/servers
+
+ export HOME="$PWD"
+fi;
+
+if test -z "$LC_ALL"; then
+ export LC_ALL="en_US.UTF-8"
+fi;
+
+svn export --trust-server-cert --non-interactive \
+ ${ignoreExternals:+--ignore-externals} ${ignoreKeywords:+--ignore-keywords} \
+ -r "$rev" "$url" "$out"
+
+stopNest
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/default.nix b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/default.nix
new file mode 100644
index 000000000000..06f0ea0a3d1f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/default.nix
@@ -0,0 +1,54 @@
+{ stdenvNoCC, buildPackages
+, subversion, glibcLocales, sshSupport ? true, openssh ? null
+}:
+
+{ url, rev ? "HEAD", md5 ? "", sha256 ? ""
+, ignoreExternals ? false, ignoreKeywords ? false, name ? null
+, preferLocalBuild ? true
+}:
+
+assert sshSupport -> openssh != null;
+
+let
+ repoName = with stdenvNoCC.lib;
+ let
+ fst = head;
+ snd = l: head (tail l);
+ trd = l: head (tail (tail l));
+ path_ =
+ (p: if head p == "" then tail p else p) # ~ drop final slash if any
+ (reverseList (splitString "/" url));
+ path = [ (removeSuffix "/" (head path_)) ] ++ (tail 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;
+
+ name_ = if name == null then "${repoName}-r${toString rev}" else name;
+in
+
+if md5 != "" then
+ throw "fetchsvn does not support md5 anymore, please use sha256"
+else
+stdenvNoCC.mkDerivation {
+ name = name_;
+ builder = ./builder.sh;
+ nativeBuildInputs = [ subversion glibcLocales ]
+ ++ stdenvNoCC.lib.optional sshSupport openssh;
+
+ SVN_SSH = if sshSupport then "${buildPackages.openssh}/bin/ssh" else null;
+
+ outputHashAlgo = "sha256";
+ outputHashMode = "recursive";
+ outputHash = sha256;
+
+ inherit url rev ignoreExternals ignoreKeywords;
+
+ impureEnvVars = stdenvNoCC.lib.fetchers.proxyImpureEnvVars;
+ inherit preferLocalBuild;
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/nix-prefetch-svn b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/nix-prefetch-svn
new file mode 100755
index 000000000000..03b9eb9a03df
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/build-support/fetchsvn/nix-prefetch-svn
@@ -0,0 +1,79 @@
+#! /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-svn URL [REVISION [EXPECTED-HASH]]" >&2
+ exit 1
+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" $dstFile)
+ 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="$(mktemp -d "${TMPDIR:-/tmp}/svn-checkout-tmp-XXXXXXXX")"
+ trap "rm -rf \"$tmpPath\"" EXIT
+
+ tmpFile="$tmpPath/$dstFile"
+
+ # Perform the checkout.
+ if test "$NIX_PREFETCH_SVN_LEAVE_DOT_SVN" != 1
+ then
+ command="export"
+ else
+ command="checkout"
+ fi
+
+ echo p | svn "$command" --quiet -r "$rev" "$url" "$tmpFile" >&2
+ echo "svn revision is $(svn info -r "$rev" "$url" | grep "Revision: " | cut -d' ' -f2)"
+
+ # Compute the hash.
+ hash=$(nix-hash --type $hashType $hashFormat $tmpFile)
+ 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" $tmpFile)
+
+ 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