From: Joey Hess <joey@gnu.kitenet.net>
Date: Fri, 5 Jun 2009 20:58:06 +0000 (-0400)
Subject: Setup automator: Check that each plugin added to the generated setup file can be... 
X-Git-Tag: 3.141~34
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/0293ae8e3d8e7dfd0a92bf20aa4c3d28e2d78ddb?ds=inline

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
---

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