Abstract out CVS's involvement in the wrapper:

* In Wrapper.pm, add a new hook "wrapperargcheck" to examine argc/argv
  and return success or failure. In the failure case, the wrapper
  terminates.

* In cvs.pm, implement the new hook to return failure if a directory is
  being cvs added.
master
Amitai Schlair 2009-09-09 21:58:42 -04:00
parent 5f44dd8e77
commit aafd267ee0
2 changed files with 21 additions and 12 deletions

View File

@ -6,6 +6,7 @@ use strict;
use IkiWiki; use IkiWiki;
sub import { sub import {
hook(type => "wrapperargcheck", id => "cvs", call => \&wrapperargcheck);
hook(type => "checkconfig", id => "cvs", call => \&checkconfig); hook(type => "checkconfig", id => "cvs", call => \&checkconfig);
hook(type => "getsetup", id => "cvs", call => \&getsetup); hook(type => "getsetup", id => "cvs", call => \&getsetup);
hook(type => "rcs", id => "rcs_update", call => \&rcs_update); hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
@ -20,6 +21,17 @@ sub import {
hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); 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 () { sub checkconfig () {
if (! defined $config{cvspath}) { if (! defined $config{cvspath}) {
$config{cvspath}="ikiwiki"; $config{cvspath}="ikiwiki";

View File

@ -44,17 +44,8 @@ EOF
$test_receive=IkiWiki::Receive::gen_wrapper(); $test_receive=IkiWiki::Receive::gen_wrapper();
} }
my $check_cvs_add_dir=""; my $check_args=" return 0;";
if ($config{rcs} eq 'cvs') { run_hooks(wrapperargcheck => sub { $check_args = shift->(); });
$check_cvs_add_dir=<<"EOF";
{
int j;
for (j = 1; j < argc; j++)
if (strstr(argv[j], "New directory") != NULL)
exit(0);
}
EOF
}
my $check_commit_hook=""; my $check_commit_hook="";
my $pre_exec=""; my $pre_exec="";
@ -128,10 +119,16 @@ addenv(char *var, char *val) {
newenviron[i++]=s; newenviron[i++]=s;
} }
int checkargs(int argc, char **argv) {
$check_args
}
int main (int argc, char **argv) { int main (int argc, char **argv) {
char *s; char *s;
$check_cvs_add_dir if (!checkargs(argc, argv))
exit(0);
$check_commit_hook $check_commit_hook
$test_receive $test_receive
$envsave $envsave