]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge commit 'schmonz/master' into cvs
authorJoey Hess <joey@gnu.kitenet.net>
Thu, 10 Sep 2009 17:44:31 +0000 (13:44 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Thu, 10 Sep 2009 17:44:31 +0000 (13:44 -0400)
1  2 
IkiWiki/Plugin/cvs.pm

diff --combined IkiWiki/Plugin/cvs.pm
index 2c2445f399068ac43824c2b1b8291982b68e60a0,e926425f292cca2554ff1944d35b0ddf8b2b124f..939e892705a5005c95aee694620a8514a62a5217
@@@ -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);
        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.
                    $message[0]->{line}=~/$config{web_commit_regexp}/) {
                        $user=defined $2 ? "$2" : "$3";
                        $message[0]->{line}=$4;
 -              } else {
 +              }
 +              else {
                        $committype="cvs";
                }
  
                $line = <SPSVC>;
                if ($line =~ /^Author: (.*)$/) {
                        $user = $1 unless defined $user && length $user;
 -              } else {
 +              }
 +              else {
                        error "expected Author, got $line";
                }
  
                $line = <SPSVC>;
                if ($line =~ /^Date: (.*)$/) {
                        $when = str2time($1, 'UTC');
 -              } else {
 +              }
 +              else {
                        error "expected Date, got $line";
                }
  
                $line = <SPSVC>;
                if ($line =~ /^PatchSet (.*)$/) {
                        $rev = $1;
 -              } else {
 +              }
 +              else {
                        error "expected PatchSet, got $line";
                }
  
  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`;
  
        if (wantarray) {
                return @cvsps;
 -      } else {
 +      }
 +      else {
                return join("", @cvsps);
        }
  }