Browse Source

eclipse-iplog: Skip the initial contribution

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>
stable-0.7
Shawn O. Pearce 15 years ago
parent
commit
4a73596ce4
  1. 2
      .eclipse_iplog
  2. 14
      org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogGenerator.java
  3. 5
      org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java
  4. 14
      org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/Project.java
  5. 11
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java

2
.eclipse_iplog

@ -2,6 +2,8 @@
name = JGit name = JGit
license = Eclipse Distribution License v1.0 license = Eclipse Distribution License v1.0
skipCommit = 1a6964c8274c50f0253db75f010d78ef0e739343
[CQ "3454"] [CQ "3454"]
description = args4j Version: 2.0.12 description = args4j Version: 2.0.12
license = BSD License license = BSD License

14
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. */ /** Root commits which were scanned to gather project data. */
private final Set<RevCommit> commits = new HashSet<RevCommit>(); 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 String characterEncoding = "UTF-8";
private Repository db; private Repository db;
@ -185,7 +188,7 @@ public class IpLogGenerator {
loadEclipseIpLog(version, c); loadEclipseIpLog(version, c);
loadCommitters(repo); loadCommitters(repo);
scanProjectCommits(c); scanProjectCommits(meta.getProjects().get(0), c);
commits.add(c); commits.add(c);
} finally { } finally {
WindowCursor.release(curs); WindowCursor.release(curs);
@ -202,7 +205,7 @@ public class IpLogGenerator {
if (log == null) if (log == null)
return; return;
IpLogMeta meta = new IpLogMeta(); meta = new IpLogMeta();
try { try {
meta.loadFrom(new BlobBasedConfig(null, db, log.getObjectId(0))); meta.loadFrom(new BlobBasedConfig(null, db, log.getObjectId(0)));
} catch (ConfigInvalidException e) { } 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.reset();
rw.markStart(start); rw.markStart(start);
RevCommit commit; RevCommit commit;
while ((commit = rw.next()) != null) { while ((commit = rw.next()) != null) {
if (proj.isSkippedCommit(commit)) {
continue;
}
final PersonIdent author = commit.getAuthorIdent(); final PersonIdent author = commit.getAuthorIdent();
final Date when = author.getWhen(); final Date when = author.getWhen();

5
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.Constants;
import org.eclipse.jgit.lib.FileBasedConfig; import org.eclipse.jgit.lib.FileBasedConfig;
import org.eclipse.jgit.lib.LockFile; import org.eclipse.jgit.lib.LockFile;
import org.eclipse.jgit.lib.ObjectId;
/** /**
* Manages the {@code .eclipse_iplog} file in a project. * 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_COMMENTS = "comments";
private static final String K_SKIP_COMMIT = "skipCommit";
private static final String K_LICENSE = "license"; private static final String K_LICENSE = "license";
private static final String K_DESCRIPTION = "description"; private static final String K_DESCRIPTION = "description";
@ -104,6 +107,8 @@ public class IpLogMeta {
Project project = new Project(id, name); Project project = new Project(id, name);
project.setComments(cfg.getString(S_PROJECT, id, K_COMMENTS)); 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)) for (String license : cfg.getStringList(S_PROJECT, id, K_LICENSE))
project.addLicense(license); project.addLicense(license);
projects.add(project); projects.add(project);

14
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.Set;
import java.util.TreeSet; 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. */ /** Description of a project. */
class Project { class Project {
/** Sorts projects by unique identities. */ /** Sorts projects by unique identities. */
@ -65,6 +69,8 @@ class Project {
private final Set<String> licenses = new TreeSet<String>(); private final Set<String> licenses = new TreeSet<String>();
private final ObjectIdSubclassMap<ObjectId> skipCommits = new ObjectIdSubclassMap<ObjectId>();
private String version; private String version;
/** /**
@ -104,6 +110,14 @@ class Project {
licenses.add(licenseName); licenses.add(licenseName);
} }
void addSkipCommit(AnyObjectId commit) {
skipCommits.add(commit.copy());
}
boolean isSkippedCommit(AnyObjectId commit) {
return skipCommits.contains(commit);
}
String getVersion() { String getVersion() {
return version; return version;
} }

11
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectIdSubclassMap.java

@ -97,6 +97,17 @@ public class ObjectIdSubclassMap<V extends ObjectId> implements Iterable<V> {
return null; 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. * Store an object for future lookup.
* <p> * <p>

Loading…
Cancel
Save