1
2
3
4
5
6
7
8
9
10
11
12 package org.eclipse.jgit.treewalk;
13
14 import static org.junit.Assert.assertEquals;
15
16 import org.eclipse.jgit.dircache.DirCache;
17 import org.eclipse.jgit.dircache.DirCacheBuilder;
18 import org.eclipse.jgit.dircache.DirCacheEntry;
19 import org.eclipse.jgit.junit.RepositoryTestCase;
20 import org.eclipse.jgit.lib.FileMode;
21 import org.eclipse.jgit.lib.ObjectId;
22 import org.eclipse.jgit.lib.ObjectInserter;
23 import org.eclipse.jgit.lib.ObjectReader;
24 import org.junit.Test;
25
26 public class ForPathTest extends RepositoryTestCase {
27
28 private static final FileMode SYMLINK = FileMode.SYMLINK;
29
30 private static final FileMode REGULAR_FILE = FileMode.REGULAR_FILE;
31
32 private static final FileMode EXECUTABLE_FILE = FileMode.EXECUTABLE_FILE;
33
34 @Test
35 public void testFindObjects() throws Exception {
36 final DirCache tree0 = DirCache.newInCore();
37 final DirCacheBuilder b0 = tree0.builder();
38 try (ObjectReader or = db.newObjectReader();
39 ObjectInserter oi = db.newObjectInserter()) {
40
41 DirCacheEntry aDotB = createEntry("a.b", EXECUTABLE_FILE);
42 b0.add(aDotB);
43 DirCacheEntry aSlashB = createEntry("a/b", REGULAR_FILE);
44 b0.add(aSlashB);
45 DirCacheEntry aSlashCSlashD = createEntry("a/c/d", REGULAR_FILE);
46 b0.add(aSlashCSlashD);
47 DirCacheEntry aZeroB = createEntry("a0b", SYMLINK);
48 b0.add(aZeroB);
49 b0.finish();
50 assertEquals(4, tree0.getEntryCount());
51 ObjectId tree = tree0.writeTree(oi);
52
53
54 ObjectId a = null;
55 ObjectId aSlashC = null;
56 try (TreeWalk tw = new TreeWalk(or)) {
57 tw.addTree(tree);
58 while (tw.next()) {
59 if (tw.getPathString().equals("a")) {
60 a = tw.getObjectId(0);
61 tw.enterSubtree();
62 while (tw.next()) {
63 if (tw.getPathString().equals("a/c")) {
64 aSlashC = tw.getObjectId(0);
65 break;
66 }
67 }
68 break;
69 }
70 }
71 }
72
73 assertEquals(a, TreeWalk.forPath(or, "a", tree).getObjectId(0));
74 assertEquals(a, TreeWalk.forPath(or, "a/", tree).getObjectId(0));
75 assertEquals(null, TreeWalk.forPath(or, "/a", tree));
76 assertEquals(null, TreeWalk.forPath(or, "/a/", tree));
77
78 assertEquals(aDotB.getObjectId(),
79 TreeWalk.forPath(or, "a.b", tree).getObjectId(0));
80 assertEquals(null, TreeWalk.forPath(or, "/a.b", tree));
81 assertEquals(null, TreeWalk.forPath(or, "/a.b/", tree));
82 assertEquals(aDotB.getObjectId(),
83 TreeWalk.forPath(or, "a.b/", tree).getObjectId(0));
84
85 assertEquals(aZeroB.getObjectId(),
86 TreeWalk.forPath(or, "a0b", tree).getObjectId(0));
87
88 assertEquals(aSlashB.getObjectId(),
89 TreeWalk.forPath(or, "a/b", tree).getObjectId(0));
90 assertEquals(aSlashB.getObjectId(),
91 TreeWalk.forPath(or, "b", a).getObjectId(0));
92
93 assertEquals(aSlashC,
94 TreeWalk.forPath(or, "a/c", tree).getObjectId(0));
95 assertEquals(aSlashC, TreeWalk.forPath(or, "c", a).getObjectId(0));
96
97 assertEquals(aSlashCSlashD.getObjectId(),
98 TreeWalk.forPath(or, "a/c/d", tree).getObjectId(0));
99 assertEquals(aSlashCSlashD.getObjectId(),
100 TreeWalk.forPath(or, "c/d", a).getObjectId(0));
101 }
102 }
103
104 }