diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2015-10-02 02:12:18 -0400 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org <gerrit@eclipse.org> | 2015-10-02 02:12:19 -0400 |
commit | 0baf81a19159b2e2daabe6929395e3259a34a45a (patch) | |
tree | a79bb0c983adf3dbe237a8dd5eb6525274fa447a | |
parent | d652a6bfd763e1e2a0112bde56b307dfe7f6e59e (diff) | |
parent | 1a2b4e246dc33f98b40ef5d9a202c4efd862044f (diff) | |
download | jgit-0baf81a19159b2e2daabe6929395e3259a34a45a.tar.gz jgit-0baf81a19159b2e2daabe6929395e3259a34a45a.zip |
Merge "[ignore rules] fix for handling unmatched '[' brackets"
3 files changed, 56 insertions, 4 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/FastIgnoreRuleTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/FastIgnoreRuleTest.java index 2c04787e3d..480e326507 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/FastIgnoreRuleTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/FastIgnoreRuleTest.java @@ -54,6 +54,7 @@ public class FastIgnoreRuleTest { @Test public void testSimpleCharClass() { + assertMatched("][a]", "]a"); assertMatched("[a]", "a"); assertMatched("][a]", "]a"); assertMatched("[a]", "a/"); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreRuleSpecialCasesTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreRuleSpecialCasesTest.java index f8eb126826..567f3d866c 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreRuleSpecialCasesTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/ignore/IgnoreRuleSpecialCasesTest.java @@ -768,7 +768,7 @@ public class IgnoreRuleSpecialCasesTest { @Test public void testSpecialGroupCase9() throws Exception { - assertMatch("][", "][", true); + assertMatch("][", "][", false); } @Test @@ -968,6 +968,59 @@ public class IgnoreRuleSpecialCasesTest { assertMatch("[a{}()b][a{}()b]?[a{}()b][a{}()b]", "{}x()", true); assertMatch("x*{x}3", "xa{x}3", true); assertMatch("a*{x}3", "axxx", false); + + assertMatch("?", "[", true); + assertMatch("*", "[", true); + + // Escaped bracket matches, but see weird things below... + assertMatch("\\[", "[", true); + } + + /** + * The ignore rules here <b>do not match</b> any paths because single '[' + * begins character group and the entire rule cannot be parsed due the + * invalid glob pattern. See + * http://article.gmane.org/gmane.comp.version-control.git/278699. + * + * @throws Exception + */ + @Test + public void testBracketsUnmatched1() throws Exception { + assertMatch("[", "[", false); + assertMatch("[*", "[", false); + assertMatch("*[", "[", false); + assertMatch("*[", "a[", false); + assertMatch("[a][", "a[", false); + assertMatch("*[", "a", false); + assertMatch("[a", "a", false); + assertMatch("[*", "a", false); + assertMatch("[*a", "a", false); + } + + /** + * Single ']' is treated here literally, not as an and of a character group + * + * @throws Exception + */ + @Test + public void testBracketsUnmatched2() throws Exception { + assertMatch("*]", "a", false); + assertMatch("]a", "a", false); + assertMatch("]*", "a", false); + assertMatch("]*a", "a", false); + + assertMatch("]", "]", true); + assertMatch("]*", "]", true); + assertMatch("]*", "]a", true); + assertMatch("*]", "]", true); + assertMatch("*]", "a]", true); + } + + @Test + public void testBracketsRandom() throws Exception { + assertMatch("[\\]", "[$0+//r4a\\d]", false); + assertMatch("[:]]sZX]", "[:]]sZX]", false); + assertMatch("[:]]:]]]", "[:]]:]]]", false); } @Test diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/ignore/internal/Strings.java b/org.eclipse.jgit/src/org/eclipse/jgit/ignore/internal/Strings.java index f972828bc6..e354c7114c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/ignore/internal/Strings.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/ignore/internal/Strings.java @@ -141,9 +141,7 @@ public class Strings { private static boolean isComplexWildcard(String pattern) { int idx1 = pattern.indexOf('['); if (idx1 != -1) { - int idx2 = pattern.indexOf(']', idx1); - if (idx2 > idx1) - return true; + return true; } if (pattern.indexOf('?') != -1) { return true; |