diff --git a/.eclipse_iplog b/.eclipse_iplog index c7bf1b48e..b6d6e9bbb 100644 --- a/.eclipse_iplog +++ b/.eclipse_iplog @@ -2,6 +2,8 @@ name = JGit license = Eclipse Distribution License v1.0 + skipCommit = 1a6964c8274c50f0253db75f010d78ef0e739343 + [CQ "3454"] description = args4j Version: 2.0.12 license = BSD License diff --git a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java index 417c50655..d8956afe1 100644 --- a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java +++ b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java @@ -130,6 +130,9 @@ public class IpLogGenerator { /** Root commits which were scanned to gather project data. */ private final Set commits = new HashSet(); + /** The meta file we loaded to bootstrap our definitions. */ + private IpLogMeta meta; + private String characterEncoding = "UTF-8"; private Repository db; @@ -185,7 +188,7 @@ public class IpLogGenerator { loadEclipseIpLog(version, c); loadCommitters(repo); - scanProjectCommits(c); + scanProjectCommits(meta.getProjects().get(0), c); commits.add(c); } finally { WindowCursor.release(curs); @@ -202,7 +205,7 @@ public class IpLogGenerator { if (log == null) return; - IpLogMeta meta = new IpLogMeta(); + meta = new IpLogMeta(); try { meta.loadFrom(new BlobBasedConfig(null, db, log.getObjectId(0))); } catch (ConfigInvalidException e) { @@ -277,12 +280,17 @@ public class IpLogGenerator { } } - private void scanProjectCommits(RevCommit start) throws IOException { + private void scanProjectCommits(Project proj, RevCommit start) + throws IOException { rw.reset(); rw.markStart(start); RevCommit commit; while ((commit = rw.next()) != null) { + if (proj.isSkippedCommit(commit)) { + continue; + } + final PersonIdent author = commit.getAuthorIdent(); final Date when = author.getWhen(); diff --git a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java index 38b7d417b..d0a5279ab 100644 --- a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java +++ b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java @@ -59,6 +59,7 @@ import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.FileBasedConfig; import org.eclipse.jgit.lib.LockFile; +import org.eclipse.jgit.lib.ObjectId; /** * Manages the {@code .eclipse_iplog} file in a project. @@ -75,6 +76,8 @@ public class IpLogMeta { private static final String K_COMMENTS = "comments"; + private static final String K_SKIP_COMMIT = "skipCommit"; + private static final String K_LICENSE = "license"; private static final String K_DESCRIPTION = "description"; @@ -104,6 +107,8 @@ public class IpLogMeta { Project project = new Project(id, name); project.setComments(cfg.getString(S_PROJECT, id, K_COMMENTS)); + for (String c : cfg.getStringList(S_PROJECT, id, K_SKIP_COMMIT)) + project.addSkipCommit(ObjectId.fromString(c)); for (String license : cfg.getStringList(S_PROJECT, id, K_LICENSE)) project.addLicense(license); projects.add(project); diff --git a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java index 6495d38ff..15b79cede 100644 --- a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java +++ b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java @@ -48,6 +48,10 @@ import java.util.Comparator; import java.util.Set; import java.util.TreeSet; +import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectIdSubclassMap; + /** Description of a project. */ class Project { /** Sorts projects by unique identities. */ @@ -65,6 +69,8 @@ class Project { private final Set licenses = new TreeSet(); + private final ObjectIdSubclassMap skipCommits = new ObjectIdSubclassMap(); + private String version; /** @@ -104,6 +110,14 @@ class Project { licenses.add(licenseName); } + void addSkipCommit(AnyObjectId commit) { + skipCommits.add(commit.copy()); + } + + boolean isSkippedCommit(AnyObjectId commit) { + return skipCommits.contains(commit); + } + String getVersion() { return version; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java index bd57c061b..a0b6d0ed2 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java @@ -97,6 +97,17 @@ public class ObjectIdSubclassMap implements Iterable { return null; } + /** + * Returns true if this map contains the specified object. + * + * @param toFind + * object to find. + * @return true if the mapping exists for this object; false otherwise. + */ + public boolean contains(final AnyObjectId toFind) { + return get(toFind) != null; + } + /** * Store an object for future lookup. *