aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Setup.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-08-02 13:38:45 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-08-02 16:41:35 -0400
commit0b6dd9247bd442560ab740051f0e60b22bf2dccc (patch)
tree6405c6dd84780014b9c2ecf79fec255fc1fff597 /IkiWiki/Setup.pm
parentd3cad5d2cab108a06b043137a42d18c083975e5a (diff)
downloadikiwiki-0b6dd9247bd442560ab740051f0e60b22bf2dccc.tar
ikiwiki-0b6dd9247bd442560ab740051f0e60b22bf2dccc.tar.gz
refactor
Diffstat (limited to 'IkiWiki/Setup.pm')
-rw-r--r--IkiWiki/Setup.pm31
1 files changed, 30 insertions, 1 deletions
diff --git a/IkiWiki/Setup.pm b/IkiWiki/Setup.pm
index c2fd59b21..73e32447c 100644
--- a/IkiWiki/Setup.pm
+++ b/IkiWiki/Setup.pm
@@ -28,9 +28,9 @@ sub load ($) { # {{{
} #}}}
sub merge ($) {
+ # Merge setup into existing config and untaint.
my %setup=%{shift()};
- # Merge setup into existing config and untaint.
if (exists $setup{add_plugins}) {
push @{$setup{add_plugins}}, @{$config{add_plugins}};
}
@@ -71,6 +71,35 @@ sub merge ($) {
}
} #}}}
+sub getsetup () { #{{{
+ # Gets all available setup data from all plugins. Returns an ordered list of
+ # [plugin, setup] pairs.
+ my @ret;
+
+ # Load all plugins, so that all setup options are available.
+ # (But skip a few problematic external demo plugins.)
+ my @plugins=grep { ! /^(externaldemo|pythondemo|\Q$config{rcs}\E)$/ }
+ sort(IkiWiki::listplugins());
+ unshift @plugins, $config{rcs} if $config{rcs}; # rcs plugin 1st
+ foreach my $plugin (@plugins) {
+ eval { IkiWiki::loadplugin($plugin) };
+ if (exists $IkiWiki::hooks{checkconfig}{$plugin}{call}) {
+ my @s=eval { $IkiWiki::hooks{checkconfig}{$plugin}{call}->() };
+ }
+ }
+
+ foreach my $plugin (@plugins) {
+ if (exists $IkiWiki::hooks{getsetup}{$plugin}{call}) {
+ # use an array rather than a hash, to preserve order
+ my @s=eval { $IkiWiki::hooks{getsetup}{$plugin}{call}->() };
+ next unless @s;
+ push @ret, [ $plugin, \@s ],
+ }
+ }
+
+ return @ret;
+} #}}}
+
sub dump ($) { #{{{
my $file=IkiWiki::possibly_foolish_untaint(shift);