From 48fb404a3f155805a67bdc18c7ca22d18df03be2 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 18 Mar 2011 08:21:39 -0700 Subject: [PATCH] PackFile: Cache the packName string Instead of computing this on every request, compute it once and hold onto the result. This improves performance for LocalCachedPack which does a lot of tests against the pack name string. Change-Id: I3803745e3a5dda7b5f0faf39aae9423e2c777e7f Signed-off-by: Shawn O. Pearce --- .../org/eclipse/jgit/storage/file/PackFile.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java index 2bf8160e2..959bf4334 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java @@ -96,6 +96,8 @@ public class PackFile implements Iterable { private final File packFile; + private volatile String packName; + final int hash; private RandomAccessFile fd; @@ -177,11 +179,15 @@ public class PackFile implements Iterable { /** @return name extracted from {@code pack-*.pack} pattern. */ public String getPackName() { - String name = getPackFile().getName(); - if (name.startsWith("pack-")) - name = name.substring("pack-".length()); - if (name.endsWith(".pack")) - name = name.substring(0, name.length() - ".pack".length()); + String name = packName; + if (name == null) { + name = getPackFile().getName(); + if (name.startsWith("pack-")) + name = name.substring("pack-".length()); + if (name.endsWith(".pack")) + name = name.substring(0, name.length() - ".pack".length()); + packName = name; + } return name; }