aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-09-29 18:05:39 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-09-29 18:05:39 -0400
commitbb4211e326bd16099cb353353055497f2fb5a0c9 (patch)
tree29a81680dd8d1e212774e2e16d6daec74be9cde2
parent1f1867a6fc52daa26b4bfe0aa597df8edee24595 (diff)
downloadikiwiki-bb4211e326bd16099cb353353055497f2fb5a0c9.tar
ikiwiki-bb4211e326bd16099cb353353055497f2fb5a0c9.tar.gz
avoid unnecessarily rebuilding pages with complex conditionals
I noticed that ikiwiki/formatting was beilg rebuilt when any page changed. This turned out to be because it contained a complex conditional "enabled(foo) or enabled(bar)", and the conditional plugin did not notice that this consisted only of enabled() tests, and copied it unchanged into add_depends. Thus, the page's dependencies were satisfied by any page change. The fix is to beef up the parser so that it can handle that and more complex conditionals, and detect if they consist only of such tests.
-rw-r--r--IkiWiki/Plugin/conditional.pm4
-rw-r--r--po/ikiwiki.pot14
2 files changed, 9 insertions, 9 deletions
diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm
index 7716fce1b..e787424aa 100644
--- a/IkiWiki/Plugin/conditional.pm
+++ b/IkiWiki/Plugin/conditional.pm
@@ -33,8 +33,8 @@ sub preprocess_if (@) { #{{{
# An optimisation to avoid needless looping over every page
# and adding of dependencies for simple uses of some of the
# tests.
- $params{test} =~ /^\s*\!?\s*(enabled|sourcepage|destpage|included)\((.*)\)\s*$/) {
- add_depends($params{page}, "$params{test} and $params{page}");
+ $params{test} =~ /^([\s\!()]*((enabled|sourcepage|destpage|included)\([^)]*\)|(and|or))[\s\!()]*)+$/) {
+ add_depends($params{page}, "($params{test}) and $params{page}");
$result=pagespec_match($params{page}, $params{test},
location => $params{page},
sourcepage => $params{page},
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index b0206e45a..6614bfd87 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-29 17:12-0400\n"
+"POT-Creation-Date: 2008-09-29 18:05-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -48,7 +48,7 @@ msgstr ""
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1153
+#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1143
msgid "Error"
msgstr ""
@@ -904,25 +904,25 @@ msgstr ""
msgid "refreshing wiki.."
msgstr ""
-#: ../IkiWiki.pm:458
+#: ../IkiWiki.pm:451
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:504
+#: ../IkiWiki.pm:497
msgid "cannot use multiple rcs plugins"
msgstr ""
-#: ../IkiWiki.pm:533
+#: ../IkiWiki.pm:526
#, perl-format
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1136
+#: ../IkiWiki.pm:1126
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1645
+#: ../IkiWiki.pm:1635
msgid "yes"
msgstr ""