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
parent
5f44dd8e77
commit
aafd267ee0
|
@ -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";
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue