aboutsummaryrefslogtreecommitdiff
path: root/pkgs/build-support/fetchsvnssh
diff options
context:
space:
mode:
authorSander van der Burg <s.vanderburg@tudelft.nl>2008-04-02 13:28:55 +0000
committerSander van der Burg <s.vanderburg@tudelft.nl>2008-04-02 13:28:55 +0000
commit99d512a41fb76a5daeda6c7bc5b69d1519f756d3 (patch)
tree9be3e674354e85acde0cef5b813c81fc7603ba5b /pkgs/build-support/fetchsvnssh
parentd453801a760c7f67470971185405eb3c725b89b4 (diff)
Added hacky fetchsvn component which allows users to fetch code over svn+ssh
svn path=/nixpkgs/trunk/; revision=11455
Diffstat (limited to 'pkgs/build-support/fetchsvnssh')
-rw-r--r--pkgs/build-support/fetchsvnssh/builder.sh15
-rw-r--r--pkgs/build-support/fetchsvnssh/default.nix16
-rwxr-xr-xpkgs/build-support/fetchsvnssh/sshsubversion.exp22
3 files changed, 53 insertions, 0 deletions
diff --git a/pkgs/build-support/fetchsvnssh/builder.sh b/pkgs/build-support/fetchsvnssh/builder.sh
new file mode 100644
index 00000000000..d9c6dc7da31
--- /dev/null
+++ b/pkgs/build-support/fetchsvnssh/builder.sh
@@ -0,0 +1,15 @@
+source $stdenv/setup
+
+header "exporting $url (r$rev) into $out"
+
+if test "$sshSupport"; then
+ export SVN_SSH="$openssh/bin/ssh"
+fi
+
+# Pipe the "p" character into Subversion to force it to accept the
+# server's certificate. This is perfectly safe: we don't care
+# whether the server is being spoofed --- only the cryptographic
+# hash of the output matters.
+expect -f $sshSubversion "$username" "$password" "$rev" "$url" $out
+
+stopNest
diff --git a/pkgs/build-support/fetchsvnssh/default.nix b/pkgs/build-support/fetchsvnssh/default.nix
new file mode 100644
index 00000000000..6c6c03d6873
--- /dev/null
+++ b/pkgs/build-support/fetchsvnssh/default.nix
@@ -0,0 +1,16 @@
+{stdenv, subversion, sshSupport ? false, openssh ? null, expect}:
+{username, password, url, rev ? "HEAD", md5 ? "", sha256 ? ""}:
+
+stdenv.mkDerivation {
+ name = "svn-export-ssh";
+ builder = ./builder.sh;
+ buildInputs = [subversion expect];
+
+ outputHashAlgo = if sha256 == "" then "md5" else "sha256";
+ outputHashMode = "recursive";
+ outputHash = if sha256 == "" then md5 else sha256;
+
+ sshSubversion = ./sshsubversion.exp;
+
+ inherit username password url rev sshSupport openssh;
+}
diff --git a/pkgs/build-support/fetchsvnssh/sshsubversion.exp b/pkgs/build-support/fetchsvnssh/sshsubversion.exp
new file mode 100755
index 00000000000..c00f39714e5
--- /dev/null
+++ b/pkgs/build-support/fetchsvnssh/sshsubversion.exp
@@ -0,0 +1,22 @@
+#!/nix/var/nix/profiles/default/bin/expect -f
+
+# Set variables
+set username [lindex $argv 0]
+set password [lindex $argv 1]
+set rev [lindex $argv 2]
+set url [lindex $argv 3]
+set out [lindex $argv 4]
+set timeout -1
+
+spawn svn export -r$rev svn+ssh://$username@$url $out
+match_max 100000
+
+expect "*continue connecting*" { send -- "yes\r"; expect "*?assword:*"; send -- "$password\r" } \
+ "*?assword:*" { send -- "$password\r" }
+
+expect "*?assword:*"
+send -- "$password\r"
+
+# Send blank line
+send -- "\r"
+expect eof