aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Borowitz <dborowitz@google.com>2017-11-01 10:42:46 -0400
committerDave Borowitz <dborowitz@google.com>2017-11-01 12:40:13 -0400
commit5ce1cc3d43a85acfaa2237968dd0d2a29beb07b0 (patch)
treed494614117225c8a5b1ed73e2b0f50e327829737
parent5b5c3a2e1da86819c5176766003d820c000d609e (diff)
downloadjgit-5ce1cc3d43a85acfaa2237968dd0d2a29beb07b0.tar.gz
jgit-5ce1cc3d43a85acfaa2237968dd0d2a29beb07b0.zip
ObjectDirectory: Factor a method to close open pack handles
Change-Id: I9490c4583fdf801de9c0bb09595ebb8fb4926988
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java11
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java15
2 files changed, 16 insertions, 10 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
index 8cd8ee1522..f992a33408 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
@@ -1173,16 +1173,7 @@ public class GC {
// rename the temporary files to real files
File realPack = nameFor(id, ".pack"); //$NON-NLS-1$
- // if the packfile already exists (because we are rewriting a
- // packfile for the same set of objects maybe with different
- // PackConfig) then make sure we get rid of all handles on the file.
- // Windows will not allow for rename otherwise.
- if (realPack.exists())
- for (PackFile p : repo.getObjectDatabase().getPacks())
- if (realPack.getPath().equals(p.getPackFile().getPath())) {
- p.close();
- break;
- }
+ repo.getObjectDatabase().closeAllPackHandles(realPack);
tmpPack.setReadOnly();
FileUtils.rename(tmpPack, realPack, StandardCopyOption.ATOMIC_MOVE);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index 9629e36fa5..7d351704d4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -969,6 +969,21 @@ public class ObjectDirectory extends FileObjectDatabase {
return nameSet;
}
+ void closeAllPackHandles(File packFile) {
+ // if the packfile already exists (because we are rewriting a
+ // packfile for the same set of objects maybe with different
+ // PackConfig) then make sure we get rid of all handles on the file.
+ // Windows will not allow for rename otherwise.
+ if (packFile.exists()) {
+ for (PackFile p : getPacks()) {
+ if (packFile.getPath().equals(p.getPackFile().getPath())) {
+ p.close();
+ break;
+ }
+ }
+ }
+ }
+
AlternateHandle[] myAlternates() {
AlternateHandle[] alt = alternates.get();
if (alt == null) {