interesting bug
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 30 Sep 2008 19:16:45 +0000 (15:16 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 30 Sep 2008 19:16:45 +0000 (15:16 -0400)
doc/bugs/entirely_negated_pagespec_matches_internal_pages.mdwn [new file with mode: 0644]

diff --git a/doc/bugs/entirely_negated_pagespec_matches_internal_pages.mdwn b/doc/bugs/entirely_negated_pagespec_matches_internal_pages.mdwn
new file mode 100644 (file)
index 0000000..012fcec
--- /dev/null
@@ -0,0 +1,23 @@
+A [[PageSpec]] that is entirely negated terminals, such as "!foo and !bar"
+matches all other pages, including all internal pages. This can lead to
+unexpected results, since it will match a bunch of recentchanges pages,
+etc.
+
+Recall that internal-use pages are not matched by a glob. So "*" doesn't
+match them. So if the pagespec is "* and !foo and !bar", it won't match
+them. This is the much more common style.
+
+There's an odd inconsistency with entirely negated pagespecs. If "!foo"
+matches page bar, shouldn't "" also match bar? But, the empty pagespec is
+actually special-cased to not match anything.
+
+Indeed, it seems what would be best would be for "!foo" to not match any
+pages, unless it's combined with a terminal that positively matches pages
+("* and !foo"). Although this would be a behavior change, with transition
+issues.
+
+Another approach would be to try to detect the case of an entirely negated
+pagespec, and implicitly add "and !internal()" to it.
+
+Either approach would require fully parsing the pagespec. And consider cases
+like "!(foo and !bar)". Doesn't seem at all easy to solve. --[[Joey]]