List of usage examples for org.eclipse.jgit.treewalk.filter TreeFilterMarker getMarks
public int getMarks(TreeWalk walk) throws MissingObjectException, IncorrectObjectTypeException, IOException
From source file:org.flowerplatform.web.git.history.internal.FileDiff.java
License:Open Source License
/** * Computer file diffs for specified tree walk and commit * * @param walk//w w w .ja v a 2 s . co m * @param commit * @param markTreeFilters optional filters for marking entries, see {@link #isMarked(int)} * @return non-null but possibly empty array of file diffs * @throws MissingObjectException * @throws IncorrectObjectTypeException * @throws CorruptObjectException * @throws IOException */ public static FileDiff[] compute(final TreeWalk walk, final RevCommit commit, final TreeFilter... markTreeFilters) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { final ArrayList<FileDiff> r = new ArrayList<FileDiff>(); if (commit.getParentCount() > 0) walk.reset(trees(commit)); else { walk.reset(); walk.addTree(new EmptyTreeIterator()); walk.addTree(commit.getTree()); } if (walk.getTreeCount() <= 2) { List<DiffEntry> entries = DiffEntry.scan(walk, false, markTreeFilters); for (DiffEntry entry : entries) { final FileDiff d = new FileDiff(commit, entry); r.add(d); } } else { // DiffEntry does not support walks with more than two trees final int nTree = walk.getTreeCount(); final int myTree = nTree - 1; TreeFilterMarker treeFilterMarker = new TreeFilterMarker(markTreeFilters); while (walk.next()) { if (matchAnyParent(walk, myTree)) continue; int treeFilterMarks = treeFilterMarker.getMarks(walk); final FileDiffForMerges d = new FileDiffForMerges(commit, treeFilterMarks); d.path = walk.getPathString(); int m0 = 0; for (int i = 0; i < myTree; i++) m0 |= walk.getRawMode(i); final int m1 = walk.getRawMode(myTree); d.change = ChangeType.MODIFY; if (m0 == 0 && m1 != 0) d.change = ChangeType.ADD; else if (m0 != 0 && m1 == 0) d.change = ChangeType.DELETE; else if (m0 != m1 && walk.idEqual(0, myTree)) d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged d.blobs = new ObjectId[nTree]; d.modes = new FileMode[nTree]; for (int i = 0; i < nTree; i++) { d.blobs[i] = walk.getObjectId(i); d.modes[i] = walk.getFileMode(i); } r.add(d); } } final FileDiff[] tmp = new FileDiff[r.size()]; r.toArray(tmp); return tmp; }