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 (DirCacheEntry ent : ents) {
75 b.add(ent);
76 }
77 b.finish();
78 }
79
80 final int expIdx = 2;
81 final DirCacheBuilder b = dc.builder();
82 try (TreeWalk tw = new TreeWalk(db)) {
83 tw.addTree(new DirCacheBuildIterator(b));
84 tw.setRecursive(true);
85 tw.setFilter(PathFilterGroup.createFromStrings(Collections
86 .singleton(paths[expIdx])));
87
88 assertTrue("found " + paths[expIdx], tw.next());
89 final DirCacheIterator c = tw.getTree(0, DirCacheIterator.class);
90 assertNotNull(c);
91 assertEquals(expIdx, c.ptr);
92 assertSame(ents[expIdx], c.getDirCacheEntry());
93 assertEquals(paths[expIdx], tw.getPathString());
94 assertEquals(mode.getBits(), tw.getRawMode(0));
95 assertSame(mode, tw.getFileMode(0));
96 b.add(c.getDirCacheEntry());
97
98 assertFalse("no more entries", tw.next());
99 }
100
101 b.finish();
102 assertEquals(ents.length, dc.getEntryCount());
103 for (int i = 0; i < ents.length; i++)
104 assertSame(ents[i], dc.getEntry(i));
105 }
106 }