summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-06-05 16:58:06 -0400
committerJoey Hess <joey@gnu.kitenet.net>2009-06-05 16:58:06 -0400
commit0293ae8e3d8e7dfd0a92bf20aa4c3d28e2d78ddb (patch)
tree55f0db22192a6d99c9a7c84b6f872233dcae2cf7
parent9e74d600575f59456fa46df22f8be1ec411c9200 (diff)
Setup automator: Check that each plugin added to the generated setup file can be loaded and that its config is ok. If a plugin fails for any reason, disable it in the generated file. Closes: 532001
-rw-r--r--IkiWiki/Setup/Automator.pm23
-rw-r--r--debian/changelog4
2 files changed, 27 insertions, 0 deletions
diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm
index 5111541e4..742d67666 100644
--- a/IkiWiki/Setup/Automator.pm
+++ b/IkiWiki/Setup/Automator.pm
@@ -98,6 +98,29 @@ sub import (@) {
}
}
+ # Make sure that all the listed plugins can load
+ # and checkconfig is ok. If a plugin fails to work,
+ # remove it from the configuration and keep on truckin'.
+ my %bakconfig=%config; # checkconfig can modify %config so back up
+ if (! eval { IkiWiki::loadplugins(); IkiWiki::checkconfig() }) {
+ foreach my $plugin (@{$config{default_plugins}}, @{$bakconfig{add_plugins}}) {
+ eval {
+ # delete all hooks so that only this plugins's
+ # checkconfig will be run
+ %IkiWiki::hooks=();
+ IkiWiki::loadplugin($plugin);
+ IkiWiki::run_hooks(checkconfig => sub { shift->() });
+ };
+ if ($@) {
+ print STDERR sprintf(gettext("** Disabling plugin %s, since it is failing with this message:"),
+ $plugin)."\n";
+ print STDERR "$@\n";
+ push @{$bakconfig{disable_plugins}}, $plugin;
+ }
+ }
+ }
+ %config=%bakconfig;
+
# Generate setup file.
require IkiWiki::Setup;
IkiWiki::Setup::dump($config{dumpsetup});
diff --git a/debian/changelog b/debian/changelog
index bbc9b2c15..7d0fb5c80 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,10 @@ ikiwiki (3.15) UNRELEASED; urgency=low
allow an unterminated """ string to be treated as a series
of bare words. Fixes runaway regexp recursion/backtracking
in strange situations.
+ * Setup automator: Check that each plugin added to the generated
+ setup file can be loaded and that its config is ok. If a plugin
+ fails for any reason, disable it in the generated file.
+ Closes: 532001
-- Joey Hess <joeyh@debian.org> Tue, 02 Jun 2009 17:03:41 -0400