]> source.dussan.org Git - jgit.git/commitdiff
Fix IOException occurring during gc 62/171362/2
authorNail Samatov <sanail@yandex.ru>
Tue, 27 Oct 2020 13:56:24 +0000 (16:56 +0300)
committerMatthias Sohn <matthias.sohn@sap.com>
Thu, 5 Nov 2020 00:31:14 +0000 (01:31 +0100)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcBasicPackingTest.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java

index e8d1cd3d7e927a49820f827eab8c47dc395f4757..d007dd4511234229cbd52f2d6cfa2804d0d961c8 100644 (file)
@@ -79,6 +79,29 @@ public class GcBasicPackingTest extends GcTestCase {
                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 {
index e4324c1a89bc536d4592df3e10950f136c8f0f44..741d86e67fb6bd6f60be4b56ae141ebe7923daa4 100644 (file)
@@ -1166,6 +1166,7 @@ public class GC {
                        // 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('.'));