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;
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);
@ -20,6 +21,17 @@ sub import {
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";

View File

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