1
2
3
4
5
6
7
8
9
10 package org.eclipse.jgit.internal.revwalk;
11
12 import org.eclipse.jgit.lib.BitmapIndex.Bitmap;
13 import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
14 import org.eclipse.jgit.lib.Constants;
15 import org.eclipse.jgit.lib.AnyObjectId;
16 import org.eclipse.jgit.revwalk.filter.RevFilter;
17 import org.eclipse.jgit.revwalk.RevWalk;
18 import org.eclipse.jgit.revwalk.RevCommit;
19 import org.eclipse.jgit.revwalk.RevFlag;
20
21
22
23
24
25
26
27
28
29
30 public class AddToBitmapWithCacheFilter extends RevFilter {
31 private final AnyObjectId cachedCommit;
32
33 private final Bitmap cachedBitmap;
34
35 private final BitmapBuilder bitmap;
36
37
38
39
40
41
42
43
44
45
46
47
48 public AddToBitmapWithCacheFilter(AnyObjectId cachedCommit,
49 Bitmap cachedBitmap,
50 BitmapBuilder bitmap) {
51 this.cachedCommit = cachedCommit;
52 this.cachedBitmap = cachedBitmap;
53 this.bitmap = bitmap;
54 }
55
56
57 @Override
58 public final boolean include(RevWalk rw, RevCommit c) {
59 Bitmap visitedBitmap;
60
61 if (bitmap.contains(c)) {
62
63 } else if ((visitedBitmap = bitmap.getBitmapIndex()
64 .getBitmap(c)) != null) {
65 bitmap.or(visitedBitmap);
66 } else if (cachedCommit.equals(c)) {
67 bitmap.or(cachedBitmap);
68 } else {
69 bitmap.addObject(c, Constants.OBJ_COMMIT);
70 return true;
71 }
72
73 for (RevCommit p : c.getParents()) {
74 p.add(RevFlag.SEEN);
75 }
76 return false;
77 }
78
79
80 @Override
81 public final RevFilter clone() {
82 throw new UnsupportedOperationException();
83 }
84
85
86 @Override
87 public final boolean requiresCommitBody() {
88 return false;
89 }
90 }
91