1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.dircache;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertFalse;
48 import static org.junit.Assert.assertNotNull;
49 import static org.junit.Assert.assertSame;
50 import static org.junit.Assert.assertTrue;
51
52 import java.util.Collections;
53
54 import org.eclipse.jgit.junit.RepositoryTestCase;
55 import org.eclipse.jgit.lib.FileMode;
56 import org.eclipse.jgit.treewalk.TreeWalk;
57 import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
58 import org.junit.Test;
59
60 public class DirCacheBuilderIteratorTest extends RepositoryTestCase {
61 @Test
62 public void testPathFilterGroup_DoesNotSkipTail() throws Exception {
63 final DirCache dc = db.readDirCache();
64
65 final FileMode mode = FileMode.REGULAR_FILE;
66 final String[] paths = { "a-", "a/b", "a/c", "a/d", "a0b" };
67 final DirCacheEntry[] ents = new DirCacheEntry[paths.length];
68 for (int i = 0; i < paths.length; i++) {
69 ents[i] = new DirCacheEntry(paths[i]);
70 ents[i].setFileMode(mode);
71 }
72 {
73 final DirCacheBuilder b = dc.builder();
74 for (int i = 0; i < ents.length; i++)
75 b.add(ents[i]);
76 b.finish();
77 }
78
79 final int expIdx = 2;
80 final DirCacheBuilder b = dc.builder();
81 final TreeWalk tw = new TreeWalk(db);
82 tw.addTree(new DirCacheBuildIterator(b));
83 tw.setRecursive(true);
84 tw.setFilter(PathFilterGroup.createFromStrings(Collections
85 .singleton(paths[expIdx])));
86
87 assertTrue("found " + paths[expIdx], tw.next());
88 final DirCacheIterator c = tw.getTree(0, DirCacheIterator.class);
89 assertNotNull(c);
90 assertEquals(expIdx, c.ptr);
91 assertSame(ents[expIdx], c.getDirCacheEntry());
92 assertEquals(paths[expIdx], tw.getPathString());
93 assertEquals(mode.getBits(), tw.getRawMode(0));
94 assertSame(mode, tw.getFileMode(0));
95 b.add(c.getDirCacheEntry());
96
97 assertFalse("no more entries", tw.next());
98
99 b.finish();
100 assertEquals(ents.length, dc.getEntryCount());
101 for (int i = 0; i < ents.length; i++)
102 assertSame(ents[i], dc.getEntry(i));
103 }
104 }