]> source.dussan.org Git - jgit.git/commitdiff
eclipse-iplog: Skip the initial contribution 41/341/2
authorShawn O. Pearce <spearce@spearce.org>
Thu, 11 Mar 2010 20:02:27 +0000 (12:02 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 11 Mar 2010 23:15:03 +0000 (15:15 -0800)
The initial contribution was handled through a CQ, and does not need
to be reported as an individual bug record in the project's IP log.
Its an odd corner case that the EMO IP team doesn't want to see,
even though its technically a contribution written by at least
some non-committers.

The project.skipCommit variable can now be used to mask out any
particular change from the IP log.  Currently within JGit we want
to mask only the initial commit, but others could be masked if the
need arises.

Change-Id: I598e08137ddc5913284471ee2aa545f4df685023
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
.eclipse_iplog
org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java
org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java
org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java

index c7bf1b48e9f095aa73e7fb7c104ec8cf151306d1..b6d6e9bbb1cc70aec81c997f5e5105f64252d855 100644 (file)
@@ -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
index 417c5065504200360664051a96504e1f68069b27..d8956afe12744c1a416d96e202861e4582f4ae58 100644 (file)
@@ -130,6 +130,9 @@ public class IpLogGenerator {
        /** Root commits which were scanned to gather project data. */
        private final Set<RevCommit> commits = new HashSet<RevCommit>();
 
+       /** 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();
 
index 38b7d417b14bc24c36e0d035f212950f45f37554..d0a5279abb504af6ab31d0cb9ab0f9934a4a1967 100644 (file)
@@ -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);
index 6495d38ff5afe2793e27270008f809e9a33b4d6d..15b79cede50cc93a30d59bb812165e915e014d79 100644 (file)
@@ -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<String> licenses = new TreeSet<String>();
 
+       private final ObjectIdSubclassMap<ObjectId> skipCommits = new ObjectIdSubclassMap<ObjectId>();
+
        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;
        }
index bd57c061b6188c791c8c7436e03585f66f2556dc..a0b6d0ed24af9b0d67cdd14b9e3736cb52132939 100644 (file)
@@ -97,6 +97,17 @@ public class ObjectIdSubclassMap<V extends ObjectId> implements Iterable<V> {
                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.
         * <p>