]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/cvs.pm
Merge commit 'schmonz/master' into cvs
[git.ikiwiki.info.git] / IkiWiki / Plugin / cvs.pm
index fa4c4da8e94ad250e0615786fe57b508fb2bbfcd..4735c013810c0d44a9b51cdc1d5e0ba08ec9fedb 100644 (file)
@@ -119,11 +119,21 @@ sub cvs_runcvs(@) {
 
 sub cvs_shquote_commit ($) {
        my $message = shift;
+       my $test_message = "CVS autodiscover quoting CVS";
 
        eval q{use String::ShellQuote};
        error($@) if $@;
+       eval q{use IPC::Cmd};
+       error($@) if $@;
 
-       return shell_quote(IkiWiki::possibly_foolish_untaint($message));
+       my $cmd = ['echo', shell_quote($test_message)];
+       my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) =
+               IPC::Cmd::run(command => $cmd, verbose => 0);
+       if ((grep /'$test_message'/, @$stdout_buf) > 0) {
+               return IkiWiki::possibly_foolish_untaint($message);
+       } else {
+               return shell_quote(IkiWiki::possibly_foolish_untaint($message));
+       }
 }
 
 sub cvs_is_controlling {
@@ -293,7 +303,7 @@ sub rcs_recentchanges($) {
        system("env TZ=UTC cvsps -q --cvs-direct -z 30 -x >$tmpfile");
        if ($? == -1) {
                error "couldn't run cvsps: $!\n";
-       } elsif (($? >>8) != 0) {
+       } elsif (($? >> 8) != 0) {
                error "cvsps exited " . ($? >> 8) . ": $!\n";
        }