blame: Micro optimize blob lookup in tree
Avoid converting the raw mode to FileMode. This is an expensive if-else-if sort of test to just check if the thing is a blob. Instead test the bit mask directly, which is at least a few instructions shorter. The TreeWalk is already recursive and will auto-dive into any subtrees found. isSubtree check is unnecessary, as is the loop, as only one result will ever be returned by next(). Change-Id: I9fb25229ebed857469427bfbdf74aedebfddfac8
This commit is contained in:
parent
5a4e34009b
commit
52500d3264
|
@ -44,6 +44,7 @@
|
|||
package org.eclipse.jgit.blame;
|
||||
|
||||
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
|
||||
import static org.eclipse.jgit.lib.FileMode.TYPE_FILE;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
|
@ -942,20 +943,17 @@ public void release() {
|
|||
private boolean find(RevCommit commit, PathFilter path) throws IOException {
|
||||
treeWalk.setFilter(path);
|
||||
treeWalk.reset(commit.getTree());
|
||||
while (treeWalk.next()) {
|
||||
if (path.isDone(treeWalk)) {
|
||||
if (treeWalk.getFileMode(0).getObjectType() != OBJ_BLOB)
|
||||
return false;
|
||||
treeWalk.getObjectId(idBuf, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (treeWalk.isSubtree())
|
||||
treeWalk.enterSubtree();
|
||||
if (treeWalk.next() && isFile(treeWalk.getRawMode(0))) {
|
||||
treeWalk.getObjectId(idBuf, 0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final boolean isFile(int rawMode) {
|
||||
return (rawMode & TYPE_FILE) == TYPE_FILE;
|
||||
}
|
||||
|
||||
private DiffEntry findRename(RevCommit parent, RevCommit commit,
|
||||
PathFilter path) throws IOException {
|
||||
if (renameDetector == null)
|
||||
|
|
Loading…
Reference in New Issue