You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2012/05/23 15:44:48 UTC
svn commit: r1341862 - in /jackrabbit/oak/trunk/oak-mk/src:
main/java/org/apache/jackrabbit/mk/util/NameFilter.java
test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java
Author: stefan
Date: Wed May 23 13:44:48 2012
New Revision: 1341862
URL: http://svn.apache.org/viewvc?rev=1341862&view=rev
Log:
OAK-75: specify format and semantics of 'filter' parameter in MicroKernel API (WIP)
Modified:
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java?rev=1341862&r1=1341861&r2=1341862&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/NameFilter.java Wed May 23 13:44:48 2012
@@ -25,14 +25,23 @@ import java.util.List;
* <li>a filter consists of one or more <i>globs</i></li>
* <li>a <i>glob</i> prefixed by {@code -} (dash) is treated as an exclusion pattern;
* all others are considered inclusion patterns</li>
- * <li>{@code *} (asterisk) serves as a <i>wildcard</i>, i.e. it matches any substring in the target name</li>
+ * <li>a leading {@code -} (dash) must be escaped by prepending {@code \} (backslash)
+ * if it should be interpreted as a literal</li>
+ * <li>{@code *} (asterisk) serves as a <i>wildcard</i>, i.e. it matches any
+ * substring in the target name</li>
+ * <li>{@code *} (asterisk) occurrences within the glob to be interpreted as
+ * literals must be escaped by prepending {@code \} (backslash)</li>
* <li>a filter matches a target name if any of the inclusion patterns match but
* none of the exclusion patterns</li>
* </ul>
- * Example:
+ * Examples:
* <p/>
* {@code ["foo*", "-foo99"]} matches {@code "foo"} and {@code "foo bar"}
* but not {@code "foo99"}.
+ * <p/>
+ * {@code ["foo\*"]} matches {@code "foo*"} but not {@code "foo99"}.
+ * <p/>
+ * {@code ["\-blah"]} matches {@code "-blah"}.
*/
public class NameFilter {
@@ -121,11 +130,16 @@ public class NameFilter {
}
if (pOff < pLen && sOff < sLen) {
- // check for ESCAPE character
+ // check for escape sequences
if (pattern.charAt(pOff) == ESCAPE) {
+ // * to be interpreted as literal
if (pOff < pLen - 1
- && (pattern.charAt(pOff + 1) == WILDCARD
- || pattern.charAt(pOff + 1) == EXCLUDE_PREFIX)) {
+ && pattern.charAt(pOff + 1) == WILDCARD) {
+ ++pOff;
+ }
+ // leading - to be interpreted as literal
+ if (pOff == 0 && pLen > 1
+ && pattern.charAt(pOff + 1) == EXCLUDE_PREFIX) {
++pOff;
}
}
Modified: jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java?rev=1341862&r1=1341861&r2=1341862&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/NameFilterTest.java Wed May 23 13:44:48 2012
@@ -37,11 +37,44 @@ public class NameFilterTest {
filter = new NameFilter(new String[]{"*foo"});
assertTrue(filter.matches("foo"));
+ assertTrue(filter.matches("-123foo"));
assertFalse(filter.matches("bar"));
filter = new NameFilter(new String[]{"foo\\*bar"});
assertFalse(filter.matches("foo bar"));
assertTrue(filter.matches("foo*bar"));
- }
+ filter = new NameFilter(new String[]{"foo\\bar"});
+ assertTrue(filter.matches("foo\\bar"));
+
+ filter = new NameFilter(new String[]{"foo\\"});
+ assertTrue(filter.matches("foo\\"));
+
+ filter = new NameFilter(new String[]{"*"});
+ assertTrue(filter.matches("*"));
+ assertTrue(filter.matches("\\*"));
+ assertTrue(filter.matches("blah"));
+
+ filter = new NameFilter(new String[]{"\\*"});
+ assertTrue(filter.matches("*"));
+ assertFalse(filter.matches("\\*"));
+ assertFalse(filter.matches("blah"));
+
+ filter = new NameFilter(new String[]{"\\- topic"});
+ assertTrue(filter.matches("- topic"));
+
+ filter = new NameFilter(new String[]{"*", "- topic"});
+ assertFalse(filter.matches(" topic"));
+ assertTrue(filter.matches("- topic"));
+ assertTrue(filter.matches("blah"));
+
+ filter = new NameFilter(new String[]{"foo\\-bar"});
+ assertFalse(filter.matches("foo-bar"));
+ assertTrue(filter.matches("foo\\-bar"));
+
+ filter = new NameFilter(new String[]{"foo\\\\*bar"});
+ assertTrue(filter.matches("foo\\*bar"));
+ assertFalse(filter.matches("foo\\ blah bar"));
+ assertFalse(filter.matches("foo*bar"));
+ }
}