ObjectDirectory: Factor a method to close open pack handles

Change-Id: I9490c4583fdf801de9c0bb09595ebb8fb4926988
This commit is contained in:
Dave Borowitz 2017-11-01 10:42:46 -04:00
parent 5b5c3a2e1d
commit 5ce1cc3d43
2 changed files with 16 additions and 10 deletions

View File

@ -1173,16 +1173,7 @@ public int compare(PackExt o1, PackExt o2) {
// 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);

View File

@ -969,6 +969,21 @@ private Set<String> listPackDirectory() {
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) {