You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by gl...@ca.ibm.com on 2000/07/18 15:13:42 UTC
[PATCH] to XmlLogger to support subbuilds
First off, congrats on the release, and thanks to all the commiters for the
hard work. You've built a great tool, and we all appreciate it. Now back
to business. :-)
This patch adds subbuild support to XmlLogger. The new build targets and
tasks are elements of the ant task. Also added support for a different
output filename with a -DXmlLogger.file=blah.xml addition to the command
line. This will do in the short term untill there is concensous on a
general mechanism for passing that kind of information to a listener from
the command line.
Index: jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java,v
retrieving revision 1.2
diff -u -r1.2 XmlLogger.java
--- jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java
2000/06/29 15:32:37 1.2
+++ jakarta-ant/src/main/org/apache/tools/ant/XmlLogger.java
2000/07/18 13:09:51
@@ -55,6 +55,7 @@
package org.apache.tools.ant;
import java.io.*;
+import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
@@ -96,6 +97,12 @@
private long buildStartTime;
private long targetStartTime;
private long taskStartTime;
+
+ private Stack targetTimeStack = new Stack();
+ private Stack targetStack = new Stack();
+ private Stack taskTimeStack = new Stack();
+ private Stack taskStack = new Stack();
+
/**
* Constructs a new BuildListener that logs build events to an XML
file.
@@ -105,7 +112,6 @@
public void buildStarted(BuildEvent event) {
buildStartTime = System.currentTimeMillis();
-
doc = builder.newDocument();
buildElement = doc.createElement(BUILD_TAG);
}
@@ -117,21 +123,29 @@
if (event.getException() != null) {
buildElement.setAttribute(ERROR_ATTR,
event.getException().toString());
}
-
+
try {
- Writer out = new FileWriter("log.xml");
- out.write("<?xml:stylesheet type=\"text/xsl\"
href=\"log.xsl\"?>\n\n");
- write(buildElement, out, 0);
- out.flush();
- out.close();
-
+ String outFilename =
event.getProject().getProperty("XmlLogger.file");
+ if (outFilename == null) {
+ outFilename = "log.xml";
+ }
+ Writer out = new FileWriter(outFilename);
+ out.write("<?xml:stylesheet type=\"text/xsl\"
href=\"log.xsl\"?>\n\n");
+ write(buildElement, out, 0);
+ out.flush();
+ out.close();
}
catch(IOException exc) {
throw new BuildException("Unable to close log file", exc);
}
+ buildElement = null;
}
public void targetStarted(BuildEvent event) {
+ if (targetElement != null) {
+ targetTimeStack.push(new Long(targetStartTime));
+ targetStack.push(targetElement);
+ }
targetStartTime = System.currentTimeMillis();
targetElement = doc.createElement(TARGET_TAG);
targetElement.setAttribute(NAME_ATTR,
event.getTarget().getName());
@@ -140,12 +154,27 @@
public void targetFinished(BuildEvent event) {
long totalTime = System.currentTimeMillis() - targetStartTime;
targetElement.setAttribute(TIME_ATTR, formatTime(totalTime));
- buildElement.appendChild(targetElement);
+
+ if (taskElement == null) {
+ buildElement.appendChild(targetElement);
+ } else {
+ taskElement.appendChild(targetElement);
+ }
targetElement = null;
+
+ if (!targetStack.isEmpty()) {
+ targetStartTime = ((Long) targetTimeStack.pop()).longValue();
+ targetElement = (Element) targetStack.pop();
+ }
}
public void taskStarted(BuildEvent event) {
+ if (taskElement != null) {
+ taskTimeStack.push(new Long(taskStartTime));
+ taskStack.push(taskElement);
+ }
+
taskStartTime = System.currentTimeMillis();
taskElement = doc.createElement(TASK_TAG);
@@ -165,6 +194,11 @@
targetElement.appendChild(taskElement);
taskElement = null;
+
+ if (!taskStack.isEmpty()) {
+ taskStartTime = ((Long) taskTimeStack.pop()).longValue();
+ taskElement = (Element) taskStack.pop();
+ }
}
public void messageLogged(BuildEvent event)
{();p()).longValue();e(););>\n\n");n");
Glenn McAllister
TID - Software Developer - VisualAge for Java
IBM Toronto Lab, (416) 448-3805
"An approximate answer to the right question is better than the
right answer to the wrong question." - John W. Tukey