Browse Source

Merge branch 'stable-4.6'

* stable-4.6:
  GC: delete empty directories after purging loose objects
  GC.prune(Set<ObjectId>): return early if objects directory is empty

Change-Id: I3d6cacf80d3b4c69ba108e970855963bd9f6ee78
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-4.7
Matthias Sohn 8 years ago
parent
commit
566794d001
  1. 16
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java

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

@ -455,7 +455,9 @@ public class GC {
Set<ObjectId> indexObjects = null;
File objects = repo.getObjectsDirectory();
String[] fanout = objects.list();
if (fanout != null && fanout.length > 0) {
if (fanout == null || fanout.length == 0) {
return;
}
pm.beginTask(JGitText.get().pruneLooseUnreferencedObjects,
fanout.length);
try {
@ -493,9 +495,10 @@ public class GC {
} finally {
pm.endTask();
}
}
if (deletionCandidates.isEmpty())
if (deletionCandidates.isEmpty()) {
return;
}
checkCancelled();
@ -576,12 +579,19 @@ public class GC {
// loose objects. Make a last check, though, to avoid deleting objects
// that could have been referenced while the candidates list was being
// built (by an incoming push, for example).
Set<File> touchedFanout = new HashSet<>();
for (File f : deletionCandidates.values()) {
if (f.lastModified() < expireDate) {
f.delete();
touchedFanout.add(f.getParentFile());
}
}
for (File f : touchedFanout) {
FileUtils.delete(f,
FileUtils.EMPTY_DIRECTORIES_ONLY | FileUtils.IGNORE_ERRORS);
}
repo.getObjectDatabase().close();
}

Loading…
Cancel
Save