1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.revwalk;
12
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNull;
15
16 import org.eclipse.jgit.revwalk.filter.OrRevFilter;
17 import org.eclipse.jgit.revwalk.filter.RevFilter;
18 import org.eclipse.jgit.revwalk.filter.SkipRevFilter;
19 import org.eclipse.jgit.treewalk.filter.TreeFilter;
20 import org.junit.Test;
21
22 public class TreeRevFilterTest extends RevWalkTestCase {
23 private RevFilter treeRevFilter() {
24 return new TreeRevFilter(rw, TreeFilter.ANY_DIFF);
25 }
26
27 @Test
28 public void testStringOfPearls_FilePath1()
29 throws Exception {
30 RevCommit a = commit(tree(file("d/f", blob("a"))));
31 RevCommit b = commit(tree(file("d/f", blob("a"))), a);
32 RevCommit c = commit(tree(file("d/f", blob("b"))), b);
33 rw.setRevFilter(treeRevFilter());
34 markStart(c);
35
36 assertCommit(c, rw.next());
37 assertEquals(1, c.getParentCount());
38 assertCommit(b, c.getParent(0));
39
40 assertCommit(a, rw.next());
41 assertEquals(0, a.getParentCount());
42 assertNull(rw.next());
43 }
44
45 @Test
46 public void testStringOfPearls_FilePath2() throws Exception {
47 RevCommit a = commit(tree(file("d/f", blob("a"))));
48 RevCommit b = commit(tree(file("d/f", blob("a"))), a);
49 RevCommit c = commit(tree(file("d/f", blob("b"))), b);
50 RevCommit d = commit(tree(file("d/f", blob("b"))), c);
51 rw.setRevFilter(treeRevFilter());
52 markStart(d);
53
54
55 assertCommit(c, rw.next());
56 assertEquals(1, c.getParentCount());
57 assertCommit(b, c.getParent(0));
58
59
60 assertCommit(a, rw.next());
61 assertEquals(0, a.getParentCount());
62 assertNull(rw.next());
63 }
64
65 @Test
66 public void testStringOfPearls_DirPath2() throws Exception {
67 RevCommit a = commit(tree(file("d/f", blob("a"))));
68 RevCommit b = commit(tree(file("d/f", blob("a"))), a);
69 RevCommit c = commit(tree(file("d/f", blob("b"))), b);
70 RevCommit d = commit(tree(file("d/f", blob("b"))), c);
71 rw.setRevFilter(treeRevFilter());
72 markStart(d);
73
74
75 assertCommit(c, rw.next());
76 assertEquals(1, c.getParentCount());
77 assertCommit(b, c.getParent(0));
78
79
80 assertCommit(a, rw.next());
81 assertEquals(0, a.getParentCount());
82 assertNull(rw.next());
83 }
84
85 @Test
86 public void testStringOfPearls_FilePath3() throws Exception {
87 RevCommit a = commit(tree(file("d/f", blob("a"))));
88 RevCommit b = commit(tree(file("d/f", blob("a"))), a);
89 RevCommit c = commit(tree(file("d/f", blob("b"))), b);
90 RevCommit d = commit(tree(file("d/f", blob("b"))), c);
91 RevCommit e = commit(tree(file("d/f", blob("b"))), d);
92 RevCommit f = commit(tree(file("d/f", blob("b"))), e);
93 RevCommit g = commit(tree(file("d/f", blob("b"))), f);
94 RevCommit h = commit(tree(file("d/f", blob("b"))), g);
95 RevCommit i = commit(tree(file("d/f", blob("c"))), h);
96 rw.setRevFilter(treeRevFilter());
97 markStart(i);
98
99 assertCommit(i, rw.next());
100 assertEquals(1, i.getParentCount());
101 assertCommit(h, i.getParent(0));
102
103
104 assertCommit(c, rw.next());
105 assertEquals(1, c.getParentCount());
106 assertCommit(b, c.getParent(0));
107
108
109 assertCommit(a, rw.next());
110 assertEquals(0, a.getParentCount());
111 assertNull(rw.next());
112 }
113
114 @Test
115 public void testPathFilterOrOtherFilter() throws Exception {
116 RevFilter pathFilter = treeRevFilter();
117 RevFilter skipFilter = SkipRevFilter.create(1);
118 RevFilter orFilter = OrRevFilter.create(skipFilter, pathFilter);
119
120 RevCommit a = parseBody(commit(5, tree(file("d/f", blob("a")))));
121 RevCommit b = parseBody(commit(5, tree(file("d/f", blob("a"))), a));
122 RevCommit c = parseBody(commit(5, tree(file("d/f", blob("b"))), b));
123
124
125 rw.setRevFilter(pathFilter);
126 markStart(c);
127 assertCommit(c, rw.next());
128 assertCommit(a, rw.next());
129
130
131 rw.reset();
132 rw.setRevFilter(skipFilter);
133 markStart(c);
134 assertCommit(b, rw.next());
135 assertCommit(a, rw.next());
136
137
138 rw.reset();
139 rw.setRevFilter(orFilter);
140 markStart(c);
141 assertCommit(c, rw.next());
142 assertCommit(b, rw.next());
143 assertCommit(a, rw.next());
144 }
145 }