X-Git-Url: https://scripts.mit.edu/gitweb/www/ikiwiki.git/blobdiff_plain/3b0fce93e40e5457b63ceda9692901539eb4fc82..79be3eec61607265d96c46c3b0f916a3b8a0d46b:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 31228883f..960d26de9 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -7,7 +7,7 @@ use File::Spec; use HTML::Template; use vars qw{%config %links %oldlinks %oldpagemtime %pagectime - %renderedfiles %pagesources %depends %plugins}; + %renderedfiles %pagesources %depends %hooks}; sub checkconfig () { #{{{ if ($config{cgi} && ! length $config{url}) { @@ -16,20 +16,18 @@ sub checkconfig () { #{{{ if ($config{rss} && ! length $config{url}) { error("Must specify url to wiki with --url when using --rss\n"); } - if ($config{hyperestraier} && ! length $config{url}) { - error("Must specify --url when using --hyperestraier\n"); - } $config{wikistatedir}="$config{srcdir}/.ikiwiki" unless exists $config{wikistatedir}; - if ($config{svn}) { - require IkiWiki::Rcs::SVN; - $config{rcs}=1; + if ($config{rcs}) { + eval qq{require IkiWiki::Rcs::$config{rcs}}; + if ($@) { + error("Failed to load RCS module IkiWiki::Rcs::$config{rcs}: $@"); + } } else { require IkiWiki::Rcs::Stub; - $config{rcs}=0; } foreach my $plugin (@{$config{plugin}}) { @@ -39,6 +37,12 @@ sub checkconfig () { #{{{ error("Failed to load plugin $mod: $@"); } } + + if (exists $hooks{checkconfig}) { + foreach my $id (keys %{$hooks{checkconfig}}) { + $hooks{checkconfig}{$id}{call}->(); + } + } } #}}} sub error ($) { #{{{ @@ -386,12 +390,14 @@ sub globlist_match ($$) { #{{{ return 0; } #}}} -sub register_plugin ($$$) { # {{{ - my $type=shift; - my $command=shift; - my $function=shift; +sub hook (@) { # {{{ + my %param=@_; + + if (! exists $param{type} || ! ref $param{call} || ! exists $param{id}) { + error "hook requires type, call, and id parameters"; + } - $plugins{$type}{$command}=$function; + $hooks{$param{type}}{$param{id}}=\%param; } # }}} 1