From aafd267ee099ddb8ff4129a0e4d46964be866f6d Mon Sep 17 00:00:00 2001 From: Amitai Schlair Date: Wed, 9 Sep 2009 21:58:42 -0400 Subject: 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. --- IkiWiki/Plugin/cvs.pm | 12 ++++++++++++ IkiWiki/Wrapper.pm | 21 +++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) 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 -- cgit v1.2.3