Skip to content

Commit 3f85d3b

Browse files
committed
Merge branch 'stable-5.2' into stable-5.3
* stable-5.2: Prepare 5.1.15-SNAPSHOT builds JGit v5.1.14.202011251942-r GC#deleteOrphans: log warning for deleted orphaned files GC#deleteOrphans: handle failure to list files in pack directory Ensure that GC#deleteOrphans respects pack lock Update API warning filters Remove unused imports Change-Id: Id9386846a202b5ae98dd602744963f8897ddaa8c
2 parents 003e4cf + 65598b9 commit 3f85d3b

File tree

7 files changed

+37
-11
lines changed

7 files changed

+37
-11
lines changed

org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollectorTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.concurrent.TimeUnit;
2020

2121
import org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource;
22-
import org.eclipse.jgit.internal.storage.dfs.DfsRefDatabase;
2322
import org.eclipse.jgit.internal.storage.reftable.RefCursor;
2423
import org.eclipse.jgit.internal.storage.reftable.ReftableConfig;
2524
import org.eclipse.jgit.internal.storage.reftable.ReftableReader;

org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcOrphanFilesTest.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,15 @@ public class GcOrphanFilesTest extends GcTestCase {
5757

5858
private final static String BITMAP_File_1 = PACK + "-1.bitmap";
5959

60-
private final static String IDX_File_2 = PACK + "-2.idx";
60+
private static final String BITMAP_File_2 = PACK + "-2.bitmap";
61+
62+
private static final String IDX_File_2 = PACK + "-2.idx";
6163

6264
private final static String IDX_File_malformed = PACK + "-1234idx";
6365

64-
private final static String PACK_File_2 = PACK + "-2.pack";
66+
private static final String KEEP_File_2 = PACK + "-2.keep";
67+
68+
private static final String PACK_File_2 = PACK + "-2.pack";
6569

6670
private final static String PACK_File_3 = PACK + "-3.pack";
6771

@@ -105,6 +109,22 @@ public void malformedIdxNotDeleted() throws Exception {
105109
assertTrue(new File(packDir, IDX_File_malformed).exists());
106110
}
107111

112+
@Test
113+
public void keepPreventsDeletionOfIndexFilesForMissingPackFile()
114+
throws Exception {
115+
createFileInPackFolder(BITMAP_File_1);
116+
createFileInPackFolder(IDX_File_2);
117+
createFileInPackFolder(BITMAP_File_2);
118+
createFileInPackFolder(KEEP_File_2);
119+
createFileInPackFolder(PACK_File_3);
120+
gc.gc();
121+
assertFalse(new File(packDir, BITMAP_File_1).exists());
122+
assertTrue(new File(packDir, BITMAP_File_2).exists());
123+
assertTrue(new File(packDir, IDX_File_2).exists());
124+
assertTrue(new File(packDir, KEEP_File_2).exists());
125+
assertTrue(new File(packDir, PACK_File_3).exists());
126+
}
127+
108128
private void createFileInPackFolder(String fileName) throws IOException {
109129
if (!packDir.exists() || !packDir.isDirectory()) {
110130
assertTrue(packDir.mkdirs());

org.eclipse.jgit.test/tst/org/eclipse/jgit/util/StatsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import static org.junit.Assert.assertEquals;
4646
import static org.junit.Assert.assertTrue;
4747

48-
import org.eclipse.jgit.util.Stats;
4948
import org.junit.Test;
5049

5150
public class StatsTest {

org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ deepenNotWithDeepen=Cannot combine deepen with deepen-not
204204
deepenSinceWithDeepen=Cannot combine deepen with deepen-since
205205
deleteBranchUnexpectedResult=Delete branch returned unexpected result {0}
206206
deleteFileFailed=Could not delete file {0}
207+
deletedOrphanInPackDir=Deleted orphaned file {}
207208
deleteRequiresZeroNewId=Delete requires new ID to be zero
208209
deleteTagUnexpectedResult=Delete tag returned unexpected result {0}
209210
deletingNotSupported=Deleting {0} not supported.

org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ public static JGitText get() {
265265
/***/ public String deepenSinceWithDeepen;
266266
/***/ public String deleteBranchUnexpectedResult;
267267
/***/ public String deleteFileFailed;
268+
/***/ public String deletedOrphanInPackDir;
268269
/***/ public String deleteRequiresZeroNewId;
269270
/***/ public String deleteTagUnexpectedResult;
270271
/***/ public String deletingNotSupported;

org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ public class GC {
148148

149149
private static final String INDEX_EXT = "." + PackExt.INDEX.getExtension(); //$NON-NLS-1$
150150

151+
private static final String KEEP_EXT = "." + PackExt.KEEP.getExtension(); //$NON-NLS-1$
152+
151153
private static final int DEFAULT_AUTOPACKLIMIT = 50;
152154

153155
private static final int DEFAULT_AUTOLIMIT = 6700;
@@ -978,24 +980,30 @@ private void deleteOrphans() {
978980
fileNames = files.map(path -> path.getFileName().toString())
979981
.filter(name -> (name.endsWith(PACK_EXT)
980982
|| name.endsWith(BITMAP_EXT)
981-
|| name.endsWith(INDEX_EXT)))
983+
|| name.endsWith(INDEX_EXT)
984+
|| name.endsWith(KEEP_EXT)))
985+
// sort files with same base name in the order:
986+
// .pack, .keep, .index, .bitmap to avoid look ahead
982987
.sorted(Collections.reverseOrder())
983988
.collect(Collectors.toList());
984-
} catch (IOException e1) {
985-
// ignore
989+
} catch (IOException e) {
990+
LOG.error(e.getMessage(), e);
991+
return;
986992
}
987993
if (fileNames == null) {
988994
return;
989995
}
990996

991997
String base = null;
992998
for (String n : fileNames) {
993-
if (n.endsWith(PACK_EXT)) {
999+
if (n.endsWith(PACK_EXT) || n.endsWith(KEEP_EXT)) {
9941000
base = n.substring(0, n.lastIndexOf('.'));
9951001
} else {
9961002
if (base == null || !n.startsWith(base)) {
9971003
try {
998-
Files.delete(packDir.resolve(n));
1004+
Path delete = packDir.resolve(n);
1005+
Files.delete(delete);
1006+
LOG.warn(JGitText.get().deletedOrphanInPackDir, delete);
9991007
} catch (IOException e) {
10001008
LOG.error(e.getMessage(), e);
10011009
}

org.eclipse.jgit/src/org/eclipse/jgit/lib/GitmoduleEntry.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@
4242
*/
4343
package org.eclipse.jgit.lib;
4444

45-
import org.eclipse.jgit.lib.AnyObjectId;
46-
4745
/**
4846
* A .gitmodules file found in the pack. Store the blob of the file itself (e.g.
4947
* to access its contents) and the tree where it was found (e.g. to check if it

0 commit comments

Comments
 (0)