From 86519b047e6fb96e4c5c5b22cb9619d120bf566e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 27 Dec 2012 22:29:51 -0400 Subject: [PATCH] trail: Converted all dependencies to presence dependencies. smcv please note this introduces another bug, which I've opened --- IkiWiki/Plugin/trail.pm | 6 +++--- debian/changelog | 1 + doc/bugs/trail_excess_dependencies.mdwn | 26 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 doc/bugs/trail_excess_dependencies.mdwn diff --git a/IkiWiki/Plugin/trail.pm b/IkiWiki/Plugin/trail.pm index 7d2338f9b..cf0f0a15e 100644 --- a/IkiWiki/Plugin/trail.pm +++ b/IkiWiki/Plugin/trail.pm @@ -318,7 +318,7 @@ sub prerender { $prev = $members->[$i - 1] if $i > 0; my $next = $members->[$i + 1]; - add_depends($member, $trail); + add_depends($member, $trail, deptype("presence")); $member_to_trails{$member}{$trail} = [$prev, $next]; } @@ -406,13 +406,13 @@ sub pagetemplate (@) { my ($prevurl, $nexturl, $prevtitle, $nexttitle); if (defined $prev) { - add_depends($params{destpage}, $prev); + add_depends($params{destpage}, $prev, deptype("presence")); $prevurl = urlto($prev, $page); $prevtitle = title_of($prev); } if (defined $next) { - add_depends($params{destpage}, $next); + add_depends($params{destpage}, $next, deptype("presence")); $nexturl = urlto($next, $page); $nexttitle = title_of($next); } diff --git a/debian/changelog b/debian/changelog index 6f13b2dd5..948fdcc84 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ ikiwiki (3.20121213) UNRELEASED; urgency=low * htmlscrubber: Allow the bitcoin URI scheme. * aggregate: When run with --aggregate, if an aggregation is already running, don't go on and --refresh. + * trail: Converted all dependencies to presence dependencies. -- Joey Hess Sat, 22 Dec 2012 16:15:24 -0400 diff --git a/doc/bugs/trail_excess_dependencies.mdwn b/doc/bugs/trail_excess_dependencies.mdwn new file mode 100644 index 000000000..d5dcd5403 --- /dev/null +++ b/doc/bugs/trail_excess_dependencies.mdwn @@ -0,0 +1,26 @@ +I've just modified the trail plugin to use only presence, and not +content dependencies. Using content dependencies, particularly to the page +that defines the trail, meant that every time that page changed, *every* +page in the trail gets rebuilt. This leads to users setting up sites that +have horrible performance, if the trail is defined in, for example, the top +page of a blog. + +Unfortunatly, this change to presence dependencies has +introduced a bug. Now when an existing trail is removed, the pages in the +trail don't get rebuilt to remove the trail (both html display and state). + +I think that to fix this bug, the plugin should use a hook to +force rebuilding of all the pages that were in the trail, when +the trail is removed (or changed). + +There's a difficulty in doing that: The needsbuild hook runs before the scan +hook, so before it has a chance to see if the trail directive is still there. +It'd need some changes to ikiwiki's hooks. + +(An improvement in this area would probably simplify other plugins, which +currently abuse the needsbuild hook to unset state, to handle the case +where the directive that resulted in that state is removed.) + +I apologise for introducing a known bug, but the dependency mess was too +bad to leave as-is. And I have very little time (and regrettably, even less +power) to deal with it right now. :( --[[Joey]] -- 2.26.2