eclipse-iplog: Use contribution rather than bug element

Wayne changed the schema to no longer be dependent upon the Bugzilla
notion of a contribution, but instead be more generic and better
support systems like Gerrit Code Review.  Update our output to
use the <contribution> element and include a link to the change
in Gerrit.

Change-Id: Ibc8a436918bd8e7597dc17743824201a74bce09b
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/.eclipse_iplog b/.eclipse_iplog
index f3771c1..dc70169 100644
--- a/.eclipse_iplog
+++ b/.eclipse_iplog
@@ -4,6 +4,9 @@
 
 	skipCommit = 1a6964c8274c50f0253db75f010d78ef0e739343
 
+[review]
+	url = http://egit.eclipse.org/r/r/
+
 [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 8ddb6bd..28df8b7 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
@@ -58,7 +58,6 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
@@ -88,7 +87,6 @@
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.WindowCursor;
-import org.eclipse.jgit.revwalk.FooterKey;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTree;
 import org.eclipse.jgit.revwalk.RevWalk;
@@ -111,8 +109,6 @@
 
 	private static final String INDENT = "{http://xml.apache.org/xslt}indent-amount";
 
-	private static final FooterKey BUG = new FooterKey("Bug");
-
 	/** Projects indexed by their ID string, e.g. {@code technology.jgit}. */
 	private final Map<String, Project> projects = new TreeMap<String, Project>();
 
@@ -137,6 +133,9 @@
 	/** The meta file we loaded to bootstrap our definitions. */
 	private IpLogMeta meta;
 
+	/** URL to obtain review information about a specific contribution. */
+	private String reviewUrl;
+
 	private String characterEncoding = "UTF-8";
 
 	private Repository db;
@@ -230,6 +229,7 @@
 			consumedProjects.put(p.getName(), p);
 		}
 		cqs.addAll(meta.getCQs());
+		reviewUrl = meta.getReviewUrl();
 	}
 
 	private void loadCommitters(Repository repo) throws IOException {
@@ -358,20 +358,6 @@
 			String subj = commit.getShortMessage();
 			SingleContribution item = new SingleContribution(id, when, subj);
 
-			List<String> bugs = commit.getFooterLines(BUG);
-			if (1 == bugs.size()) {
-				item.setBugID(bugs.get(0));
-
-			} else if (2 <= bugs.size()) {
-				StringBuilder tmp = new StringBuilder();
-				for (String bug : bugs) {
-					if (tmp.length() > 0)
-						tmp.append(",");
-					tmp.append(bug);
-				}
-				item.setBugID(tmp.toString());
-			}
-
 			if (2 <= cnt) {
 				item.setSize("(merge)");
 				contributor.add(item);
@@ -594,20 +580,15 @@
 	}
 
 	private Element createContribution(SingleContribution s) {
-		Element r = createElement("bug");
+		Element r = createElement("contribution");
 		required(r, "id", s.getID());
-		optional(r, "bug-id", s.getBugID());
+		required(r, "description", s.getSummary());
 		required(r, "size", s.getSize());
-		required(r, "type", "A"); // assume attachment type
-		required(r, "created", format(s.getCreated()));
-		required(r, "summary", s.getSummary());
+		if (reviewUrl != null)
+			optional(r, "url", reviewUrl + s.getID());
 		return r;
 	}
 
-	private String format(Date created) {
-		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(created);
-	}
-
 	private Element createElement(String name) {
 		return doc.createElementNS(IPLOG_NS, IPLOG_PFX + name);
 	}
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 16a1593..89695bd 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
@@ -75,6 +75,10 @@
 
 	private static final String S_CONSUMES = "consumes";
 
+	private static final String S_REVIEW = "review";
+
+	private static final String K_URL = "url";
+
 	private static final String K_NAME = "name";
 
 	private static final String K_VERSION = "version";
@@ -97,6 +101,8 @@
 
 	private Set<CQ> cqs = new HashSet<CQ>();
 
+	private String reviewUrl;
+
 	List<Project> getProjects() {
 		return projects;
 	}
@@ -109,6 +115,10 @@
 		return cqs;
 	}
 
+	String getReviewUrl() {
+		return reviewUrl;
+	}
+
 	void loadFrom(Config cfg) {
 		projects.clear();
 		consumedProjects.clear();
@@ -126,6 +136,8 @@
 			cq.setComments(cfg.getString(S_CQ, id, K_COMMENTS));
 			cqs.add(cq);
 		}
+
+		reviewUrl = cfg.getString(S_REVIEW, null, K_URL);
 	}
 
 	private List<Project> parseProjects(final Config cfg,
diff --git a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/SingleContribution.java b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/SingleContribution.java
index 2cd5562..96f3def 100644
--- a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/SingleContribution.java
+++ b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/SingleContribution.java
@@ -61,8 +61,6 @@
 
 	private Date created;
 
-	private String bugId;
-
 	private String size;
 
 	/**
@@ -91,17 +89,6 @@
 		return summary;
 	}
 
-	/** @return Bugzilla bug id */
-	String getBugID() {
-		return bugId;
-	}
-
-	void setBugID(String id) {
-		if (id.startsWith("https://bugs.eclipse.org/"))
-			id = id.substring("https://bugs.eclipse.org/".length());
-		bugId = id;
-	}
-
 	String getSize() {
 		return size;
 	}