Fix IOException occurring during gc

Fix IOException occurring when calling
GC on a repository with absent objects/pack folder.

Change-Id: I5be1333a0726f4d7491afd25ddac85451686c30a
Signed-off-by: Nail Samatov <sanail@yandex.ru>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Nail Samatov 2020-10-27 16:56:24 +03:00 committed by Matthias Sohn
parent d69fb4d4ac
commit d76088bca6
2 changed files with 24 additions and 0 deletions

View File

@ -79,6 +79,29 @@ public void testPack2Commits(boolean aggressive) throws Exception {
assertEquals(2, stats.numberOfBitmaps);
}
@Theory
public void testPack2Commits_noPackFolder(boolean aggressive) throws Exception {
File packDir = repo.getObjectDatabase().getPackDirectory();
assertTrue(packDir.delete());
BranchBuilder bb = tr.branch("refs/heads/master");
bb.commit().add("A", "A").add("B", "B").create();
bb.commit().add("A", "A2").add("B", "B2").create();
stats = gc.getStatistics();
assertEquals(8, stats.numberOfLooseObjects);
assertEquals(0, stats.numberOfPackedObjects);
configureGc(gc, aggressive);
gc.gc();
stats = gc.getStatistics();
assertEquals(0, stats.numberOfLooseObjects);
assertEquals(8, stats.numberOfPackedObjects);
assertEquals(1, stats.numberOfPackFiles);
assertEquals(2, stats.numberOfBitmaps);
assertTrue(packDir.exists());
}
@Theory
public void testPackAllObjectsInOnePack(boolean aggressive)
throws Exception {

View File

@ -1166,6 +1166,7 @@ private PackFile writePack(@NonNull Set<? extends ObjectId> want,
// create temporary files
String id = pw.computeName().getName();
File packdir = repo.getObjectDatabase().getPackDirectory();
packdir.mkdirs();
tmpPack = File.createTempFile("gc_", ".pack_tmp", packdir); //$NON-NLS-1$ //$NON-NLS-2$
final String tmpBase = tmpPack.getName()
.substring(0, tmpPack.getName().lastIndexOf('.'));