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
45 package org.eclipse.jgit.treewalk;
46
47 import static org.junit.Assert.assertEquals;
48
49 import org.eclipse.jgit.dircache.DirCache;
50 import org.eclipse.jgit.dircache.DirCacheBuilder;
51 import org.eclipse.jgit.dircache.DirCacheEntry;
52 import org.eclipse.jgit.junit.RepositoryTestCase;
53 import org.eclipse.jgit.lib.FileMode;
54 import org.eclipse.jgit.lib.ObjectId;
55 import org.eclipse.jgit.lib.ObjectInserter;
56 import org.eclipse.jgit.lib.ObjectReader;
57 import org.junit.Test;
58
59 public class ForPathTest extends RepositoryTestCase {
60
61 private static final FileMode SYMLINK = FileMode.SYMLINK;
62
63 private static final FileMode REGULAR_FILE = FileMode.REGULAR_FILE;
64
65 private static final FileMode EXECUTABLE_FILE = FileMode.EXECUTABLE_FILE;
66
67 @Test
68 public void testFindObjects() throws Exception {
69 final DirCache tree0 = DirCache.newInCore();
70 final DirCacheBuilder b0 = tree0.builder();
71 try (ObjectReader or = db.newObjectReader();
72 ObjectInserter oi = db.newObjectInserter()) {
73
74 DirCacheEntry aDotB = createEntry("a.b", EXECUTABLE_FILE);
75 b0.add(aDotB);
76 DirCacheEntry aSlashB = createEntry("a/b", REGULAR_FILE);
77 b0.add(aSlashB);
78 DirCacheEntry aSlashCSlashD = createEntry("a/c/d", REGULAR_FILE);
79 b0.add(aSlashCSlashD);
80 DirCacheEntry aZeroB = createEntry("a0b", SYMLINK);
81 b0.add(aZeroB);
82 b0.finish();
83 assertEquals(4, tree0.getEntryCount());
84 ObjectId tree = tree0.writeTree(oi);
85
86
87 ObjectId a = null;
88 ObjectId aSlashC = null;
89 try (TreeWalk tw = new TreeWalk(or)) {
90 tw.addTree(tree);
91 while (tw.next()) {
92 if (tw.getPathString().equals("a")) {
93 a = tw.getObjectId(0);
94 tw.enterSubtree();
95 while (tw.next()) {
96 if (tw.getPathString().equals("a/c")) {
97 aSlashC = tw.getObjectId(0);
98 break;
99 }
100 }
101 break;
102 }
103 }
104 }
105
106 assertEquals(a, TreeWalk.forPath(or, "a", tree).getObjectId(0));
107 assertEquals(a, TreeWalk.forPath(or, "a/", tree).getObjectId(0));
108 assertEquals(null, TreeWalk.forPath(or, "/a", tree));
109 assertEquals(null, TreeWalk.forPath(or, "/a/", tree));
110
111 assertEquals(aDotB.getObjectId(),
112 TreeWalk.forPath(or, "a.b", tree).getObjectId(0));
113 assertEquals(null, TreeWalk.forPath(or, "/a.b", tree));
114 assertEquals(null, TreeWalk.forPath(or, "/a.b/", tree));
115 assertEquals(aDotB.getObjectId(),
116 TreeWalk.forPath(or, "a.b/", tree).getObjectId(0));
117
118 assertEquals(aZeroB.getObjectId(),
119 TreeWalk.forPath(or, "a0b", tree).getObjectId(0));
120
121 assertEquals(aSlashB.getObjectId(),
122 TreeWalk.forPath(or, "a/b", tree).getObjectId(0));
123 assertEquals(aSlashB.getObjectId(),
124 TreeWalk.forPath(or, "b", a).getObjectId(0));
125
126 assertEquals(aSlashC,
127 TreeWalk.forPath(or, "a/c", tree).getObjectId(0));
128 assertEquals(aSlashC, TreeWalk.forPath(or, "c", a).getObjectId(0));
129
130 assertEquals(aSlashCSlashD.getObjectId(),
131 TreeWalk.forPath(or, "a/c/d", tree).getObjectId(0));
132 assertEquals(aSlashCSlashD.getObjectId(),
133 TreeWalk.forPath(or, "c/d", a).getObjectId(0));
134 }
135 }
136
137 }