]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/todo/dependency_types.mdwn
Optimize away most expensive file prune calls, when refreshing
[git.ikiwiki.info.git] / doc / todo / dependency_types.mdwn
index cce5997e84d745a6d49a6ac9a7a7bdb340c3cb54..f06603874ab5331bd98188db2a44149db359b330 100644 (file)
@@ -501,6 +501,38 @@ to not link to done, the influence will do its job.
 
 Looks good!
 
 
 Looks good!
 
+----
+
+Here is a case where this approach has some false positives.
+
+"bugs/* and link(patch)"
+
+This finds as influences all pages that link to patch, even
+if they are not under bugs/, and so can never match.
+
+To fix this, the influence calculation would need to consider boolean
+operators. Currently, this turns into roughly:
+
+`FailReason() & SuccessReason(patch)`
+
+Let's say that the glob instead returns a HardFailReason, which when
+ANDed with another object, drops their influences. (But when ORed, combines
+them.) Fixes the above, but does it always work?
+
+"(bugs/* or link(patch)) and backlink(index)" =>
+`( HardFailReason() | SuccessReason(page) ) & SuccessReason(index)`` =>
+`SuccessReason(page & SuccessReason(index)` =>
+SuccessReason(page, index) => right
+
+"(bugs/* and link(patch)) or backlink(index)" =>
+`( HardFailReason() & SuccessReason(page) ) | SuccessReason(index)`` =>
+`HardFailReason() | SuccessReason(index)` =>
+`SuccessReason(index)` => right
+
+"!bugs/* and link(patch)" =>
+`HardFailReason() | SuccessReason(bugs/foo)` =>  
+`HardFailReason()` => right
+
 #### High-level Calculation and Storage
 
 Naively calculating the full influence list for a pagespec requires trying
 #### High-level Calculation and Storage
 
 Naively calculating the full influence list for a pagespec requires trying