From 6da38b9474f943b66c6594c58510aec234742669 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg <robin.rosenberg@dewire.com> Date: Tue, 13 Apr 2010 23:00:53 +0200 Subject: [PATCH] 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> --- .../src/org/eclipse/jgit/lib/RefDirectory.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java index 90ac0bf47..faebbf67c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDirectory.java @@ -331,18 +331,19 @@ void scan(String prefix) { } } - private void scanTree(String prefix, File dir) { + private boolean scanTree(String prefix, File dir) { 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); for (String name : entries) { File e = new File(dir, name); - if (e.isDirectory()) - scanTree(prefix + name + '/', e); - else + if (!scanTree(prefix + name + '/', e)) scanOne(prefix + name); } } + return true; } private void scanOne(String name) { -- GitLab