master
Joey Hess 2008-08-02 13:38:45 -04:00
parent d3cad5d2ca
commit 0b6dd9247b
2 changed files with 35 additions and 23 deletions

View File

@ -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);

View File

@ -89,29 +89,12 @@ 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 $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);
}
foreach my $pair (IkiWiki::Setup::getsetup()) {
my $plugin=$pair->[0];
my $setup=$pair->[1];
push @ret, "", "\t# $plugin plugin";
push @ret, dumpvalues(\%setup, @{$setup});
}
unshift @ret,