Browse Source

GC.prune(Set<ObjectId>): return early if objects directory is empty

Change-Id: Id56b102604c4e0437230e3e7c59c0a3a1b676256
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v4.6.1.201703071140-r
Matthias Sohn 7 years ago
parent
commit
a11bb03127
1 changed files with 33 additions and 30 deletions
  1. 33
    30
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java

+ 33
- 30
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java View File

@@ -364,45 +364,48 @@ public class GC {
Set<ObjectId> indexObjects = null;
File objects = repo.getObjectsDirectory();
String[] fanout = objects.list();
if (fanout != null && fanout.length > 0) {
pm.beginTask(JGitText.get().pruneLooseUnreferencedObjects,
fanout.length);
try {
for (String d : fanout) {
pm.update(1);
if (d.length() != 2)
if (fanout == null || fanout.length == 0) {
return;
}
pm.beginTask(JGitText.get().pruneLooseUnreferencedObjects,
fanout.length);
try {
for (String d : fanout) {
pm.update(1);
if (d.length() != 2)
continue;
File[] entries = new File(objects, d).listFiles();
if (entries == null)
continue;
for (File f : entries) {
String fName = f.getName();
if (fName.length() != Constants.OBJECT_ID_STRING_LENGTH - 2)
continue;
File[] entries = new File(objects, d).listFiles();
if (entries == null)
if (repo.getFS().lastModified(f) >= expireDate)
continue;
for (File f : entries) {
String fName = f.getName();
if (fName.length() != Constants.OBJECT_ID_STRING_LENGTH - 2)
continue;
if (repo.getFS().lastModified(f) >= expireDate)
try {
ObjectId id = ObjectId.fromString(d + fName);
if (objectsToKeep.contains(id))
continue;
try {
ObjectId id = ObjectId.fromString(d + fName);
if (objectsToKeep.contains(id))
continue;
if (indexObjects == null)
indexObjects = listNonHEADIndexObjects();
if (indexObjects.contains(id))
continue;
deletionCandidates.put(id, f);
} catch (IllegalArgumentException notAnObject) {
// ignoring the file that does not represent loose
// object
if (indexObjects == null)
indexObjects = listNonHEADIndexObjects();
if (indexObjects.contains(id))
continue;
}
deletionCandidates.put(id, f);
} catch (IllegalArgumentException notAnObject) {
// ignoring the file that does not represent loose
// object
continue;
}
}
} finally {
pm.endTask();
}
} finally {
pm.endTask();
}
if (deletionCandidates.isEmpty())

if (deletionCandidates.isEmpty()) {
return;
}

// From the set of current refs remove all those which have been handled
// during last repack(). Only those refs will survive which have been

Loading…
Cancel
Save