X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/2d1ff30e13d91cc4fa355bc392ba6044c6a6f31e..bb2697ca5e39bc40a18aa01582087cc5c558442e:/IkiWiki/Plugin/cvs.pm diff --git a/IkiWiki/Plugin/cvs.pm b/IkiWiki/Plugin/cvs.pm index c1b40bda1..4735c0138 100644 --- a/IkiWiki/Plugin/cvs.pm +++ b/IkiWiki/Plugin/cvs.pm @@ -108,8 +108,6 @@ sub cvs_runcvs(@) { chdir $config{srcdir} || error("Cannot chdir to $config{srcdir}: $!"); - debug("runcvs: " . join(" ", @$cmd)); - my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) = IPC::Cmd::run(command => $cmd, verbose => 0); if (! $success) { @@ -121,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 { @@ -228,13 +236,18 @@ sub rcs_add ($) { } while ($file = pop @files_to_add) { - if ((@files_to_add == 0) && - (File::MimeInfo::default $file ne 'text/plain')) { - # it's a binary file, add specially - cvs_runcvs(['add', '-kb', $file]) || - warn("cvs add $file failed\n"); + if (@files_to_add == 0) { + # file + my $filemime = File::MimeInfo::default($file); + if (defined($filemime) && $filemime eq 'text/plain') { + cvs_runcvs(['add', $file]) || + warn("cvs add $file failed\n"); + } else { + cvs_runcvs(['add', '-kb', $file]) || + warn("cvs add binary $file failed\n"); + } } else { - # directory or regular file + # directory cvs_runcvs(['add', $file]) || warn("cvs add $file failed\n"); } @@ -290,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"; }