Browse Source

Merge "Fix bugs in TreeWalk#isPathSuffix used by PathSuffixFilter"

tags/v3.1.0.201309270735-rc1
Christian Halstrick 10 years ago
parent
commit
de00ec94d8

+ 10
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java View File

@@ -82,6 +82,16 @@ public class PathSuffixFilterTest extends RepositoryTestCase {
assertEquals(expected, paths);
}

@Test
public void testEdgeCases() throws IOException {
ObjectId treeId = createTree("abc", "abcd", "bcd", "c");
assertEquals(new ArrayList<String>(), getMatchingPaths("xbcd", treeId));
assertEquals(new ArrayList<String>(), getMatchingPaths("abcx", treeId));
assertEquals(Arrays.asList("abcd"), getMatchingPaths("abcd", treeId));
assertEquals(Arrays.asList("abcd", "bcd"), getMatchingPaths("bcd", treeId));
assertEquals(Arrays.asList("abc", "c"), getMatchingPaths("c", treeId));
}

private ObjectId createTree(String... paths) throws IOException {
final ObjectInserter odi = db.newObjectInserter();
final DirCache dc = db.readDirCache();

+ 7
- 3
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java View File

@@ -835,13 +835,17 @@ public class TreeWalk {
final AbstractTreeIterator t = currentHead;
final byte[] c = t.path;
final int cLen = t.pathLen;
int ci;

for (ci = 1; ci < cLen && ci < pLen; ci++) {
if (c[cLen-ci] != p[pLen-ci])
for (int i = 1; i <= pLen; i++) {
// Pattern longer than current path
if (i > cLen)
return false;
// Current path doesn't match pattern
if (c[cLen - i] != p[pLen - i])
return false;
}

// Whole pattern tested -> matches
return true;
}


Loading…
Cancel
Save