Browse Source

Optimize ref scanning

We can avoid one stat call by trying to perform a directory
listing without checking if the reference File is a directory.
Attempting a directory listing is defined to return. The other
case for null returns from list is when an I/O error occcurs.

Both cases are now intepreted as a possible plain reference. I/O
errors when reading plain references will be handled (ignored)
in scanRef().

Change-Id: I9906ed8c42eab4d6029c781aab87b3b07c1a1d2c
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
stable-0.8
Robin Rosenberg 15 years ago
parent
commit
6da38b9474
  1. 11
      org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java

11
org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java

@ -331,18 +331,19 @@ public class RefDirectory extends RefDatabase {
} }
} }
private void scanTree(String prefix, File dir) { private boolean scanTree(String prefix, File dir) {
final String[] entries = dir.list(LockFile.FILTER); final String[] entries = dir.list(LockFile.FILTER);
if (entries != null && 0 < entries.length) { if (entries == null) // not a directory or an I/O error
return false;
if (0 < entries.length) {
Arrays.sort(entries); Arrays.sort(entries);
for (String name : entries) { for (String name : entries) {
File e = new File(dir, name); File e = new File(dir, name);
if (e.isDirectory()) if (!scanTree(prefix + name + '/', e))
scanTree(prefix + name + '/', e);
else
scanOne(prefix + name); scanOne(prefix + name);
} }
} }
return true;
} }
private void scanOne(String name) { private void scanOne(String name) {

Loading…
Cancel
Save