|
|
|
@ -55,6 +55,7 @@ import java.util.Collections;
|
|
|
|
|
import org.eclipse.jgit.junit.JGitTestUtil; |
|
|
|
|
import org.eclipse.jgit.lib.FileMode; |
|
|
|
|
import org.eclipse.jgit.lib.RepositoryTestCase; |
|
|
|
|
import org.eclipse.jgit.treewalk.AbstractTreeIterator; |
|
|
|
|
import org.eclipse.jgit.treewalk.TreeWalk; |
|
|
|
|
import org.eclipse.jgit.treewalk.filter.PathFilterGroup; |
|
|
|
|
import org.eclipse.jgit.util.FS; |
|
|
|
@ -252,6 +253,133 @@ public class DirCacheIteratorTest extends RepositoryTestCase {
|
|
|
|
|
assertEquals(paths.length, pathIdx); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testReset() throws Exception { |
|
|
|
|
final DirCache dc = DirCache.newInCore(); |
|
|
|
|
|
|
|
|
|
final FileMode mode = FileMode.REGULAR_FILE; |
|
|
|
|
final String[] paths = { "a.", "a/b", "a/c/e", "a/c/f", "a/d", "a0b" }; |
|
|
|
|
final DirCacheEntry[] ents = new DirCacheEntry[paths.length]; |
|
|
|
|
for (int i = 0; i < paths.length; i++) { |
|
|
|
|
ents[i] = new DirCacheEntry(paths[i]); |
|
|
|
|
ents[i].setFileMode(mode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
final DirCacheBuilder b = dc.builder(); |
|
|
|
|
for (int i = 0; i < ents.length; i++) |
|
|
|
|
b.add(ents[i]); |
|
|
|
|
b.finish(); |
|
|
|
|
|
|
|
|
|
DirCacheIterator dci = new DirCacheIterator(dc); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a.", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertTrue(dci.eof()); |
|
|
|
|
|
|
|
|
|
// same entries the second time
|
|
|
|
|
dci.reset(); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a.", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertTrue(dci.eof()); |
|
|
|
|
|
|
|
|
|
// Step backwards
|
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a", dci.getEntryPathString()); |
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a.", dci.getEntryPathString()); |
|
|
|
|
assertTrue(dci.first()); |
|
|
|
|
|
|
|
|
|
// forward
|
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a.", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertTrue(dci.eof()); |
|
|
|
|
|
|
|
|
|
// backwqrd halways, and forward again
|
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a", dci.getEntryPathString()); |
|
|
|
|
|
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("a0b", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertTrue(dci.eof()); |
|
|
|
|
|
|
|
|
|
dci.reset(); // a.
|
|
|
|
|
dci.next(1); // a
|
|
|
|
|
AbstractTreeIterator sti = dci.createSubtreeIterator(null); |
|
|
|
|
assertEquals("a/b", sti.getEntryPathString()); |
|
|
|
|
sti.next(1); |
|
|
|
|
assertEquals("a/c", sti.getEntryPathString()); |
|
|
|
|
sti.next(1); |
|
|
|
|
assertEquals("a/d", sti.getEntryPathString()); |
|
|
|
|
sti.back(2); |
|
|
|
|
assertEquals("a/b", sti.getEntryPathString()); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testBackBug396127() throws Exception { |
|
|
|
|
final DirCache dc = DirCache.newInCore(); |
|
|
|
|
|
|
|
|
|
final FileMode mode = FileMode.REGULAR_FILE; |
|
|
|
|
final String[] paths = { "git-gui/po/fr.po", |
|
|
|
|
"git_remote_helpers/git/repo.py" }; |
|
|
|
|
final DirCacheEntry[] ents = new DirCacheEntry[paths.length]; |
|
|
|
|
for (int i = 0; i < paths.length; i++) { |
|
|
|
|
ents[i] = new DirCacheEntry(paths[i]); |
|
|
|
|
ents[i].setFileMode(mode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
final DirCacheBuilder b = dc.builder(); |
|
|
|
|
for (int i = 0; i < ents.length; i++) |
|
|
|
|
b.add(ents[i]); |
|
|
|
|
b.finish(); |
|
|
|
|
|
|
|
|
|
DirCacheIterator dci = new DirCacheIterator(dc); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("git-gui", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("git_remote_helpers", dci.getEntryPathString()); |
|
|
|
|
dci.back(1); |
|
|
|
|
assertFalse(dci.eof()); |
|
|
|
|
assertEquals("git-gui", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertEquals("git_remote_helpers", dci.getEntryPathString()); |
|
|
|
|
dci.next(1); |
|
|
|
|
assertTrue(dci.eof()); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testTwoLevelSubtree_FilterPath() throws Exception { |
|
|
|
|
final DirCache dc = DirCache.newInCore(); |
|
|
|
|