1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.treewalk.filter;
12
13 import org.eclipse.jgit.dircache.DirCacheEntry;
14 import org.eclipse.jgit.dircache.DirCacheIterator;
15 import org.eclipse.jgit.treewalk.TreeWalk;
16
17
18
19
20
21
22
23 public final class InterIndexDiffFilter extends TreeFilter {
24 private static final int baseTree = 0;
25
26
27
28
29 public static final TreeFilter INSTANCE = new InterIndexDiffFilter();
30
31
32 @Override
33 public boolean include(TreeWalk walker) {
34 final int n = walker.getTreeCount();
35 if (n == 1)
36 return true;
37
38 final int m = walker.getRawMode(baseTree);
39 for (int i = 1; i < n; i++) {
40 DirCacheIterator baseDirCache = walker.getTree(baseTree,
41 DirCacheIterator.class);
42 DirCacheIterator newDirCache = walker.getTree(i,
43 DirCacheIterator.class);
44 if (baseDirCache != null && newDirCache != null) {
45 DirCacheEntry baseDci = baseDirCache.getDirCacheEntry();
46 DirCacheEntry newDci = newDirCache.getDirCacheEntry();
47 if (baseDci != null && newDci != null) {
48 if (baseDci.isAssumeValid() != newDci.isAssumeValid())
49 return true;
50 if (baseDci.isAssumeValid())
51 return false;
52 }
53 }
54 if (walker.getRawMode(i) != m || !walker.idEqual(i, baseTree))
55 return true;
56 }
57 return false;
58 }
59
60
61 @Override
62 public boolean shouldBeRecursive() {
63 return false;
64 }
65
66
67 @Override
68 public TreeFilter clone() {
69 return this;
70 }
71
72
73 @Override
74 public String toString() {
75 return "INTERINDEX_DIFF";
76 }
77 }