aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2012-12-11 18:26:30 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2012-12-11 18:26:30 +0100
commit17f6eaadeb91057cb37309271c0b6e79439f64aa (patch)
tree06d41bafd9aca824b8df7f4716e4a7c37db32f64
parent91fbd12e13e16c4b163803e37ac24a0d1629d82d (diff)
downloadesper-testing-17f6eaadeb91057cb37309271c0b6e79439f64aa.tar.gz
esper-testing-17f6eaadeb91057cb37309271c0b6e79439f64aa.tar.bz2
esper-testing-17f6eaadeb91057cb37309271c0b6e79439f64aa.tar.xz
esper-testing-17f6eaadeb91057cb37309271c0b6e79439f64aa.zip
o Starting to parse out commit info from the Jenkins build too.
-rwxr-xr-xpom.xml5
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java173
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java149
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java88
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java10
-rwxr-xr-x[-rw-r--r--]src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java2
-rwxr-xr-xsrc/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java62
-rwxr-xr-xsrc/test/resources/jenkins/build/build-with-git-commits.xml12
-rwxr-xr-xsrc/test/resources/jenkins/build/build-with-subversion-commits.xml2
9 files changed, 364 insertions, 139 deletions
diff --git a/pom.xml b/pom.xml
index 7779bda..91e9bd6 100755
--- a/pom.xml
+++ b/pom.xml
@@ -76,6 +76,11 @@
<version>3.0</version>
</dependency>
<dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.168</version>
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java
new file mode 100755
index 0000000..e80097b
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXml.java
@@ -0,0 +1,173 @@
+package io.trygvis.esper.testing.jenkins;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom2.Element;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import fj.F;
+import fj.data.Option;
+import io.trygvis.esper.testing.Util;
+
+import static fj.data.List.iterableList;
+import static fj.data.Option.none;
+import static fj.data.Option.some;
+import static fj.data.Option.somes;
+import static io.trygvis.esper.testing.Util.childText;
+import static io.trygvis.esper.testing.jenkins.JenkinsBuildXml.ChangeSetItemXml.parseChangeSetItem;
+import static io.trygvis.esper.testing.jenkins.JenkinsBuildXml.RevisionXml.parseRevision;
+
+public class JenkinsBuildXml {
+ private static final Logger logger = LoggerFactory.getLogger(JenkinsBuildXml.class);
+
+ public final URI url;
+
+ public final int number;
+
+ public final Option<String> result;
+
+ public final int duration;
+
+ public final long timestamp;
+
+ public final Option<ChangeSetXml> changeSet;
+
+ JenkinsBuildXml(URI url, int number, Option<String> result, int duration, long timestamp, Option<ChangeSetXml> changeSet) {
+ this.url = url;
+ this.number = number;
+ this.result = result;
+ this.duration = duration;
+ this.timestamp = timestamp;
+ this.changeSet = changeSet;
+ }
+
+ public static Option<JenkinsBuildXml> parse(Element root) {
+ Option<URI> url = childText(root, "url").bind(Util.parseUri);
+ Option<Integer> number = childText(root, "number").bind(Util.parseInt);
+ Option<String> result = childText(root, "result");
+ Option<Integer> duration = childText(root, "duration").bind(Util.parseInt);
+ Option<Long> timestamp = childText(root, "timestamp").bind(Util.parseLong);
+
+ if (url.isNone()) {
+ logger.warn("Missing required field: <url>");
+ return none();
+ }
+ if (number.isNone()) {
+ logger.warn("Missing required field: <number>");
+ return none();
+ }
+ if (duration.isNone()) {
+ logger.warn("Missing required field: <duration>");
+ return none();
+ }
+ if (timestamp.isNone()) {
+ logger.warn("Missing required field: <timestamp>");
+ return none();
+ }
+
+ Option<ChangeSetXml> changeSet = none();
+ Element e = root.getChild("changeSet");
+ if (e != null) {
+ changeSet = ChangeSetXml.parse(e);
+ }
+
+ return some(new JenkinsBuildXml(url.some(), number.some(), result, duration.some(), timestamp.some(), changeSet));
+ }
+
+ public static class ChangeSetXml {
+ public final List<ChangeSetItemXml> items;
+
+ public final Option<RevisionXml> revision;
+
+ public ChangeSetXml(List<ChangeSetItemXml> items, Option<RevisionXml> revision) {
+ this.items = items;
+ this.revision = revision;
+ }
+
+ public static Option<ChangeSetXml> parse(Element changeSet) {
+
+ List<ChangeSetItemXml> items = new ArrayList<>(somes(iterableList(changeSet.getChildren("item")).map(parseChangeSetItem)).toCollection());
+
+ Option<RevisionXml> revision = Option.fromNull(changeSet.getChild("revision")).bind(parseRevision);
+
+ return some(new ChangeSetXml(items, revision));
+ }
+ }
+
+ public static class ChangeSetItemXml {
+ public final String commitId;
+
+ public final DateTime date;
+
+ public final String msg;
+
+ /**
+ * Only subversion has this field
+ */
+ public final Option<String> user;
+
+ public ChangeSetItemXml(String commitId, DateTime date, String msg, Option<String> user) {
+ this.commitId = commitId;
+ this.date = date;
+ this.msg = msg;
+ this.user = user;
+ }
+
+ private static final F<String, Option<DateTime>> parseDate = new F<String, Option<DateTime>>() {
+ DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z");
+
+ public Option<DateTime> f(String s) {
+ try {
+ return some(parser.parseDateTime(s));
+ } catch (IllegalArgumentException e) {
+ return none();
+ }
+ }
+ };
+
+ public static final F<Element, Option<ChangeSetItemXml>> parseChangeSetItem = new F<Element, Option<ChangeSetItemXml>>() {
+ public Option<ChangeSetItemXml> f(Element item) {
+ Option<String> commitId = childText(item, "commitId");
+ Option<DateTime> date = childText(item, "date").bind(parseDate);
+ Option<String> msg = childText(item, "msg");
+ Option<String> user = childText(item, "user");
+
+ if (commitId.isNone() || date.isNone() || msg.isNone()) {
+ return none();
+ }
+
+ return some(new ChangeSetItemXml(commitId.some(), date.some(), msg.some(), user));
+ }
+ };
+ }
+
+ public static class RevisionXml {
+ public final String module;
+
+ public final String revision;
+
+ public RevisionXml(String module, String revision) {
+ this.module = module;
+ this.revision = revision;
+ }
+
+ public static final F<Element, Option<RevisionXml>> parseRevision = new F<Element, Option<RevisionXml>>() {
+ public Option<RevisionXml> f(Element e) {
+ Option<String> module = childText(e, "module");
+ Option<String> revision = childText(e, "revision");
+
+ if (module.isNone() || revision.isNone()) {
+ return none();
+ }
+
+ return some(new RevisionXml(module.some(), revision.some()));
+ }
+ };
+ }
+}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
index 0aa63c1..39dfc66 100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsClient.java
@@ -2,7 +2,6 @@ package io.trygvis.esper.testing.jenkins;
import fj.*;
import fj.data.*;
-import io.trygvis.esper.testing.*;
import io.trygvis.esper.testing.jenkins.JenkinsJobXml.*;
import io.trygvis.esper.testing.util.*;
import org.apache.abdera.*;
@@ -20,7 +19,6 @@ import java.util.*;
import java.util.List;
import static fj.data.Option.*;
-import static io.trygvis.esper.testing.Util.*;
import static io.trygvis.esper.testing.util.HttpClient.inputStreamOnly;
import static java.lang.System.currentTimeMillis;
import static org.apache.commons.lang.StringUtils.*;
@@ -80,12 +78,12 @@ public class JenkinsClient {
if (d.isNone()) {
Option<String> n = Option.none();
- return new JenkinsXml(n, n, n, Collections.<JenkinsJobEntryXml>emptyList());
+ return new JenkinsXml(n, n, n, Collections.<JenkinsXml.JobXml>emptyList());
}
Element root = d.some().getRootElement();
- List<JenkinsJobEntryXml> jobs = new ArrayList<>();
+ List<JenkinsXml.JobXml> jobs = new ArrayList<>();
for (Element job : root.getChildren("job")) {
String name = trimToNull(job.getChildText("name"));
String u = trimToNull(job.getChildText("url"));
@@ -95,7 +93,7 @@ public class JenkinsClient {
continue;
}
- jobs.add(new JenkinsJobEntryXml(name, u, color));
+ jobs.add(new JenkinsXml.JobXml(name, u, color));
}
return new JenkinsXml(
@@ -155,53 +153,7 @@ public class JenkinsClient {
}
}
- public static class JenkinsBuildXml {
-
- public final URI url;
- public final int number;
- public final String result;
- public final int duration;
- public final long timestamp;
-
- JenkinsBuildXml(URI url, int number, String result, int duration, long timestamp) {
- this.url = url;
- this.number = number;
- this.result = result;
- this.duration = duration;
- this.timestamp = timestamp;
- }
-
- public static Option<JenkinsBuildXml> parse(Element root) {
- Option<URI> url = childText(root, "url").bind(Util.parseUri);
- Option<Integer> number = childText(root, "number").bind(Util.parseInt);
- Option<String> result = childText(root, "result");
- Option<Integer> duration = childText(root, "duration").bind(Util.parseInt);
- Option<Long> timestamp = childText(root, "timestamp").bind(Util.parseLong);
-
- if(url.isNone()) {
- logger.warn("Missing required field: <url>");
- return none();
- }
- if(number.isNone()) {
- logger.warn("Missing required field: <number>");
- return none();
- }
- if(result.isNone()) {
- logger.warn("Missing required field: <result>");
- return none();
- }
- if(duration.isNone()) {
- logger.warn("Missing required field: <duration>");
- return none();
- }
- if(timestamp.isNone()) {
- logger.warn("Missing required field: <timestamp>");
- return none();
- }
-
- return some(new JenkinsBuildXml(url.some(), number.some(), result.some(), duration.some(), timestamp.some()));
- }
- }}
+}
class JenkinsEntryXml {
public final String id;
@@ -219,99 +171,24 @@ class JenkinsXml {
public final Option<String> nodeName;
public final Option<String> nodeDescription;
public final Option<String> description;
- public final List<JenkinsJobEntryXml> jobs;
+ public final List<JobXml> jobs;
- JenkinsXml(Option<String> nodeName, Option<String> nodeDescription, Option<String> description, List<JenkinsJobEntryXml> jobs) {
+ JenkinsXml(Option<String> nodeName, Option<String> nodeDescription, Option<String> description, List<JobXml> jobs) {
this.nodeName = nodeName;
this.nodeDescription = nodeDescription;
this.description = description;
this.jobs = jobs;
}
-}
-
-class JenkinsJobEntryXml {
- public final String name;
- public final String url;
- public final String color;
-
- JenkinsJobEntryXml(String name, String url, String color) {
- this.name = name;
- this.url = url;
- this.color = color;
- }
-}
-class JenkinsJobXml {
- enum JenkinsJobType {
- FREE_STYLE, MAVEN_MODULE_SET, MAVEN_MODULE, MATRIX
- }
+ public static class JobXml {
+ public final String name;
+ public final String url;
+ public final String color;
- public final JenkinsJobType type;
- public final Option<String> description;
- public final Option<String> displayName;
- public final Option<String> name;
- public final URI url;
- public final Option<String> color;
- public final boolean buildable;
- public final Option<BuildXml> lastBuild;
- public final Option<BuildXml> lastCompletedBuild;
- public final Option<BuildXml> lastFailedBuild;
- public final Option<BuildXml> lastSuccessfulBuild;
- public final Option<BuildXml> lastUnsuccessfulBuild;
-
- protected JenkinsJobXml(JenkinsJobType type, Option<String> description, Option<String> displayName,
- Option<String> name, URI url, Option<String> color, boolean buildable,
- Option<BuildXml> lastBuild, Option<BuildXml> lastCompletedBuild,
- Option<BuildXml> lastFailedBuild, Option<BuildXml> lastSuccessfulBuild,
- Option<BuildXml> lastUnsuccessfulBuild) {
- this.type = type;
- this.description = description;
- this.displayName = displayName;
- this.name = name;
- this.url = url;
- this.color = color;
- this.buildable = buildable;
- this.lastBuild = lastBuild;
- this.lastCompletedBuild = lastCompletedBuild;
- this.lastFailedBuild = lastFailedBuild;
- this.lastSuccessfulBuild = lastSuccessfulBuild;
- this.lastUnsuccessfulBuild = lastUnsuccessfulBuild;
- }
-
- static class BuildXml {
- public final int number;
- public final URI url;
- public static F<Element, Option<BuildXml>> buildXml = new F<Element, Option<BuildXml>>() {
- public Option<BuildXml> f(Element element) {
- Option<Integer> number = childText(element, "number").bind(Util.parseInt);
- Option<URI> url = childText(element, "url").bind(Util.parseUri);
-
- if (number.isNone() || url.isNone()) {
- return Option.none();
- }
-
- return some(new BuildXml(number.some(), url.some()));
- }
- };
-
- BuildXml(int number, URI url) {
- this.number = number;
+ JobXml(String name, String url, String color) {
+ this.name = name;
this.url = url;
+ this.color = color;
}
}
-
- public static JenkinsJobXml parse(URI url, JenkinsJobType type, Element root) {
- return new JenkinsJobXml(type,
- childText(root, "description"),
- childText(root, "displayName"),
- childText(root, "name"),
- childText(root, "url").bind(Util.parseUri).orSome(url),
- childText(root, "color"),
- childText(root, "buildable").bind(Util.parseBoolean).orSome(false),
- child(root, "lastBuild").bind(BuildXml.buildXml),
- child(root, "lastCompletedBuild").bind(BuildXml.buildXml),
- child(root, "lastFailedBuild").bind(BuildXml.buildXml),
- child(root, "lastSuccessfulBuild").bind(BuildXml.buildXml),
- child(root, "lastUnsuccessfulBuild").bind(BuildXml.buildXml));
- }
}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java
new file mode 100755
index 0000000..8cbe049
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsJobXml.java
@@ -0,0 +1,88 @@
+package io.trygvis.esper.testing.jenkins;
+
+import java.net.URI;
+
+import org.jdom2.Element;
+
+import fj.F;
+import fj.data.Option;
+import io.trygvis.esper.testing.Util;
+
+import static fj.data.Option.some;
+import static io.trygvis.esper.testing.Util.child;
+import static io.trygvis.esper.testing.Util.childText;
+
+class JenkinsJobXml {
+ enum JenkinsJobType {
+ FREE_STYLE, MAVEN_MODULE_SET, MAVEN_MODULE, MATRIX
+ }
+
+ public final JenkinsJobType type;
+ public final Option<String> description;
+ public final Option<String> displayName;
+ public final Option<String> name;
+ public final URI url;
+ public final Option<String> color;
+ public final boolean buildable;
+ public final Option<BuildXml> lastBuild;
+ public final Option<BuildXml> lastCompletedBuild;
+ public final Option<BuildXml> lastFailedBuild;
+ public final Option<BuildXml> lastSuccessfulBuild;
+ public final Option<BuildXml> lastUnsuccessfulBuild;
+
+ protected JenkinsJobXml(JenkinsJobType type, Option<String> description, Option<String> displayName,
+ Option<String> name, URI url, Option<String> color, boolean buildable,
+ Option<BuildXml> lastBuild, Option<BuildXml> lastCompletedBuild,
+ Option<BuildXml> lastFailedBuild, Option<BuildXml> lastSuccessfulBuild,
+ Option<BuildXml> lastUnsuccessfulBuild) {
+ this.type = type;
+ this.description = description;
+ this.displayName = displayName;
+ this.name = name;
+ this.url = url;
+ this.color = color;
+ this.buildable = buildable;
+ this.lastBuild = lastBuild;
+ this.lastCompletedBuild = lastCompletedBuild;
+ this.lastFailedBuild = lastFailedBuild;
+ this.lastSuccessfulBuild = lastSuccessfulBuild;
+ this.lastUnsuccessfulBuild = lastUnsuccessfulBuild;
+ }
+
+ static class BuildXml {
+ public final int number;
+ public final URI url;
+ public static F<Element, Option<BuildXml>> buildXml = new F<Element, Option<BuildXml>>() {
+ public Option<BuildXml> f(Element element) {
+ Option<Integer> number = childText(element, "number").bind(Util.parseInt);
+ Option<URI> url = childText(element, "url").bind(Util.parseUri);
+
+ if (number.isNone() || url.isNone()) {
+ return Option.none();
+ }
+
+ return some(new BuildXml(number.some(), url.some()));
+ }
+ };
+
+ BuildXml(int number, URI url) {
+ this.number = number;
+ this.url = url;
+ }
+ }
+
+ public static JenkinsJobXml parse(URI url, JenkinsJobType type, Element root) {
+ return new JenkinsJobXml(type,
+ childText(root, "description"),
+ childText(root, "displayName"),
+ childText(root, "name"),
+ childText(root, "url").bind(Util.parseUri).orSome(url),
+ childText(root, "color"),
+ childText(root, "buildable").bind(Util.parseBoolean).orSome(false),
+ child(root, "lastBuild").bind(BuildXml.buildXml),
+ child(root, "lastCompletedBuild").bind(BuildXml.buildXml),
+ child(root, "lastFailedBuild").bind(BuildXml.buildXml),
+ child(root, "lastSuccessfulBuild").bind(BuildXml.buildXml),
+ child(root, "lastUnsuccessfulBuild").bind(BuildXml.buildXml));
+ }
+}
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
index 4bbc007..ebc46ce 100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerActor.java
@@ -46,7 +46,7 @@ public class JenkinsServerActor implements TransactionalActor {
continue;
}
- logger.info("New build: " + entry.id + ", fetching info");
+ logger.debug("Build: " + entry.id + ", fetching info");
Option<JenkinsBuildXml> buildXmlOption = client.fetchBuild(apiXml(entry.url));
@@ -56,6 +56,12 @@ public class JenkinsServerActor implements TransactionalActor {
JenkinsBuildXml build = buildXmlOption.some();
+ if(build.result.isNone()) {
+ logger.debug("Not done building, <result> is not available.");
+ continue;
+ }
+ String result = build.result.some();
+
URI jobUrl = extrapolateJobUrlFromBuildUrl(build.url.toASCIIString());
Option<JenkinsJobDto> jobDtoOption = dao.selectJobByUrl(jobUrl);
@@ -86,7 +92,7 @@ public class JenkinsServerActor implements TransactionalActor {
job,
entry.id,
build.url,
- build.result,
+ result,
build.number,
build.duration,
build.timestamp);
diff --git a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
index 7e1dc9a..cfd9939 100644..100755
--- a/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
+++ b/src/main/java/io/trygvis/esper/testing/jenkins/JenkinsServerOld.java
@@ -86,7 +86,7 @@ public class JenkinsServerOld implements Closeable {
JenkinsXml xml = client.fetchJobs(url);
List<URI> jobUris = new ArrayList<>(xml.jobs.size());
- for (JenkinsJobEntryXml job : xml.jobs) {
+ for (JenkinsXml.JobXml job : xml.jobs) {
jobUris.add(URI.create(job.url));
}
diff --git a/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java b/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java
new file mode 100755
index 0000000..75d7326
--- /dev/null
+++ b/src/test/java/io/trygvis/esper/testing/jenkins/JenkinsBuildXmlTest.java
@@ -0,0 +1,62 @@
+package io.trygvis.esper.testing.jenkins;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+
+import org.jdom2.Document;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDateTime;
+import org.joda.time.chrono.ISOChronology;
+
+import fj.data.Option;
+import io.trygvis.esper.testing.util.XmlParser;
+import junit.framework.TestCase;
+
+import static org.joda.time.DateTimeZone.forOffsetHours;
+import static org.joda.time.DateTimeZone.forOffsetHoursMinutes;
+import static org.joda.time.chrono.ISOChronology.getInstance;
+
+public class JenkinsBuildXmlTest extends TestCase {
+ XmlParser parser = new XmlParser();
+ ISOChronology minus6 = getInstance(forOffsetHours(-6));
+ ISOChronology minus5 = getInstance(forOffsetHours(-5));
+ ISOChronology plus530 = getInstance(forOffsetHoursMinutes(5, 30));
+
+ public Option<Document> f(InputStream inputStream) {
+ return parser.parseDocument(inputStream);
+ }
+
+ public void testYo() throws IOException {
+ try (InputStream is = getClass().getResourceAsStream("/jenkins/build/build-with-git-commits.xml")) {
+ Option<JenkinsBuildXml> option = JenkinsBuildXml.parse(parser.parseDocument(is).some().getRootElement());
+
+ assertTrue(option.isSome());
+ JenkinsBuildXml build = option.some();
+
+ assertEquals(URI.create("http://ci.jruby.org/job/jruby-dist-master/1085/"), build.url);
+ assertEquals(1085, build.number);
+ assertTrue(build.result.isSome());
+ assertEquals(488824, build.duration);
+ assertTrue(build.changeSet.isSome());
+ JenkinsBuildXml.ChangeSetXml changeSet = build.changeSet.some();
+ assertTrue(changeSet.revision.isNone());
+ assertEquals(8, changeSet.items.size());
+
+ assertItem(changeSet.items.get(0), "df6d3e8773dff6cc727a6ca4d8eaa8b5f970138d", "Add missing jnr-enxio to NB project.", new DateTime(2012, 12, 5, 10, 40, 58, 0, minus6));
+ assertItem(changeSet.items.get(1), "54f6ce8c6e9a2c068c6b1bdfa096dcabb4e0ef1c", "Added description for vertexFor method", new DateTime(2012, 12, 5, 10, 56, 3, 0, plus530));
+ assertItem(changeSet.items.get(2), "b6edf4a29157ef5ecd4e050c79f9353200ed0daf", "Added spec for allData method of DirectedGraph.java", new DateTime(2012, 12, 5, 10, 56, 3, 0, plus530));
+ assertItem(changeSet.items.get(3), "9deef648a66d8fd4ed1b119419410b28492b87b4", "Added spec for removeEdge(Edge edge) method in DirectedGraph.java", new DateTime(2012, 12, 5, 11, 7, 34, 0, plus530));
+ assertItem(changeSet.items.get(4), "9a3eb797ce136349f3866fc2ae9b35be360fb3df", "Added spec for getInorderData method of DirectedGraph.java", new DateTime(2012, 12, 5, 11, 20, 17, 0, plus530));
+ assertItem(changeSet.items.get(5), "41b5de23dd2d7ccbc170252a43b8996316b93075", "No need to look up TZ here. In all cases leading up to here,", new DateTime(2012, 12, 6, 0, 5, 37, 0, minus5));
+ assertItem(changeSet.items.get(6), "def4c054ae82848c92b015a3267ace2c2cedd193", "Identify the correct JIRA ticket.", new DateTime(2012, 12, 6, 0, 8, 8, 0, minus5));
+ assertItem(changeSet.items.get(7), "82f12220d01c2c07398107fa5f5a2d50feb7c8c4", "As ugly as it might be, maintaining a map of exceptional time zone", new DateTime(2012, 12, 6, 0, 17, 26, 0, minus5));
+ }
+ }
+
+ private void assertItem(JenkinsBuildXml.ChangeSetItemXml item, String commitId, String msg, DateTime date) {
+ assertEquals(commitId, item.commitId);
+ assertEquals(msg, item.msg);
+ assertEquals(date.toDateTime(item.date.getZone()), item.date);
+ }
+}
diff --git a/src/test/resources/jenkins/build/build-with-git-commits.xml b/src/test/resources/jenkins/build/build-with-git-commits.xml
new file mode 100755
index 0000000..e04113d
--- /dev/null
+++ b/src/test/resources/jenkins/build/build-with-git-commits.xml
@@ -0,0 +1,12 @@
+<!-- http://ci.jruby.org/job/jruby-dist-master/1085/api/xml -->
+<freeStyleBuild><action><cause><shortDescription>Started by timer</shortDescription></cause></action><action><buildsByBranchName><originmaster><buildNumber>1085</buildNumber><revision><SHA1>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</SHA1><branch><SHA1>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</SHA1><name>origin/master</name></branch></revision></originmaster></buildsByBranchName><lastBuiltRevision><SHA1>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</SHA1><branch><SHA1>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>git://jruby.org/jruby.git</remoteUrl><scmName></scmName></action><action></action><action></action><building>false</building><duration>488824</duration><estimatedDuration>522747</estimatedDuration><fullDisplayName>jruby-dist-master #1085</fullDisplayName><id>2012-12-06_03-01-02</id><keepLog>false</keepLog><number>1085</number><result>SUCCESS</result><timestamp>1354791662000</timestamp><url>http://ci.jruby.org/job/jruby-dist-master/1085/</url><builtOn></builtOn><changeSet><item><affectedPath>nbproject/nbjdk.properties</affectedPath><affectedPath>nbproject/project.xml</affectedPath><commitId>df6d3e8773dff6cc727a6ca4d8eaa8b5f970138d</commitId><timestamp>1354732858000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/Charles%20Oliver%20Nutter</absoluteUrl><fullName>Charles Oliver Nutter</fullName></author><comment>Add missing jnr-enxio to NB project.
+</comment><date>2012-12-05 10:40:58 -0600</date><id>df6d3e8773dff6cc727a6ca4d8eaa8b5f970138d</id><msg>Add missing jnr-enxio to NB project.</msg><path><editType>edit</editType><file>nbproject/nbjdk.properties</file></path><path><editType>edit</editType><file>nbproject/project.xml</file></path></item><item><affectedPath>src/org/jruby/ir/util/DirectedGraph.java</affectedPath><commitId>54f6ce8c6e9a2c068c6b1bdfa096dcabb4e0ef1c</commitId><timestamp>1354733763000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/csonpatki</absoluteUrl><fullName>csonpatki</fullName></author><comment>Added description for vertexFor method
+</comment><date>2012-12-05 10:56:03 +0530</date><id>54f6ce8c6e9a2c068c6b1bdfa096dcabb4e0ef1c</id><msg>Added description for vertexFor method</msg><path><editType>edit</editType><file>src/org/jruby/ir/util/DirectedGraph.java</file></path></item><item><affectedPath>spec/ir/directed_graph/directed_graph_spec.rb</affectedPath><commitId>b6edf4a29157ef5ecd4e050c79f9353200ed0daf</commitId><timestamp>1354733763000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/csonpatki</absoluteUrl><fullName>csonpatki</fullName></author><comment>Added spec for allData method of DirectedGraph.java
+</comment><date>2012-12-05 10:56:03 +0530</date><id>b6edf4a29157ef5ecd4e050c79f9353200ed0daf</id><msg>Added spec for allData method of DirectedGraph.java</msg><path><editType>edit</editType><file>spec/ir/directed_graph/directed_graph_spec.rb</file></path></item><item><affectedPath>spec/ir/directed_graph/directed_graph_spec.rb</affectedPath><commitId>9deef648a66d8fd4ed1b119419410b28492b87b4</commitId><timestamp>1354734454000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/csonpatki</absoluteUrl><fullName>csonpatki</fullName></author><comment>Added spec for removeEdge(Edge edge) method in DirectedGraph.java
+</comment><date>2012-12-05 11:07:34 +0530</date><id>9deef648a66d8fd4ed1b119419410b28492b87b4</id><msg>Added spec for removeEdge(Edge edge) method in DirectedGraph.java</msg><path><editType>edit</editType><file>spec/ir/directed_graph/directed_graph_spec.rb</file></path></item><item><affectedPath>spec/ir/directed_graph/directed_graph_spec.rb</affectedPath><commitId>9a3eb797ce136349f3866fc2ae9b35be360fb3df</commitId><timestamp>1354735217000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/csonpatki</absoluteUrl><fullName>csonpatki</fullName></author><comment>Added spec for getInorderData method of DirectedGraph.java
+</comment><date>2012-12-05 11:20:17 +0530</date><id>9a3eb797ce136349f3866fc2ae9b35be360fb3df</id><msg>Added spec for getInorderData method of DirectedGraph.java</msg><path><editType>edit</editType><file>spec/ir/directed_graph/directed_graph_spec.rb</file></path></item><item><affectedPath>src/org/jruby/RubyTime.java</affectedPath><commitId>41b5de23dd2d7ccbc170252a43b8996316b93075</commitId><timestamp>1354781137000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/hasari</absoluteUrl><fullName>Hiro Asari</fullName></author><comment>No need to look up TZ here. In all cases leading up to here,
+we should rely on the String value passed to set up the Time object.
+</comment><date>2012-12-06 00:05:37 -0500</date><id>41b5de23dd2d7ccbc170252a43b8996316b93075</id><msg>No need to look up TZ here. In all cases leading up to here,</msg><path><editType>edit</editType><file>src/org/jruby/RubyTime.java</file></path></item><item><affectedPath>src/org/jruby/RubyTime.java</affectedPath><commitId>def4c054ae82848c92b015a3267ace2c2cedd193</commitId><timestamp>1354781288000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/hasari</absoluteUrl><fullName>Hiro Asari</fullName></author><comment>Identify the correct JIRA ticket.
+</comment><date>2012-12-06 00:08:08 -0500</date><id>def4c054ae82848c92b015a3267ace2c2cedd193</id><msg>Identify the correct JIRA ticket.</msg><path><editType>edit</editType><file>src/org/jruby/RubyTime.java</file></path></item><item><affectedPath>src/org/jruby/RubyTime.java</affectedPath><commitId>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</commitId><timestamp>1354781846000</timestamp><author><absoluteUrl>http://ci.jruby.org/user/hasari</absoluteUrl><fullName>Hiro Asari</fullName></author><comment>As ugly as it might be, maintaining a map of exceptional time zone
+values may be the best way to address #215.
+</comment><date>2012-12-06 00:17:26 -0500</date><id>82f12220d01c2c07398107fa5f5a2d50feb7c8c4</id><msg>As ugly as it might be, maintaining a map of exceptional time zone</msg><path><editType>edit</editType><file>src/org/jruby/RubyTime.java</file></path></item></changeSet><culprit><absoluteUrl>http://ci.jruby.org/user/Charles%20Oliver%20Nutter</absoluteUrl><fullName>Charles Oliver Nutter</fullName></culprit><culprit><absoluteUrl>http://ci.jruby.org/user/csonpatki</absoluteUrl><fullName>csonpatki</fullName></culprit><culprit><absoluteUrl>http://ci.jruby.org/user/hasari</absoluteUrl><fullName>Hiro Asari</fullName></culprit></freeStyleBuild>
diff --git a/src/test/resources/jenkins/build/build-with-subversion-commits.xml b/src/test/resources/jenkins/build/build-with-subversion-commits.xml
new file mode 100755
index 0000000..92fbbab
--- /dev/null
+++ b/src/test/resources/jenkins/build/build-with-subversion-commits.xml
@@ -0,0 +1,2 @@
+<!-- https://builds.apache.org/job/Lucene-Solr-Tests-4.x-Java6/1102/api/xml -->
+<freeStyleBuild><action><cause><shortDescription>Started by timer</shortDescription></cause></action><action></action><action></action><action></action><action><failCount>0</failCount><skipCount>39</skipCount><totalCount>4583</totalCount><urlName>testReport</urlName></action><action></action><artifact><displayPath>README.txt</displayPath><fileName>README.txt</fileName><relativePath>README.txt</relativePath></artifact><building>false</building><duration>1646526</duration><estimatedDuration>1466031</estimatedDuration><fullDisplayName>Lucene-Solr-Tests-4.x-Java6 #1102</fullDisplayName><id>2012-12-11_03-17-24</id><keepLog>false</keepLog><number>1102</number><result>SUCCESS</result><timestamp>1355195844624</timestamp><url>https://builds.apache.org/job/Lucene-Solr-Tests-4.x-Java6/1102/</url><builtOn>lucene</builtOn><changeSet><item><affectedPath></affectedPath><affectedPath>dev-tools</affectedPath><affectedPath>lucene</affectedPath><affectedPath>lucene/BUILD.txt</affectedPath><affectedPath>lucene/CHANGES.txt</affectedPath><affectedPath>lucene/JRE_VERSION_MIGRATION.txt</affectedPath><affectedPath>lucene/LICENSE.txt</affectedPath><affectedPath>lucene/MIGRATE.txt</affectedPath><affectedPath>lucene/NOTICE.txt</affectedPath><affectedPath>lucene/README.txt</affectedPath><affectedPath>lucene/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>lucene/analysis</affectedPath><affectedPath>lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</affectedPath><affectedPath>lucene/backwards</affectedPath><affectedPath>lucene/benchmark</affectedPath><affectedPath>lucene/build.xml</affectedPath><affectedPath>lucene/codecs</affectedPath><affectedPath>lucene/common-build.xml</affectedPath><affectedPath>lucene/core</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</affectedPath><affectedPath>lucene/demo</affectedPath><affectedPath>lucene/facet</affectedPath><affectedPath>lucene/grouping</affectedPath><affectedPath>lucene/highlighter</affectedPath><affectedPath>lucene/ivy-settings.xml</affectedPath><affectedPath>lucene/join</affectedPath><affectedPath>lucene/licenses</affectedPath><affectedPath>lucene/memory</affectedPath><affectedPath>lucene/misc</affectedPath><affectedPath>lucene/module-build.xml</affectedPath><affectedPath>lucene/queries</affectedPath><affectedPath>lucene/queryparser</affectedPath><affectedPath>lucene/sandbox</affectedPath><affectedPath>lucene/site</affectedPath><affectedPath>lucene/spatial</affectedPath><affectedPath>lucene/suggest</affectedPath><affectedPath>lucene/test-framework</affectedPath><affectedPath>lucene/tools</affectedPath><affectedPath>solr</affectedPath><affectedPath>solr/CHANGES.txt</affectedPath><affectedPath>solr/LICENSE.txt</affectedPath><affectedPath>solr/NOTICE.txt</affectedPath><affectedPath>solr/README.txt</affectedPath><affectedPath>solr/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>solr/build.xml</affectedPath><affectedPath>solr/cloud-dev</affectedPath><affectedPath>solr/common-build.xml</affectedPath><affectedPath>solr/contrib</affectedPath><affectedPath>solr/core</affectedPath><affectedPath>solr/core/src/java/org/apache/solr/schema/IndexSchema.java</affectedPath><affectedPath>solr/example</affectedPath><affectedPath>solr/licenses</affectedPath><affectedPath>solr/licenses/httpclient-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpclient-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpcore-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpcore-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpmime-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpmime-NOTICE.txt</affectedPath><affectedPath>solr/scripts</affectedPath><affectedPath>solr/site</affectedPath><affectedPath>solr/solrj</affectedPath><affectedPath>solr/test-framework</affectedPath><affectedPath>solr/testlogging.properties</affectedPath><affectedPath>solr/webapp</affectedPath><author><absoluteUrl>https://builds.apache.org/user/markrmiller</absoluteUrl><fullName>markrmiller</fullName></author><commitId>1419960</commitId><timestamp>-1</timestamp><date>2012-12-11T01:08:10.682365Z</date><msg>SOLR-2986: Add MoreLikeThis to warning about features that require uniqueKey. Also, change the warning to warn log level.</msg><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/dev-tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/BUILD.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/MIGRATE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/backwards</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/benchmark</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/codecs</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/demo</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/facet</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/grouping</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/highlighter</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/ivy-settings.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/join</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/memory</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/misc</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/module-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queries</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queryparser</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/sandbox</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/spatial</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/suggest</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/cloud-dev</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/contrib</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/example</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/scripts</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/solrj</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/testlogging.properties</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp</file></path><revision>1419960</revision><user>markrmiller</user></item><item><affectedPath></affectedPath><affectedPath>dev-tools</affectedPath><affectedPath>lucene</affectedPath><affectedPath>lucene/BUILD.txt</affectedPath><affectedPath>lucene/CHANGES.txt</affectedPath><affectedPath>lucene/JRE_VERSION_MIGRATION.txt</affectedPath><affectedPath>lucene/LICENSE.txt</affectedPath><affectedPath>lucene/MIGRATE.txt</affectedPath><affectedPath>lucene/NOTICE.txt</affectedPath><affectedPath>lucene/README.txt</affectedPath><affectedPath>lucene/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>lucene/analysis</affectedPath><affectedPath>lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</affectedPath><affectedPath>lucene/backwards</affectedPath><affectedPath>lucene/benchmark</affectedPath><affectedPath>lucene/build.xml</affectedPath><affectedPath>lucene/codecs</affectedPath><affectedPath>lucene/common-build.xml</affectedPath><affectedPath>lucene/core</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</affectedPath><affectedPath>lucene/demo</affectedPath><affectedPath>lucene/facet</affectedPath><affectedPath>lucene/grouping</affectedPath><affectedPath>lucene/highlighter</affectedPath><affectedPath>lucene/ivy-settings.xml</affectedPath><affectedPath>lucene/join</affectedPath><affectedPath>lucene/licenses</affectedPath><affectedPath>lucene/memory</affectedPath><affectedPath>lucene/misc</affectedPath><affectedPath>lucene/module-build.xml</affectedPath><affectedPath>lucene/queries</affectedPath><affectedPath>lucene/queryparser</affectedPath><affectedPath>lucene/sandbox</affectedPath><affectedPath>lucene/site</affectedPath><affectedPath>lucene/spatial</affectedPath><affectedPath>lucene/suggest</affectedPath><affectedPath>lucene/test-framework</affectedPath><affectedPath>lucene/tools</affectedPath><affectedPath>solr</affectedPath><affectedPath>solr/CHANGES.txt</affectedPath><affectedPath>solr/LICENSE.txt</affectedPath><affectedPath>solr/NOTICE.txt</affectedPath><affectedPath>solr/README.txt</affectedPath><affectedPath>solr/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>solr/build.xml</affectedPath><affectedPath>solr/cloud-dev</affectedPath><affectedPath>solr/common-build.xml</affectedPath><affectedPath>solr/contrib</affectedPath><affectedPath>solr/core</affectedPath><affectedPath>solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java</affectedPath><affectedPath>solr/example</affectedPath><affectedPath>solr/licenses</affectedPath><affectedPath>solr/licenses/httpclient-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpclient-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpcore-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpcore-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpmime-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpmime-NOTICE.txt</affectedPath><affectedPath>solr/scripts</affectedPath><affectedPath>solr/site</affectedPath><affectedPath>solr/solrj</affectedPath><affectedPath>solr/test-framework</affectedPath><affectedPath>solr/testlogging.properties</affectedPath><affectedPath>solr/webapp</affectedPath><author><absoluteUrl>https://builds.apache.org/user/markrmiller</absoluteUrl><fullName>markrmiller</fullName></author><commitId>1419953</commitId><timestamp>-1</timestamp><date>2012-12-11T00:56:19.684855Z</date><msg>SOLR-4071: Validate that name is pass to Collections API create, and behave the same way as on startup when collection.configName is not explicitly passed.</msg><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/dev-tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/BUILD.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/MIGRATE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/backwards</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/benchmark</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/codecs</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/demo</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/facet</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/grouping</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/highlighter</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/ivy-settings.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/join</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/memory</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/misc</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/module-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queries</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queryparser</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/sandbox</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/spatial</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/suggest</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/cloud-dev</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/contrib</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/example</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/scripts</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/solrj</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/testlogging.properties</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp</file></path><revision>1419953</revision><user>markrmiller</user></item><item><affectedPath></affectedPath><affectedPath>dev-tools</affectedPath><affectedPath>lucene</affectedPath><affectedPath>lucene/BUILD.txt</affectedPath><affectedPath>lucene/CHANGES.txt</affectedPath><affectedPath>lucene/JRE_VERSION_MIGRATION.txt</affectedPath><affectedPath>lucene/LICENSE.txt</affectedPath><affectedPath>lucene/MIGRATE.txt</affectedPath><affectedPath>lucene/NOTICE.txt</affectedPath><affectedPath>lucene/README.txt</affectedPath><affectedPath>lucene/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>lucene/analysis</affectedPath><affectedPath>lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</affectedPath><affectedPath>lucene/backwards</affectedPath><affectedPath>lucene/benchmark</affectedPath><affectedPath>lucene/build.xml</affectedPath><affectedPath>lucene/codecs</affectedPath><affectedPath>lucene/common-build.xml</affectedPath><affectedPath>lucene/core</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</affectedPath><affectedPath>lucene/demo</affectedPath><affectedPath>lucene/facet</affectedPath><affectedPath>lucene/grouping</affectedPath><affectedPath>lucene/highlighter</affectedPath><affectedPath>lucene/ivy-settings.xml</affectedPath><affectedPath>lucene/join</affectedPath><affectedPath>lucene/licenses</affectedPath><affectedPath>lucene/memory</affectedPath><affectedPath>lucene/misc</affectedPath><affectedPath>lucene/module-build.xml</affectedPath><affectedPath>lucene/queries</affectedPath><affectedPath>lucene/queryparser</affectedPath><affectedPath>lucene/sandbox</affectedPath><affectedPath>lucene/site</affectedPath><affectedPath>lucene/spatial</affectedPath><affectedPath>lucene/suggest</affectedPath><affectedPath>lucene/test-framework</affectedPath><affectedPath>lucene/tools</affectedPath><affectedPath>solr</affectedPath><affectedPath>solr/CHANGES.txt</affectedPath><affectedPath>solr/LICENSE.txt</affectedPath><affectedPath>solr/NOTICE.txt</affectedPath><affectedPath>solr/README.txt</affectedPath><affectedPath>solr/SYSTEM_REQUIREMENTS.txt</affectedPath><affectedPath>solr/build.xml</affectedPath><affectedPath>solr/cloud-dev</affectedPath><affectedPath>solr/common-build.xml</affectedPath><affectedPath>solr/contrib</affectedPath><affectedPath>solr/core</affectedPath><affectedPath>solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java</affectedPath><affectedPath>solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java</affectedPath><affectedPath>solr/example</affectedPath><affectedPath>solr/licenses</affectedPath><affectedPath>solr/licenses/httpclient-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpclient-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpcore-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpcore-NOTICE.txt</affectedPath><affectedPath>solr/licenses/httpmime-LICENSE-ASL.txt</affectedPath><affectedPath>solr/licenses/httpmime-NOTICE.txt</affectedPath><affectedPath>solr/scripts</affectedPath><affectedPath>solr/site</affectedPath><affectedPath>solr/solrj</affectedPath><affectedPath>solr/test-framework</affectedPath><affectedPath>solr/testlogging.properties</affectedPath><affectedPath>solr/webapp</affectedPath><affectedPath>solr/webapp/web/js/scripts/cores.js</affectedPath><affectedPath>solr/webapp/web/js/scripts/dashboard.js</affectedPath><affectedPath>solr/webapp/web/tpl/cores.html</affectedPath><affectedPath>solr/webapp/web/tpl/dashboard.html</affectedPath><author><absoluteUrl>https://builds.apache.org/user/markrmiller</absoluteUrl><fullName>markrmiller</fullName></author><commitId>1419940</commitId><timestamp>-1</timestamp><date>2012-12-11T00:10:12.700549Z</date><msg>SOLR-3948: Calculate/display deleted documents in admin interface.</msg><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/dev-tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/BUILD.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/MIGRATE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/backwards</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/benchmark</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/codecs</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/demo</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/facet</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/grouping</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/highlighter</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/ivy-settings.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/join</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/memory</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/misc</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/module-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queries</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/queryparser</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/sandbox</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/spatial</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/suggest</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/lucene/tools</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/CHANGES.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/LICENSE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/README.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/SYSTEM_REQUIREMENTS.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/cloud-dev</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/common-build.xml</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/contrib</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/example</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpclient-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpcore-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-LICENSE-ASL.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/licenses/httpmime-NOTICE.txt</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/scripts</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/site</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/solrj</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/test-framework</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/testlogging.properties</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp/web/js/scripts/cores.js</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp/web/js/scripts/dashboard.js</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp/web/tpl/cores.html</file></path><path><editType>edit</editType><file>/lucene/dev/branches/branch_4x/solr/webapp/web/tpl/dashboard.html</file></path><revision>1419940</revision><user>markrmiller</user></item><kind>svn</kind><revision><module>http://svn.apache.org/repos/asf/lucene/dev/branches/branch_4x</module><revision>1419960</revision></revision></changeSet><culprit><absoluteUrl>https://builds.apache.org/user/markrmiller</absoluteUrl><fullName>markrmiller</fullName></culprit></freeStyleBuild>