Merge branch 'master' into dependency-types

master
Joey Hess 2009-10-04 16:28:51 -04:00
commit d5357374c9
4 changed files with 55 additions and 7 deletions

View File

@ -12,7 +12,7 @@ And here's how to create a table of all the pages on the wiki:
\[[!pagestats style="table"]]
The optional `among` parameter limits counting to pages that match a
The optional `among` parameter limits display to pages that match a
[[ikiwiki/PageSpec]]. For instance, to display a cloud of tags used on blog
entries, you could use:

View File

@ -271,6 +271,17 @@ Perl I've ever written!_)
>>> Well, seems you want to match the indent at the start of the line containing
>>> the directive, even if the directive does not start the line. That would
>>> be quite hard to make a regexp do, though. --[[Joey]]
>>
>> I wasted a long time getting the simpler `indent($1, handle->($2,$,4))` to
>> work (remember, I don't know perl at all). Somehow `$1` does not arrive, I
>> made a simple testcase that worked, and I conclude something inside $handle
>> results in the value of $1 not arriving as it should!
>>
>> Anyway, instead a very simple incremental patch is in [pproc-indent][ppi]
>> where the indentation regex is `(^[ \t]+|)` instead, which seems to work
>> very well (and the regex is multiline now as well). I'm happy to rebase the
>> changes if you want or you can just squash the four patches 1+3 => 1+1
>> -- [[ulrik]]
[ppi]: http://github.com/engla/ikiwiki/commits/pproc-indent

View File

@ -23,3 +23,9 @@ I've written a new plugin, sectiontemplate, available in the `page_tmpl` branch
>> I wanted this to put comments on my new blog, and was more interested in that goal than this subgoal. I've moved most of my web pages to IkiWiki and there is only one small part that is the blog.
>> I wanted to use [[Disqus comments|tips/Adding_Disqus_to_your_wiki/]], but only on the blog pages. (I'm using Disqus rather than IkiWiki comments because I don't want to have to deal with spam, security, etc. I'll happily just let someone else host the comments.) -- [[Will]]
>>> Yes, handing the rebuild is a good reason not to use directives for
>>> this.
>>>
>>> I do still think combining this with pagetemplate would be good.
>>> --[[Joey]]

View File

@ -10,9 +10,9 @@ 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:
* 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
* brokenlinks, orphans, pagecount, ditto (generally)
* inline in archive mode cares about page title, author changing, but
not content. (Ditto for meta with show=title.)
* Causes extra work when solving the [[bugs/transitive_dependencies]]
@ -109,9 +109,6 @@ I propose the following. --[[Joey]]
* `add_depends` defaults to adding a regular ("full") dependency, as
before. (So nothing breaks.)
* `add_depends($page, $spec, content => 0)` adds an contentless dependency.
* Contentless dependencies are stored in `%depends_contentless` and
`%depends_contentless_simple`, which are stored in the index similarly
to the existing hashes.
* `refresh` only looks at added/removed pages when resolving contentless
dependencies.
@ -121,5 +118,39 @@ to the two types he talks about above, but I hope are close enough that
they can be used.
This doesn't deal with the stuff that only depend on the metadata of a
page, as collected in the scan pass, changing. But it does leave a window
page, as collected in the scan pass, changing. But it does leave a window
open for adding such a dependency type later.
----
I implemented the above in a branch.
[[!template id=gitbranch branch=origin/dependency-types author="[[joey]]"]]
Then I found some problems:
* Something simple like pagecount, that seems like it could use a
contentless dependency, can have a pagespec that uses metadata, like
`author()` or `copyright()`.
* pagestats, orphans and brokenlinks cannot use contentless dependencies
because they need to update when links change.
Now I'm thinking about having a contentless 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
pagestate by the meta plugin.
Quick 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.
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 are contentless. 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.