Browse Source

GC: delete empty directories after purging loose objects

In order to limit the number of directories we check for emptiness only
consider fanout directories which contained unreferenced loose objects
we deleted in the same gc run.

Change-Id: Idf8d512867ee1c8ed40bd55752122ce83a98ffa2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-4.6
Matthias Sohn 8 years ago
parent
commit
18cda3888c
  1. 7
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java

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

@ -475,12 +475,19 @@ public class GC {
// loose objects. Make a last check, though, to avoid deleting objects // loose objects. Make a last check, though, to avoid deleting objects
// that could have been referenced while the candidates list was being // that could have been referenced while the candidates list was being
// built (by an incoming push, for example). // built (by an incoming push, for example).
Set<File> touchedFanout = new HashSet<>();
for (File f : deletionCandidates.values()) { for (File f : deletionCandidates.values()) {
if (f.lastModified() < expireDate) { if (f.lastModified() < expireDate) {
f.delete(); f.delete();
touchedFanout.add(f.getParentFile());
} }
} }
for (File f : touchedFanout) {
FileUtils.delete(f,
FileUtils.EMPTY_DIRECTORIES_ONLY | FileUtils.IGNORE_ERRORS);
}
repo.getObjectDatabase().close(); repo.getObjectDatabase().close();
} }

Loading…
Cancel
Save