From 7049de2263f6f54055466c9d9eecd1ab7f4aee69 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 22 Dec 2008 16:27:17 -0800 Subject: [PATCH] Don't open a PackFile multiple times on scanForPacks If we already have a given PackFile open in this repository then we should reuse the existing PackFile handle. Signed-off-by: Shawn O. Pearce Signed-off-by: Robin Rosenberg --- org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java | 5 +++++ org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java | 8 +++++++- org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java | 7 ++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java index ca5681bc..fc1b6ea9 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackFile.java @@ -94,6 +94,11 @@ public class PackFile implements Iterable { return reader(curs, ofs); } + /** @return the File object which locates this pack on disk. */ + public File getPackFile() { + return pack.getFile(); + } + /** * Determine if an object is contained within the pack file. *

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java index 89ad991d..8f6e96ed 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java @@ -825,6 +825,7 @@ public class Repository { */ public void scanForPacks() { final ArrayList p = new ArrayList(); + p.addAll(Arrays.asList(packs())); for (final File d : objectsDirs()) scanForPacks(new File(d, "pack"), p); final PackFile[] arr = new PackFile[p.size()]; @@ -843,7 +844,7 @@ public class Repository { } }); if (idxList != null) { - for (final String indexName : idxList) { + SCAN: for (final String indexName : idxList) { final String n = indexName.substring(0, indexName.length() - 4); final File idxFile = new File(packDir, n + ".idx"); final File packFile = new File(packDir, n + ".pack"); @@ -856,6 +857,11 @@ public class Repository { continue; } + for (final PackFile p : packList) { + if (packFile.equals(p.getPackFile())) + continue SCAN; + } + try { packList.add(new PackFile(this, idxFile, packFile)); } catch (IOException ioe) { diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java index 454f98b8..f640c425 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java @@ -101,13 +101,18 @@ public class WindowedFile { return length; } + /** @return the absolute file object this file reads from. */ + public File getFile() { + return fPath.getAbsoluteFile(); + } + /** * Get the path name of this file. * * @return the absolute path name of the file. */ public String getName() { - return fPath.getAbsolutePath(); + return getFile().getPath(); } /** -- 2.11.4.GIT