Added hacky fetchsvn component which allows users to fetch code over svn+ssh

svn path=/nixpkgs/trunk/; revision=11455
This commit is contained in:
Sander van der Burg 2008-04-02 13:28:55 +00:00
parent d453801a76
commit 99d512a41f
4 changed files with 58 additions and 0 deletions

View file

@ -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

View file

@ -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;
}

View file

@ -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

View file

@ -345,6 +345,11 @@ let pkgs = rec {
sshSupport = true;
};
fetchsvnssh = import ../build-support/fetchsvnssh {
inherit stdenv subversion openssh expect;
sshSupport = true;
};
# TODO do some testing
fetchhg = import ../build-support/fetchhg {
inherit stdenv mercurial nix;