From: Joey Hess Date: Thu, 10 Sep 2009 17:44:31 +0000 (-0400) Subject: Merge commit 'schmonz/master' into cvs X-Git-Tag: 3.14159265~74 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/c22b9386314b63bb285bd514425fc640bcfff390?ds=sidebyside;hp=-c Merge commit 'schmonz/master' into cvs --- c22b9386314b63bb285bd514425fc640bcfff390 diff --combined IkiWiki/Plugin/cvs.pm index 2c2445f39,e926425f2..939e89270 --- a/IkiWiki/Plugin/cvs.pm +++ b/IkiWiki/Plugin/cvs.pm @@@ -5,7 -5,10 +5,10 @@@ use warnings use strict; use IkiWiki; + use File::chdir; + sub import { + hook(type => "wrapperargcheck", id => "cvs", call => \&wrapperargcheck); hook(type => "checkconfig", id => "cvs", call => \&checkconfig); hook(type => "getsetup", id => "cvs", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@@ -20,6 -23,17 +23,17 @@@ hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); } + sub wrapperargcheck () { + my $check_args=<<"EOF"; + int j; + for (j = 1; j < argc; j++) + if (strstr(argv[j], "New directory") != NULL) + return 0; + return 1; + EOF + return $check_args; + } + sub checkconfig () { if (! defined $config{cvspath}) { $config{cvspath}="ikiwiki"; @@@ -61,7 -75,7 +75,7 @@@ sub getsetup () cvs_wrapper => { type => "string", example => "/cvs/wikirepo/CVSROOT/post-commit", - description => "cvs post-commit hook to generate (triggered by CVSROOT/loginfo entry", + description => "cvs post-commit hook to generate (triggered by CVSROOT/loginfo entry)", safe => 0, # file rebuild => 0, }, @@@ -92,7 -106,7 +106,7 @@@ sub cvs_info ($$) my $field=shift; my $file=shift; - chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); + local $CWD = $config{srcdir}; my $info=`cvs status $file`; my ($ret)=$info=~/^\s*$field:\s*(\S+)/m; @@@ -103,7 -117,7 +117,7 @@@ sub cvs_runcvs(@) my @cmd = @_; unshift @cmd, 'cvs', '-Q'; - chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); + local $CWD = $config{srcdir}; open(my $savedout, ">&STDOUT"); open(STDOUT, ">", "/dev/null"); @@@ -221,13 -235,11 +235,13 @@@ sub rcs_add ($) if (defined($filemime) && $filemime eq 'text/plain') { cvs_runcvs('add', $file) || warn("cvs add $file failed\n"); - } else { + } + else { cvs_runcvs('add', '-kb', $file) || warn("cvs add binary $file failed\n"); } - } else { + } + else { # directory cvs_runcvs('add', $file) || warn("cvs add $file failed\n"); @@@ -251,7 -263,7 +265,7 @@@ sub rcs_rename ($$) return unless cvs_is_controlling; - chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); + local $CWD = $config{srcdir}; if (system("mv", "$src", "$dest") != 0) { warn("filesystem rename failed\n"); @@@ -270,7 -282,7 +284,7 @@@ sub rcs_recentchanges($) eval q{use Date::Parse}; error($@) if $@; - chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); + local $CWD = $config{srcdir}; # There's no cvsps option to get the last N changesets. # Write full output to a temp file and read backwards. @@@ -341,8 -353,7 +355,8 @@@ $message[0]->{line}=~/$config{web_commit_regexp}/) { $user=defined $2 ? "$2" : "$3"; $message[0]->{line}=$4; - } else { + } + else { $committype="cvs"; } @@@ -352,24 -363,21 +366,24 @@@ $line = ; if ($line =~ /^Author: (.*)$/) { $user = $1 unless defined $user && length $user; - } else { + } + else { error "expected Author, got $line"; } $line = ; if ($line =~ /^Date: (.*)$/) { $when = str2time($1, 'UTC'); - } else { + } + else { error "expected Date, got $line"; } $line = ; if ($line =~ /^PatchSet (.*)$/) { $rev = $1; - } else { + } + else { error "expected PatchSet, got $line"; } @@@ -394,7 -402,7 +408,7 @@@ sub rcs_diff ($) { my $rev=IkiWiki::possibly_foolish_untaint(int(shift)); - chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); + local $CWD = $config{srcdir}; # diff output is unavoidably preceded by the cvsps PatchSet entry my @cvsps = `env TZ=UTC cvsps -q --cvs-direct -z 30 -g -s $rev`; @@@ -407,8 -415,7 +421,8 @@@ if (wantarray) { return @cvsps; - } else { + } + else { return join("", @cvsps); } }