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