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) {
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 {
}
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");
}
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";
}