aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Setup.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2010-02-11 22:24:15 -0500
committerJoey Hess <joey@gnu.kitenet.net>2010-02-11 22:24:15 -0500
commita63929f6cc7778ffc4ba57d784cdf2206ec650c7 (patch)
treeab4a853020436081f644be83737ff9e95230597b /IkiWiki/Setup.pm
parentc923e0ba3377f85107ccea1933a042aaec675c77 (diff)
downloadikiwiki-a63929f6cc7778ffc4ba57d784cdf2206ec650c7.tar
ikiwiki-a63929f6cc7778ffc4ba57d784cdf2206ec650c7.tar.gz
Group related plugins into sections in the setup file, and drop unused rcs plugins from the setup file.
Diffstat (limited to 'IkiWiki/Setup.pm')
-rw-r--r--IkiWiki/Setup.pm32
1 files changed, 26 insertions, 6 deletions
diff --git a/IkiWiki/Setup.pm b/IkiWiki/Setup.pm
index 8a25ecc57..b21bd7bfe 100644
--- a/IkiWiki/Setup.pm
+++ b/IkiWiki/Setup.pm
@@ -77,7 +77,6 @@ sub merge ($) {
sub getsetup () {
# Gets all available setup data from all plugins. Returns an
# ordered list of [plugin, setup] pairs.
- my @ret;
# disable logging to syslog while dumping, broken plugins may
# whine when loaded
@@ -85,27 +84,48 @@ sub getsetup () {
$config{syslog}=undef;
# Load all plugins, so that all setup options are available.
- my @plugins=grep { $_ ne $config{rcs} } sort(IkiWiki::listplugins());
- unshift @plugins, $config{rcs} if $config{rcs}; # rcs plugin 1st
+ my @plugins=IkiWiki::listplugins();
foreach my $plugin (@plugins) {
eval { IkiWiki::loadplugin($plugin) };
if (exists $IkiWiki::hooks{checkconfig}{$plugin}{call}) {
my @s=eval { $IkiWiki::hooks{checkconfig}{$plugin}{call}->() };
}
}
-
+
+ my %sections;
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 ],
+
+ # set default section value (note use of shared
+ # hashref between array and hash)
+ my %s=@s;
+ if (! exists $s{plugin} || ! $s{plugin}->{section}) {
+ $s{plugin}->{section}="misc";
+ }
+
+ # only the selected rcs plugin is included
+ if ($config{rcs} && $plugin eq $config{rcs}) {
+ $s{plugin}->{section}="core";
+ }
+ elsif ($s{plugin}->{section} eq "rcs") {
+ next;
+ }
+
+ push @{$sections{$s{plugin}->{section}}}, [ $plugin, \@s ];
}
}
$config{syslog}=$syslog;
- return @ret;
+ return map { sort { $a->[0] cmp $b->[0] } @{$sections{$_}} }
+ sort { # core first, then alphabetical
+ ($b eq "core") <=> ($a eq "core")
+ ||
+ $a cmp $b
+ } keys %sections;
}
sub dump ($) {