]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/todo/dependency_types.mdwn
linkmap, pagestats: avoid using %links to get a list of pages
[git.ikiwiki.info.git] / doc / todo / dependency_types.mdwn
index 6218222f7811bbe3cdfc35d7d397579a8c515a27..19294bba054e5fb509c97a23de6c6a1f8cc267eb 100644 (file)
@@ -10,7 +10,7 @@ whenever a matching dependency is added, removed, or *modified*. But a
 great many things don't care about the modification case, and often cause
 unnecessary page rebuilds:
 
 great many things don't care about the modification case, and often cause
 unnecessary page rebuilds:
 
-* meta only cares if the pages are added or removed. Content change does
+* map only cares if the pages are added or removed. Content change does
   not matter (unless show=title is used).
 * brokenlinks, orphans, pagecount, ditto (generally)
 * inline in archive mode cares about page title, author changing, but
   not matter (unless show=title is used).
 * brokenlinks, orphans, pagecount, ditto (generally)
 * inline in archive mode cares about page title, author changing, but
@@ -105,11 +105,11 @@ unnecessary page rebuilds:
 
 I propose the following. --[[Joey]] 
 
 
 I propose the following. --[[Joey]] 
 
-* Add a second type of dependency, call it an "contentless dependency".
+* Add a second type of dependency, call it an "presence dependency".
 * `add_depends` defaults to adding a regular ("full") dependency, as
   before. (So nothing breaks.)
 * `add_depends` defaults to adding a regular ("full") dependency, as
   before. (So nothing breaks.)
-* `add_depends($page, $spec, content => 0)` adds an contentless dependency.
-* `refresh` only looks at added/removed pages when resolving contentless
+* `add_depends($page, $spec, presence => 0)` adds an presence dependency.
+* `refresh` only looks at added/removed pages when resolving presence
   dependencies.
 
 This seems straightforwardly doable. I'd like [[Will]]'s feedback on it, if
   dependencies.
 
 This seems straightforwardly doable. I'd like [[Will]]'s feedback on it, if
@@ -128,25 +128,48 @@ I implemented the above in a branch.
 
 Then I found some problems:
 
 
 Then I found some problems:
 
-* pagestats is often used with a pagespec that uses `tagged()`.
-  A pure contentless dependency does not work for that, it needs to look
-  at link info.
-* orphans and brokenlinks cannot use contentless dependencies because they
-  need to update when links change.
 * Something simple like pagecount, that seems like it could use a
 * Something simple like pagecount, that seems like it could use a
-  contentless dependency, can have a pagespec that uses metadata, like
+  presence dependency, can have a pagespec that uses metadata, like
   `author()` or `copyright()`.
   `author()` or `copyright()`.
+* pagestats, orphans and brokenlinks cannot use presence dependencies
+  because they need to update when links change.
 
 
-Now I'm thinking about having a contentless dependency look at page
+Now I'm thinking about having a special dependency look at page
 metadata, and fire if the metadata changes. And it seems links should
 either be included in that, or there should be a way to make a dependency
 that fires when a page's links change. (And what about backlinks?)
 
 It's easy to see when a page's links change, since there is `%oldlinks`.
 To see when metadata is changed is harder, since it's stored in the
 metadata, and fire if the metadata changes. And it seems links should
 either be included in that, or there should be a way to make a dependency
 that fires when a page's links change. (And what about backlinks?)
 
 It's easy to see when a page's links change, since there is `%oldlinks`.
 To see when metadata is changed is harder, since it's stored in the
-pagestate by the meta plugin.
-
-(Alternative: Make add_depends look at the pagespec. Ie, if it is a simple
-page name, or a glob, we know a contentless dependency can be valid.
-If's more complex, convert the dependency from contentless to full. Finding
-a non-ad-hoc, non-sucky way to do that could be hard.)
+pagestate by the meta plugin. Also, there are many different types of
+metadata, that would need to be matched with the pagespecs somehow.
+
+Quick alternative: Make add_depends look at the pagespec. Ie, if it
+is a simple page name, or a glob, we know a presence dependency
+can be valid. If's more complex, convert the dependency from
+presence to full.
+
+There is a lot to dislike about this method. Its parsing of the pagespec,
+as currently implemented, does not let plugins add new types of pagespecs
+that only care about presence. Its pagespec parsing is also subject to
+false negatives (though these should be somewhat rare, and no false
+positives). Still, it does work, and it makes things like simple maps and
+pagecounts much more efficient.
+
+---- 
+
+Link dependencies:
+
+* `add_depends($page, $spec, links => 1, presence => 1)`
+  adds a links + presence dependency.
+* 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.
+* To determine if a pagespec is valid to be used with a links dependency,
+  use the same set that are valid for presence dependencies. But also
+  allow `backlinks()` to be used in it, since that matches pages
+  that the page links to, which is just what link dependencies are
+  triggered on.
+
+[[done]]