From 92e739413d8814918d9bb037da2b457554c86f9c Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 28 May 2010 14:58:42 -0700 Subject: [PATCH] eclipse-iplog: Add new consumes element to IP log This element documents other Eclipse projects that are consumed by this project. JGit doesn't consume any projects, but its sister project EGit does. Change-Id: Ie922d27c580f6742e2acb051815a381af48df7ca Signed-off-by: Shawn O. Pearce --- .../eclipse/jgit/iplog/IpLogGenerator.java | 29 ++++++++++++- .../src/org/eclipse/jgit/iplog/IpLogMeta.java | 42 ++++++++++++++----- 2 files changed, 59 insertions(+), 12 deletions(-) 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 a9fdb8158..8ddb6bdd1 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 @@ -116,6 +116,9 @@ public class IpLogGenerator { /** Projects indexed by their ID string, e.g. {@code technology.jgit}. */ private final Map projects = new TreeMap(); + /** Projects indexed by their ID string, e.g. {@code technology.jgit}. */ + private final Map consumedProjects = new TreeMap(); + /** Known committers, indexed by their foundation ID. */ private final Map committersById = new HashMap(); @@ -223,6 +226,9 @@ private void loadEclipseIpLog(String version, RevCommit commit) p.setVersion(version); projects.put(p.getName(), p); } + for (Project p : meta.getConsumedProjects()) { + consumedProjects.put(p.getName(), p); + } cqs.addAll(meta.getCQs()); } @@ -480,8 +486,19 @@ private Document toXML() throws ParserConfigurationException { root.appendChild(createProject(project)); licenses.addAll(project.getLicenses()); } + + if (!consumedProjects.isEmpty()) + appendBlankLine(root); + for (Project project : sort(consumedProjects, Project.COMPARATOR)) { + root.appendChild(createConsumes(project)); + licenses.addAll(project.getLicenses()); + } + for (RevCommit c : sort(commits)) root.appendChild(createCommitMeta(c)); + + if (licenses.size() > 1) + appendBlankLine(root); for (String name : sort(licenses)) root.appendChild(createLicense(name)); @@ -509,11 +526,21 @@ private void appendBlankLine(Element root) { private Element createProject(Project p) { Element project = createElement("project"); + populateProjectType(p, project); + return project; + } + + private Element createConsumes(Project p) { + Element project = createElement("consumes"); + populateProjectType(p, project); + return project; + } + + private void populateProjectType(Project p, Element project) { required(project, "id", p.getID()); required(project, "name", p.getName()); optional(project, "comments", p.getComments()); optional(project, "version", p.getVersion()); - return project; } private Element createCommitMeta(RevCommit c) { 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 8d73b02fd..16a159352 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 @@ -73,8 +73,12 @@ public class IpLogMeta { private static final String S_CQ = "CQ"; + private static final String S_CONSUMES = "consumes"; + private static final String K_NAME = "name"; + private static final String K_VERSION = "version"; + private static final String K_COMMENTS = "comments"; private static final String K_SKIP_COMMIT = "skipCommit"; @@ -89,31 +93,29 @@ public class IpLogMeta { private List projects = new ArrayList(); + private List consumedProjects = new ArrayList(); + private Set cqs = new HashSet(); List getProjects() { return projects; } + List getConsumedProjects() { + return consumedProjects; + } + Set getCQs() { return cqs; } void loadFrom(Config cfg) { projects.clear(); + consumedProjects.clear(); cqs.clear(); - for (String id : cfg.getSubsections(S_PROJECT)) { - String name = cfg.getString(S_PROJECT, id, K_NAME); - 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); - } + projects.addAll(parseProjects(cfg, S_PROJECT)); + consumedProjects.addAll(parseProjects(cfg, S_CONSUMES)); for (String id : cfg.getSubsections(S_CQ)) { CQ cq = new CQ(Long.parseLong(id)); @@ -126,6 +128,24 @@ void loadFrom(Config cfg) { } } + private List parseProjects(final Config cfg, + final String sectionName) { + final List dst = new ArrayList(); + for (String id : cfg.getSubsections(sectionName)) { + String name = cfg.getString(sectionName, id, K_NAME); + Project project = new Project(id, name); + project.setVersion(cfg.getString(sectionName, id, K_VERSION)); + project.setComments(cfg.getString(sectionName, id, K_COMMENTS)); + + for (String c : cfg.getStringList(sectionName, id, K_SKIP_COMMIT)) + project.addSkipCommit(ObjectId.fromString(c)); + for (String license : cfg.getStringList(sectionName, id, K_LICENSE)) + project.addLicense(license); + dst.add(project); + } + return dst; + } + /** * Query the Eclipse Foundation's IPzilla database for CQ records. *