diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/GC.java index cb053c18a..60d9cd0c0 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/GC.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/GC.java @@ -137,6 +137,7 @@ public class GC { * @throws IOException */ public Collection gc() throws IOException { + pm.start(6 /* tasks */); packRefs(); // TODO: implement reflog_expire(pm, repo); Collection newPacks = repack(); @@ -262,34 +263,38 @@ public class GC { if (fanout != null && fanout.length > 0) { pm.beginTask(JGitText.get().pruneLooseUnreferencedObjects, fanout.length); - 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) + try { + for (String d : fanout) { + pm.update(1); + if (d.length() != 2) continue; - if (f.lastModified() >= expireDate) + File[] entries = new File(objects, d).listFiles(); + if (entries == null) continue; - try { - ObjectId id = ObjectId.fromString(d + fName); - if (objectsToKeep.contains(id)) + for (File f : entries) { + String fName = f.getName(); + if (fName.length() != Constants.OBJECT_ID_STRING_LENGTH - 2) continue; - if (indexObjects == null) - indexObjects = listNonHEADIndexObjects(); - if (indexObjects.contains(id)) + if (f.lastModified() >= expireDate) continue; - deletionCandidates.put(id, f); - } catch (IllegalArgumentException notAnObject) { - // ignoring the file that does not represent loose - // object - 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 + continue; + } } } + } finally { + pm.endTask(); } } if (deletionCandidates.isEmpty())