From 29d9fc478c3046f50b95e8a85d42fe6205afb01d Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 26 Aug 2012 01:46:40 +0200 Subject: [PATCH] Fix gc's usage of progress monitor Change-Id: I8dcdf0b83e91e6132dc490e8ec53818220773c94 Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/storage/file/GC.java | 49 ++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) 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 cb053c18a6..60d9cd0c02 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()) -- 2.39.5