From: Joey Hess <joey@kitenet.net>
Date: Fri, 28 Dec 2012 02:29:51 +0000 (-0400)
Subject: trail: Converted all dependencies to presence dependencies.
X-Git-Tag: 3.20130212~41
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/86519b047e6fb96e4c5c5b22cb9619d120bf566e?hp=--cc

trail: Converted all dependencies to presence dependencies.

smcv please note this introduces another bug, which I've opened
---

86519b047e6fb96e4c5c5b22cb9619d120bf566e
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 <joeyh@debian.org>  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]]