[Codestriker-commits] CVS update: codestriker/lib/Codestriker/Repository Subversion.pm
Brought to you by:
sits
|
From: <si...@us...> - 2006-01-07 03:20:22
|
Created Codestriker topic at: http://codestriker.sourceforge.net/cgi-bin/codestriker.pl?topic=1265723&action=view User: sits Date: 06/01/06 19:20:07 Modified: . CHANGELOG lib/Codestriker/Repository Subversion.pm Log: * Fixed problem with Subversion repositories on Win32, where Codestriker was unable to launch the svn program. Fixes bug: [ codestriker-Bugs-1382454 ] Subversion.pm open3 bug on Win32 https://sourceforge.net/tracker/?func=detail&atid=429860&aid=1382454&group_id=41136 Index: CHANGELOG =================================================================== RCS file: /cvsroot/codestriker/codestriker/CHANGELOG,v retrieving revision 1.177 retrieving revision 1.178 diff -u -r1.177 -r1.178 --- CHANGELOG 5 Oct 2005 23:23:06 -0000 1.177 +++ CHANGELOG 7 Jan 2006 03:20:06 -0000 1.178 @@ -3,6 +3,9 @@ Version 1.9.2 +* Fixed problem with Subversion repositories on Win32, where + Codestriker was unable to launch the svn program. + * Comments containing '+' characters were changed into ' ' characters when posted via AJAX. Other potentially damaging characters are now escaped. Index: Subversion.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/lib/Codestriker/Repository/Subversion.pm,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Subversion.pm 9 Jun 2005 07:22:05 -0000 1.10 +++ Subversion.pm 7 Jan 2006 03:20:07 -0000 1.11 @@ -15,13 +15,17 @@ # Constructor, which takes as a parameter the repository url. sub new ($$) { my ($type, $repository_url, $user, $password) = @_; - - my $userCmdLine = ""; + + # Determine if there are additional parameters required for user + # authentication. + my @userCmdLine = (); if (defined($user) && defined($password)) { - $userCmdLine = "--username $user --password $password "; + push @userCmdLine, '--username'; + push @userCmdLine, $user; + push @userCmdLine, '--password'; + push @userCmdLine, $password; } - # Make sure the repo url does not end in a /, the # rest of the module assumes that it does not. $repository_url =~ s/[\\\/]^//; @@ -31,7 +35,7 @@ my $self = {}; $self->{repository_url} = $repository_url; - $self->{userCmdLine} = $userCmdLine; + $self->{userCmdLine} = \@userCmdLine; bless $self, $type; } @@ -44,15 +48,21 @@ # Replace any spaces with %20 uri friendly escapes. $filename =~ s/ /%20/g; - my $cmd = "\"$Codestriker::svn\" cat --non-interactive --no-auth-cache " . - $self->{userCmdLine} . " --revision $revision " . - "\"" . $self->{repository_url} . "/$filename\""; - my $write_stdin_fh = new FileHandle; my $read_stdout_fh = new FileHandle; my $read_stderr_fh = new FileHandle; - - my $pid = open3($write_stdin_fh,$read_stdout_fh,$read_stderr_fh,$cmd); + + my @args = (); + push @args, 'cat'; + push @args, '--non-interactive'; + push @args, '--no-auth-cache'; + push @args, @{ $self->{userCmdLine} }; + push @args, '--revision'; + push @args, $revision; + push @args, $self->{repository_url} . '/' . $filename; + + my $pid = open3($write_stdin_fh, $read_stdout_fh, $read_stderr_fh, + $Codestriker::svn, @args); # Read the data. for (my $i = 1; <$read_stdout_fh>; $i++) { @@ -60,13 +70,12 @@ $$content_array_ref[$i] = $_; } - # Log anything on standard error to apache error log - # along with the cmd that caused the error. - + # Log anything on standard error to apache error log. my $buf; my $first_lines = 1; while (read($read_stderr_fh, $buf, 16384)) { - print STDERR "$cmd\n" if $first_lines; + print STDERR "$Codestriker::svn " . + (join @args, ' ') . "\n" if $first_lines; $first_lines = 0; print STDERR $buf; } @@ -108,15 +117,21 @@ my $filename = $module_name; $filename =~ s/ /%20/g; - my $cmd = "\"$Codestriker::svn\" cat --non-interactive --no-auth-cache " . - $self->{userCmdLine} . " --revision HEAD " . - "\"" . $self->{repository_url} . "/$filename\""; - my $write_stdin_fh = new FileHandle; my $read_stdout_fh = new FileHandle; my $read_stderr_fh = new FileHandle; - my $pid = open3($write_stdin_fh, $read_stdout_fh, $read_stderr_fh, $cmd); + my @args = (); + push @args, 'cat'; + push @args, '--non-interactive'; + push @args, '--no-auth-cache'; + push @args, @{ $self->{userCmdLine} }; + push @args, '--revision'; + push @args, 'HEAD'; + push @args, $self->{repository_url} . '/' . $filename; + + my $pid = open3($write_stdin_fh, $read_stdout_fh, $read_stderr_fh, + $Codestriker::svn, @args); while(<$read_stdout_fh>) {} @@ -143,15 +158,22 @@ $read_stdout_fh->close(); $read_stderr_fh->close(); - $cmd = "\"$Codestriker::svn\" diff --non-interactive --no-auth-cache " . - $self->{userCmdLine} . " -r $start_tag:$end_tag " . - "--old \"$self->{repository_url}\" \"$module_name\""; - $write_stdin_fh = new FileHandle; $read_stdout_fh = new FileHandle; $read_stderr_fh = new FileHandle; - $pid = open3($write_stdin_fh, $read_stdout_fh, $read_stderr_fh, $cmd); + @args = (); + push @args, 'cat'; + push @args, '--non-interactive'; + push @args, '--no-auth-cache'; + push @args, @{ $self->{userCmdLine} }; + push @args, '-r'; + push @args, $start_tag . ':' . $end_tag, + push @args, '--old'; + push @args, $self->{repository_url} . $module_name; + + $pid = open3($write_stdin_fh, $read_stdout_fh, $read_stderr_fh, + $Codestriker::svn, @args); while(<$read_stdout_fh>) { my $line = $_; |