X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b98db56f114afdf243afe456e23c7ea16890847f..3c542cc27948542026729f7a8c0e03731236c1e0:/doc/todo/tracking_bugs_with_dependencies.mdwn diff --git a/doc/todo/tracking_bugs_with_dependencies.mdwn b/doc/todo/tracking_bugs_with_dependencies.mdwn index 357cc33a8..5640de95a 100644 --- a/doc/todo/tracking_bugs_with_dependencies.mdwn +++ b/doc/todo/tracking_bugs_with_dependencies.mdwn @@ -9,6 +9,9 @@ I like the idea of [[tips/integrated_issue_tracking_with_ikiwiki]], and I do so > One way to do this would be to introduce variables into the pagespec, along with > universal and/or existential [[!wikipedia Quantification]]. That looks quite complex. > +>> I thought about this briefly, and got about that far.. glad you got +>> further. :-) --[[Joey]] +> > Another option would be go with a more functional syntax. The concept here would > be to allow a pagespec to appear in a 'pagespec function' anywhere a page can. e.g. > I could pass a pagespec to `link()` and that would return true if there is a link to any @@ -22,6 +25,9 @@ I like the idea of [[tips/integrated_issue_tracking_with_ikiwiki]], and I do so > ends, and that isn't a regular language (we can't use regular expression matching for > easy parsing). > +>> Also, it may cause ambiguities with page names that contain parens +>> (though some such ambigutities already exist with the pagespec syntax). +> > One simplification of that would be to introduce some pagespec [[shortcuts]]. We could > then allow pagespec functions to take either pages, or named pagespec shortcuts. The > pagespec shortcuts would just be listed on a special page, like current [[shortcuts]]. @@ -37,6 +43,30 @@ I like the idea of [[tips/integrated_issue_tracking_with_ikiwiki]], and I do so > > -- [[Will]] +>> Having a separate page for the shortcuts feels unwieldly.. perhaps +>> instead the shortcut could be defined earlier in the scope of the same +>> pagespec that uses it? +>> +>> Example: `define(~bugs, bugs/* and !*/Discussion) and define(~openbugs, ~bugs and !link(done)) and ~openbugs and !link(~openbugs)` + +>>> That could work. parens are only ever nested 1 deep in that grammar so it is regular and the current parsing would be ok. + +>> Note that I made the "~" explicit, not implicit, so it could be left out. In the case of ambiguity between +>> a definition and a page name, the definition would win. + +>>> That was my initial thought too :), but when implementing it I decided that requiring the ~ made things easier. I'll probably require the ~ for the first pass at least. + +>> So, equivilant example: `define(bugs, bugs/* and !*/Discussion) and define(openbugs, bugs and !link(done)) and openbugs and !link(openbugs)` +>> +>> Re recursion, it is avoided.. but building a pagespec that is O(N^X) where N is the +>> number of pages in the wiki is not avoided. Probably need to add DOS prevention. +>> --[[Joey]] + +>>> If you memoize the outcomes of the named pagespecs you can make in O(N.X), no? +>>> -- [[Will]] + +>>>> Yeah, guess that'd work. :-) + > One quick further thought. All the above discussion assumes that 'dependency' is the > same as 'links to', which is not really true. For example, you'd like to be able to say > "This bug does not depend upon [ [ link to other bug ] ]" and not have a dependency. @@ -62,6 +92,18 @@ matches the appropriate page spec. There is no good list of pages available to does not give me a good list of pages. I found the same thing when I was working on this todo [[todo/Add_a_plugin_to_list_available_pre-processor_commands]]. +> I'm not sure why iterating over `%pagesources` wouldn't work here, it's the same method +> used by anything that needs to match a pagespec against all pages..? --[[Joey]] + +>> My uchecked hypothesis is that %pagesources is created after the refresh hook. +>> I've also been concerned about how globally defined pagespec shortcuts would interact with +>> the page dependancy system. Your idea of internally defined shortcuts should fix that. -- [[Will]] + +>>> You're correct, the refresh hook is run very early, before pagesources +>>> is populated. (It will be partially populated on a refresh, but will +>>> not be updated to reflect new pages.) Agree that internally defined +>>> seems the way to go. --[[Joey]] + Immediately below is a patch for IkiWiki.pm. Below that is a new plugin `definepagespec ` which behaves like `shortcut` for pagespecs.