This way we avoid reading refs if the timestamp has not changed. This reduced the number of opens for reading symbolic refs like HEAD. Signed-off-by: Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> --- .../src/org/spearce/jgit/lib/RefDatabase.java | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java index 494aecb..4cf6e08 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java @@ -69,6 +69,7 @@ private Map<String, Ref> looseRefs; private Map<String, Long> looseRefsMTime; + private Map<String, String> looseSymRefs; private final File packedRefsFile; @@ -96,6 +97,7 @@ void clearCache() { looseRefs = new HashMap<String, Ref>(); looseRefsMTime = new HashMap<String, Long>(); packedRefs = new HashMap<String, Ref>(); + looseSymRefs = new HashMap<String, String>(); packedRefsLastModified = 0; packedRefsLength = 0; } @@ -348,15 +350,26 @@ private Ref readRefBasic(final String origName, final String name, final int dep return ref; } - final String line; + String line = null; try { - line = readLine(loose); + Long cachedlastModified = looseRefsMTime.get(name); + if (cachedlastModified != null && cachedlastModified == mtime) { + line = looseSymRefs.get(name); + } + if (line == null) { + line = readLine(loose); + looseRefsMTime.put(name, mtime); + looseSymRefs.put(name, line); + } } catch (FileNotFoundException notLoose) { return packedRefs.get(name); } - if (line == null || line.length() == 0) + if (line == null || line.length() == 0) { + looseRefs.remove(origName); + looseRefsMTime.remove(origName); return new Ref(Ref.Storage.LOOSE, origName, name, null); + } if (line.startsWith("ref: ")) { if (depth >= 5) { -- 1.6.0.3.640.g6331a -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html