Added hacky fetchsvn component which allows users to fetch code over svn+ssh
svn path=/nixpkgs/trunk/; revision=11455
This commit is contained in:
parent
d453801a76
commit
99d512a41f
4 changed files with 58 additions and 0 deletions
15
pkgs/build-support/fetchsvnssh/builder.sh
Normal file
15
pkgs/build-support/fetchsvnssh/builder.sh
Normal 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
|
16
pkgs/build-support/fetchsvnssh/default.nix
Normal file
16
pkgs/build-support/fetchsvnssh/default.nix
Normal 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;
|
||||
}
|
22
pkgs/build-support/fetchsvnssh/sshsubversion.exp
Executable file
22
pkgs/build-support/fetchsvnssh/sshsubversion.exp
Executable 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
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue