Переглянути джерело

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
tags/v3.4.0.201405051725-m7
Shawn Pearce 10 роки тому
джерело
коміт
52500d3264

+ 8
- 10
org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java Переглянути файл

package org.eclipse.jgit.blame; package org.eclipse.jgit.blame;


import static org.eclipse.jgit.lib.Constants.OBJ_BLOB; import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
import static org.eclipse.jgit.lib.FileMode.TYPE_FILE;


import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
private boolean find(RevCommit commit, PathFilter path) throws IOException { private boolean find(RevCommit commit, PathFilter path) throws IOException {
treeWalk.setFilter(path); treeWalk.setFilter(path);
treeWalk.reset(commit.getTree()); 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; return false;
} }


private static final boolean isFile(int rawMode) {
return (rawMode & TYPE_FILE) == TYPE_FILE;
}

private DiffEntry findRename(RevCommit parent, RevCommit commit, private DiffEntry findRename(RevCommit parent, RevCommit commit,
PathFilter path) throws IOException { PathFilter path) throws IOException {
if (renameDetector == null) if (renameDetector == null)

Завантаження…
Відмінити
Зберегти