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.revwalk;
45
46 import static java.util.Arrays.asList;
47 import static org.junit.Assert.assertEquals;
48
49 import java.util.Collection;
50 import java.util.List;
51
52 import org.eclipse.jgit.api.Git;
53 import org.eclipse.jgit.lib.Ref;
54 import org.eclipse.jgit.lib.RefComparator;
55 import org.junit.Test;
56
57 public class RevWalkUtilsReachableTest extends RevWalkTestCase {
58
59 @Test
60 public void oneCommit() throws Exception {
61 RevCommit a = commit();
62 Ref branchA = branch("a", a);
63
64 assertContains(a, asList(branchA));
65 }
66
67 @Test
68 public void twoCommits() throws Exception {
69 RevCommit a = commit();
70 RevCommit b = commit(a);
71 branch("a", a);
72 Ref branchB = branch("b", b);
73
74 assertContains(b, asList(branchB));
75 }
76
77 @Test
78 public void multipleBranches() throws Exception {
79 RevCommit a = commit();
80 RevCommit b = commit(a);
81 branch("a", a);
82 Ref branchB = branch("b", b);
83 Ref branchB2 = branch("b2", b);
84
85 assertContains(b, asList(branchB, branchB2));
86 }
87
88 @Test
89 public void withMerge() throws Exception {
90 RevCommit a = commit();
91 RevCommit b = commit();
92 RevCommit c = commit(a, b);
93 Ref branchA = branch("a", a);
94 Ref branchB = branch("b", b);
95 Ref branchC = branch("c", c);
96
97 assertContains(a, asList(branchA, branchC));
98 assertContains(b, asList(branchB, branchC));
99 }
100
101 @Test
102 public void withCommitLoadedByDifferentRevWalk() throws Exception {
103 RevCommit a = commit();
104 Ref branchA = branch("a", a);
105
106 try (RevWalk walk = new RevWalk(db)) {
107 RevCommit parsedCommit = walk.parseCommit(a.getId());
108 assertContains(parsedCommit, asList(branchA));
109 }
110 }
111
112 private Ref branch(String name, RevCommit dst) throws Exception {
113 return Git.wrap(db).branchCreate().setName(name)
114 .setStartPoint(dst.name()).call();
115 }
116
117 private void assertContains(RevCommit commit, Collection<Ref> refsThatShouldContainCommit) throws Exception {
118 Collection<Ref> allRefs = db.getRefDatabase().getRefs();
119 Collection<Ref> sortedRefs = RefComparator.sort(allRefs);
120 List<Ref> actual = RevWalkUtils.findBranchesReachableFrom(commit,
121 rw, sortedRefs);
122 assertEquals(refsThatShouldContainCommit, actual);
123 }
124
125 }