influence blocker implementation
authorJoey Hess <joey@gnu.kitenet.net>
Tue, 13 Oct 2009 18:37:14 +0000 (14:37 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Tue, 13 Oct 2009 18:37:14 +0000 (14:37 -0400)
commita20bc7a3fc6a2f2369022873ef7c2afbd5e49105
treeb885c1392e469a16f40a228345558e4ff3a97623
parent5e4e43e2c73d6077f8091fe063add1ebce9335e3
influence blocker implementation

This avoids unnecessary influences being recorded from pagespecs
such as "link(done) and bugs/*", when a page cannot ever possibly
match.

A pagespec term that returns a value without influence is an influence
blocker. If such a blocker has a false value (possibly due to being
negated) and is ANDed with another term, it blocks that term's influence
from propigating out.

If the term is ORed, or has a true value, it does not block influence.
(Consider "link(done) or bugs/*" and "link(done) and !nosuchpage")

In the implementation in merge_influence, I had to be careful to never
negate $this or $other when testing if they are an influence blocker,
since negation mutates the object. Thus the slightly weird if statement.
IkiWiki.pm