summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Setup.pm31
-rw-r--r--IkiWiki/Setup/Standard.pm27
2 files changed, 35 insertions, 23 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);
diff --git a/IkiWiki/Setup/Standard.pm b/IkiWiki/Setup/Standard.pm
index 9d4732b6f..f3d4994fb 100644
--- a/IkiWiki/Setup/Standard.pm
+++ b/IkiWiki/Setup/Standard.pm
@@ -89,31 +89,14 @@ sub gendump ($) { #{{{
# disable logging to syslog while dumping
$config{syslog}=0;
- push @ret, "\t# basic setup";
push @ret, dumpvalues(\%setup, IkiWiki::getsetup());
-
- # 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 $pair (IkiWiki::Setup::getsetup()) {
+ my $plugin=$pair->[0];
+ my $setup=$pair->[1];
+ push @ret, "", "\t# $plugin plugin";
+ push @ret, dumpvalues(\%setup, @{$setup});
}
- foreach my $id (@plugins) {
- if (exists $IkiWiki::hooks{getsetup}{$id}{call}) {
- # use an array rather than a hash, to preserve order
- my @s=eval { $IkiWiki::hooks{getsetup}{$id}{call}->() };
- next unless @s;
- push @ret, "", "\t# $id plugin";
- push @ret, dumpvalues(\%setup, @s);
- }
- }
-
unshift @ret,
"#!/usr/bin/perl",
"# $description",