# matching the pagespec are added or removed.
add_depends($params{page}, $params{pages});
# Explicitly add all currently linked pages as dependencies, so
- # that if they are removed, the calendar will be sure to be updated.
- add_depends($params{page}, join(" or ", @list));
+ # that if they are removed, the calendar will be sure to be updated.
+ add_depends($params{page}, join(" or ", @list));
return $calendar;
}
elsif ($params{link} =~ /^\w+:\/\//) {
$imgtag='<a href="'.$params{link}.'">'.$imgtag.'</a>';
}
- elsif (length bestlink($params{page}, $params{link})) {
- add_depends($params{page}, $params{link});
- $imgtag=htmllink($params{page}, $params{destpage},
- $params{link}, linktext => $imgtag,
- noimageinline => 1);
+ else {
+ my $b = bestlink($params{page}, $params{link});
+
+ if (length $b) {
+ add_depends($params{page}, $b);
+ $imgtag=htmllink($params{page}, $params{destpage},
+ $params{link}, linktext => $imgtag,
+ noimageinline => 1);
+ }
}
if (exists $params{caption}) {
if ($value !~ /^\w+:\/\//) {
my ($redir_page, $redir_anchor) = split /\#/, $value;
- add_depends($page, $redir_page);
my $link=bestlink($page, $redir_page);
if (! length $link) {
error gettext("redir page not found")
}
+ add_depends($page, $link);
$value=urlto($link, $page);
$value.='#'.$redir_anchor if defined $redir_anchor;
* Add discussionpage configuration setting.
* Several optimisations, including speedups to orphans and brokenlinks
calculation.
+ * meta, img: Fix bugs in dependency code. (smcv)
-- Joey Hess <joeyh@debian.org> Wed, 12 Aug 2009 12:25:30 -0400
>>>>> ikiwiki-transition, but that copy doesn't have to be optimal or support
>>>>> future features like [[tracking_bugs_with_dependencies]]). --[[smcv]]
+---
+
+Some questions on your optimize-depends branch. --[[Joey]]
+
+In saveindex it still or'd together the depends list, but the `{depends}`
+field seems only useful for backwards compatability (ie, ikiwiki-transition
+uses it still), and otherwise just bloats the index.
+
+Is an array the right data structure? `add_depends` has to loop through the
+array to avoid dups, it would be better if a hash were used there. Since
+inline (and other plugins) explicitly add all linked pages, each as a
+separate item, the list can get rather long, and that single add_depends
+loop has suddenly become O(N^2) to the number of pages, which is something
+to avoid..
+
+Also, since a lot of places are calling add_depends in a loop, it probably
+makes sense to just make it accept a list of dependencies to add. It'll be
+marginally faster, probably, and should allow for better optimisation
+when adding a lot of depends at once.
+
+In Render.pm, we now have a triply nested loop, which is a bit
+scary for efficiency. It seems there should be a way to
+rework this code so it can use the optimised `pagespec_match_list`,
+and/or hoist some of the inner loop calculations (like the `pagename`)
+out.
+
+Very good catch on img/meta using the wrong dependency; verified in the wild!
+(I've cherry-picked those bug fixes.)
+
[[!tag wishlist patch patch/core]]