From: Amitai Schlair Date: Thu, 10 Sep 2009 01:58:42 +0000 (-0400) Subject: Abstract out CVS's involvement in the wrapper: X-Git-Tag: 3.14159265~61^2~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=aafd267ee099ddb8ff4129a0e4d46964be866f6d;p=ikiwiki.git 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. --- diff --git a/IkiWiki/Plugin/cvs.pm b/IkiWiki/Plugin/cvs.pm index 8409bebed..ff9d578e2 100644 --- a/IkiWiki/Plugin/cvs.pm +++ b/IkiWiki/Plugin/cvs.pm @@ -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"; diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index cc2223d7a..0baf112ff 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -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