master
http://www.cse.unsw.edu.au/~willu/ 2009-10-08 07:26:01 -04:00 committed by Joey Hess
parent 808c699961
commit 57d694046f
1 changed files with 37 additions and 9 deletions

View File

@ -239,6 +239,21 @@ sigh.
>>> Hmm, I'm not seeing cycles be a problem, at least with the current >>> Hmm, I'm not seeing cycles be a problem, at least with the current
>>> pagespec terms. --[[Joey]] >>> pagespec terms. --[[Joey]]
>>>> Oh, they're not with current pagespec terms. But this is really close to extending to handle
>>>> functional pagespecs, etc. And I think I'd like to think about that now.
>>>>
>>>> Having said that, I don't want to hold you up - you seem to be making progress. The best is
>>>> the enemy of the good, etc. etc.
>>>>
>>>> For my part, I'm imagining we have two more constructs in IkiWiki:
>>>>
>>>> * A map directive that actually wikilinks to the pages it links to, and
>>>> * A `match_sharedLink(pageX)` matching function that matches pageY if both pageX and pageY each have links to any same third page, pageZ.
>>>>
>>>> With those two constructs, one page changing might change the set of pages included in a map somewhere, which might then change the set of pages matched by some other pagespec, which might then...
>>>>
>>>> --[[Will]]
---- ----
### Link dependencies ### Link dependencies
@ -313,16 +328,13 @@ can indirectly influence what pages a pagespec matches.
> Trying to make a formal definition of this: (Note, I'm using the term sets rather than lists, but they're roughly equivalent) > Trying to make a formal definition of this: (Note, I'm using the term sets rather than lists, but they're roughly equivalent)
> >
> * Let the *matching set* for a pagespec be the set of pages that the pagespec matches. > * Let the *matching set* for a pagespec be the set of existing pages that the pagespec matches.
> * Let a *complete influence set* for a pagespec be the set of all pages whose alteration might change the matching set of that pagespec. > * Let a *influence set* for a pagespec be the set of all pages, *p*, whose alteration might:
> * Let the *direct influence set* be the intersection of the matching set and the complete influence set. > * cause the pagespec to include or exclude a page other than *p*, or
> * Let the *indirect influence set* be the compliment of the direct influence set with respect to the complete influence set. > * cause the pagespec to exclude *p*.
>
>> \[Will snipped some stuff and edited the formal definition]
> >
> Is that a fair definition? I don't think it quite matches your examples below unfortunately.
> I was unsure if I should insert the word 'existing' in there in a few places. As it stands, these definitions could include sets of pages that don't exist, e.g. "*".
> The one I'm least sure of is the definition of the direct influence set. It feels like you want something
> like "the traditional set of things we thought about that could cause a pagespec to change", but that definition
> is not very formal and I suspect will lead to problems. Something like "The set of pages matched by the globs in the pagespec" might be closer?
> --[[Will]] > --[[Will]]
>> I appreciate the formalism! >> I appreciate the formalism!
@ -331,11 +343,24 @@ can indirectly influence what pages a pagespec matches.
>> in the future, the existing dependency code will always test to see >> in the future, the existing dependency code will always test to see
>> if it matches. So it will be in the maching set (or not) at that point. >> if it matches. So it will be in the maching set (or not) at that point.
>> >>
>>> Hrm, I agree with you in general, but I think I can come up with nasty counter-examples. What about a pagespec
>>> of "!backlink(bogus)" where the page bogus doesn't exist? In this case, the page 'bogus' needs to be in the influence
>>> set even though it doesn't exist.
>>>
>>> Also, I would really like the formalism to include the whole dependency system, not just any additions to it. That will make
>>> the whole thing much easier to reason about.
>>
>> The problem with your definition of direct influence set seems to be >> The problem with your definition of direct influence set seems to be
>> that it doesn't allow `link()` and `title()` to have as an indirect >> that it doesn't allow `link()` and `title()` to have as an indirect
>> influence, the page that matches. But I'm quite sure we need those. >> influence, the page that matches. But I'm quite sure we need those.
>> --[[Joey]] >> --[[Joey]]
>>> I see what you mean. Does the revised definition capture this effectively?
>>> The problem with this revised definition is that it still doesn't match your examples below.
>>> My revised definition will include pretty much all currently matching pages to be in the influence list
>>> because deletion of any of them would cause a change in which pages are matched - the removal problem.
>>> -- [[Will]]
#### Examples #### Examples
* The pagespec "created_before(foo)" has an influence list that contains foo. * The pagespec "created_before(foo)" has an influence list that contains foo.
@ -349,6 +374,9 @@ can indirectly influence what pages a pagespec matches.
Avoiding including every page in the wiki into its influence list is Avoiding including every page in the wiki into its influence list is
very important! very important!
>>> So, why don't the above influence lists contain the currently matched pages?
>>> Don't you need this to handle the removal problem? -- [[Will]]
* The pagespec "title(foo)" has an influence list that contains every page * The pagespec "title(foo)" has an influence list that contains every page
that currently matches it. A change to any matching page can change its that currently matches it. A change to any matching page can change its
title, making it not match any more, and so the list is needed due to the title, making it not match any more, and so the list is needed due to the