- ikiwiki (3.14159266) UNRELEASED; urgency=low
++ikiwiki (3.2009XXXX) UNRELEASED; urgency=low
+
- * parentlinks: Add has_parentlinks template parameter to allow styling
- the toplevel index differently etc.
- * img: Correct bug in image size calculation code.
- * img: Fix dependency code for full size images.
- * toggle, relativedate: Support templates that add attributes
- to the body tag.
- * Support RPC::XML 0.69's incompatable object instantiation method.
- * mirrorlist: Display nothing if list is empty.
- * Fix a bug that could lead to duplicate links being recorded
- for tags.
- * Added support framework for multiple types of dependencies.
- * Allow declaring that a dependency is only affected by page presence
- or changes to its links.
++ * Added support framework for multiple types of dependencies, including
++ dependncies that are only affected by page precence or link changes.
++ * Rebuild wikis on upgrade to this version to get improved dependency
++ info.
+ * pagecount, calendar, postsparkline, progress: Use a presence dependency,
+ which makes these directives much less expensive to use, since page
+ edits will no longer trigger an unnecessary update.
+ * map: Use a presence dependency unless show= is specified.
+ This makes maps efficient enough that they can be used on sidebars!
+ * inline: Use a presence dependency in quick mode.
+ * brokenlinks: Use a link dependency.
+ This makes it much more efficient, only updating when really necessary.
+ * orphans, pagestats: Use a combination of presence and link dependencies.
+ This makes them more efficient. It also fixes a longstanding bug,
+ where if only a small set of pages were considered by orphans/pagestats,
+ changes to links on other pages failed to cause an update.
+ * linkmap: Use a combination of presence and link dependencies.
+ This makes the map be regenerated much less frequently in many cases,
+ so larger maps are more practical to use now.
- * Transitive dependencies are now correctly supported.
- * Rebuild wikis on upgrade to this version to get improved dependency
- info.
+ * Plugins providing PageSpec `match_*` functions should pass additional
- influence information when creating result objects.
++ influence information when creating result objects. This allows correctly
++ handling many more complicated dependencies.
+ * API change: `pagespec_match_list` has completly changed its interface.
+ The old interface will be removed soon, and a warning will be printed
+ if any plugins try to use it.
++ * Transitive dependencies are now correctly supported.
++
++ -- Joey Hess <joeyh@debian.org> Fri, 09 Oct 2009 20:13:27 -0400
++
+ ikiwiki (3.20091009) unstable; urgency=low
+
+ * parentlinks: Add has_parentlinks template parameter to allow styling
+ the toplevel index differently etc.
+ * img: Correct bug in image size calculation code.
+ * img: Fix dependency code for full size images.
+ * toggle, relativedate: Support templates that add attributes
+ to the body tag.
+ * Support RPC::XML 0.69's incompatible object instantiation method.
+ * mirrorlist: Display nothing if list is empty.
+ * Fix a bug that could lead to duplicate links being recorded
+ for tags.
- * Optimize away most expensive file prune calls, when refreshing,
+ * Optimize away most expensive file prune checks, when refreshing,
by only checking new files.
- -- Joey Hess <joeyh@debian.org> Sun, 27 Sep 2009 17:40:03 -0400
+ -- Joey Hess <joeyh@debian.org> Fri, 09 Oct 2009 19:53:50 -0400
ikiwiki (3.14159265) unstable; urgency=low
modification to plugins/brokenlinks causes an unnecessary update of
plugins, and could be solved by adding more dependency types.)
---[[Joey]]
+[[done]] --[[Joey]]
+
+ > Some questions/comments... I've thought about this a lot for [[todo/tracking_bugs_with_dependencies]].
+ >
+ > * When you say that anything that causes a rebuild of B is treated as a change of B, are you: i) Treating
+ > any rebuild as a change, or ii) Treating any rebuild that gives a new result as a change? Option ii) would
+ > lead to fewer rebuilds. Implementation is easy: when you're about to rebuild a page, load the old rendered html in. Do the rebuild. Compare
+ > the new and old html. If there is a difference, then mark that page as having changed. If there is no difference
+ > then you don't need to mark that pages as changed, even though it has been rebuilt. (This would ignore pages in meta-data that don't
+ > cause changes in html, but I don't think that is a huge issue.)
+
+ >> That is a good idea. I will have to look at it to see if the overhead of
+ >> reading back in the html of every page before building actually is a
+ >> win though. So far, I've focused on avoiding unnecessary rebuilds, and
+ >> there is still some room for more dependency types doing so.
+ >> (Particularly for metadata dependencies..) --[[Joey]]
+
+ > * The second comment I have relates to cycles in transitive dependencies. At the moment I don't think this is
+ > possible, but with some additions it may well become so. This could be problematic as it could lead to a)
+ > updates that never complete, or b) it being theoretically unclear what the final result should be (i.e. you
+ > can construct logical paradoxes in the system). I think the point above about marking things as changed only when
+ > the output actually changes fixes any cases that are well defined. For logical paradoxes and infinite loops (e.g.
+ > two pages that include each other), you might want to put a limit on the number of times you'll rebuild a page in any
+ > given run of ikiwiki. Say, only allow a page to rebuild twice on any run, regardless of whether a page it depends on changes.
+ > This is not a perfect solution, but would be a good approximation. -- [[Will]]
+
+ >> Ikiwiki only builds any given output file once per run, already. --[[Joey]]