Merge branch 'master' into dependency-types
authorJoey Hess <joey@gnu.kitenet.net>
Wed, 7 Oct 2009 00:20:45 +0000 (20:20 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Wed, 7 Oct 2009 00:20:45 +0000 (20:20 -0400)
Conflicts:
doc/todo/dependency_types.mdwn

1  2 
doc/todo/dependency_types.mdwn

index 19294bba054e5fb509c97a23de6c6a1f8cc267eb,7e940543c00aa248c018d4f6c30a5131162eec66..32c9187be27ef07135a8a3300c5bafb8c657151c
@@@ -158,11 -158,14 +158,11 @@@ pagecounts much more efficient
  
  ---- 
  
- Link dependencies:
+ ### Link dependencies
  
  * `add_depends($page, $spec, links => 1, presence => 1)`
    adds a links + presence dependency.
 -* `refresh` only rebuilds a page with a links dependency if
 -  pages matched by the pagespec gain or lose links. (What the link
 -  actually points to may change independent of this, due to changes
 -  elsewhere, without it firing.)
 +* Use backlinks change code to detect changes to link dependencies too.
  * So, brokenlinks can fire whenever any links in any of the
    pages it's tracking change, or when pages are added or
    removed.
    that the page links to, which is just what link dependencies are
    triggered on.
  
 +[[done]]
+ ----
+ ### the removal problem
+ So far I have not addressed fixing the removal problem (which Will
+ discusses above).
+ Summary of problem: A has a dependency on a pagespec such as
+ "bugs/* and !link(done)". B currently matches. Then B is updated,
+ in a way that makes A's dependency not match it (ie, it links to done).
+ Now A is not updated, because ikiwiki does not realize that it
+ depended on B before.
+ This was worked around to fix [[bugs/inline_page_not_updated_on_removal]]
+ by inline and map adding explicit dependencies on each page that appears
+ on them. Then a change to B triggers the explicit dep. While this works,
+ it's 1) ugly 2) probably not implemented by all plugins that could
+ be affected by this problem (ie, linkmap) and 3) is most of the reason why
+ we grew the complication of `depends_simple`.
+ One way to fix this is to include with each dependency, a list of pages
+ that currently match it. If the list changes, the dependency is triggered.
+ Should be doable, but seems to involve a more work than
+ currently. Consider that a dependency on "bugs/*" currently
+ is triggered by just checking until *one* page is found to match it.
+ But to store the list, *every* page would have to be tried against it.
+ Unless the list can somehow be intelligently updated, looking at only the
+ changed pages.