@Test public void shouldApplyToBuilds() { Builds builds = new Builds(); b0.applyTo(builds); b1.applyTo(builds); assertBuildNames(builds, "build"); assertJobNames(builds.build("build"), "job"); assertEvents(builds.build("build").job("job").events, e1, e0); }
/** * Fired when a message is logged, this adds a message element to the most appropriate parent * element (task, target or build) and records the priority and text of the message. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void messageLogged(BuildEvent event) { int priority = event.getPriority(); if (priority > msgOutputLevel) { return; } Element messageElement = doc.createElement(MESSAGE_TAG); String name = "debug"; switch (event.getPriority()) { case Project.MSG_ERR: name = "error"; break; case Project.MSG_WARN: name = "warn"; break; case Project.MSG_INFO: name = "info"; break; default: name = "debug"; break; } messageElement.setAttribute(PRIORITY_ATTR, name); Text messageText = doc.createCDATASection(event.getMessage()); messageElement.appendChild(messageText); TimedElement parentElement = null; Task task = event.getTask(); Target target = event.getTarget(); if (task != null) { parentElement = getTaskElement(task); } if (parentElement == null && target != null) { parentElement = (TimedElement) targets.get(target); } /* if (parentElement == null) { Stack threadStack = (Stack) threadStacks.get(Thread.currentThread()); if (threadStack != null) { if (!threadStack.empty()) { parentElement = (TimedElement) threadStack.peek(); } } } */ if (parentElement != null) { parentElement.element.appendChild(messageElement); } else { buildElement.element.appendChild(messageElement); } }
/** * Fired when a task starts building, this pushes a timed element for the task onto the stack of * elements for the current thread, remembering the current time and the name of the task. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void taskStarted(BuildEvent event) { TimedElement taskElement = new TimedElement(); taskElement.startTime = System.currentTimeMillis(); taskElement.element = doc.createElement(TASK_TAG); Task task = event.getTask(); String name = event.getTask().getTaskName(); taskElement.element.setAttribute(NAME_ATTR, name); taskElement.element.setAttribute(LOCATION_ATTR, event.getTask().getLocation().toString()); tasks.put(task, taskElement); getStack().push(taskElement); }
/** * Fired when the build finishes, this adds the time taken and any error stacktrace to the build * element and writes the document to disk. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void buildFinished(BuildEvent event) { long totalTime = System.currentTimeMillis() - buildElement.startTime; buildElement.element.setAttribute(TIME_ATTR, DefaultLogger.formatTime(totalTime)); if (event.getException() != null) { buildElement.element.setAttribute(ERROR_ATTR, event.getException().toString()); // print the stacktrace in the build file it is always useful... // better have too much info than not enough. Throwable t = event.getException(); Text errText = doc.createCDATASection(StringUtils.getStackTrace(t)); Element stacktrace = doc.createElement(STACKTRACE_TAG); stacktrace.appendChild(errText); buildElement.element.appendChild(stacktrace); } String outFilename = event.getProject().getProperty("XmlLogger.file"); if (outFilename == null) { outFilename = "log.xml"; } String xslUri = event.getProject().getProperty("ant.XmlLogger.stylesheet.uri"); if (xslUri == null) { xslUri = "log.xsl"; } Writer out = null; try { // specify output in UTF8 otherwise accented characters will blow // up everything OutputStream stream = outStream; if (stream == null) { stream = new FileOutputStream(outFilename); } out = new OutputStreamWriter(stream, "UTF8"); out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); if (xslUri.length() > 0) { out.write("<?xml-stylesheet type=\"text/xsl\" href=\"" + xslUri + "\"?>\n\n"); } (new DOMElementWriter()).write(buildElement.element, out, 0, "\t"); out.flush(); } catch (IOException exc) { throw new BuildException("Unable to write log file", exc); } finally { if (out != null) { try { out.close(); } catch (IOException e) { // ignore } } } buildElement = null; }
/** * Fired when a task finishes building, this adds the time taken and any error stacktrace to the * appropriate task element in the log. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void taskFinished(BuildEvent event) { Task task = event.getTask(); TimedElement taskElement = (TimedElement) tasks.get(task); if (taskElement != null) { long totalTime = System.currentTimeMillis() - taskElement.startTime; // taskElement.element.setAttribute(TIME_ATTR, // DefaultLogger.formatTime(totalTime)); Target target = task.getOwningTarget(); TimedElement targetElement = null; if (target != null) { targetElement = (TimedElement) targets.get(target); } if (targetElement == null) { buildElement.element.appendChild(taskElement.element); } else { targetElement.element.appendChild(taskElement.element); } Stack threadStack = getStack(); if (!threadStack.empty()) { TimedElement poppedStack = (TimedElement) threadStack.pop(); if (poppedStack != taskElement) { throw new RuntimeException( "Mismatch - popped element = " + poppedStack + " finished task element = " + taskElement); } } tasks.remove(task); } else { throw new RuntimeException("Unknown task " + task + " not in " + tasks); } }
/** * Fired when a target finishes building, this adds the time taken and any error stacktrace to the * appropriate target element in the log. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void targetFinished(BuildEvent event) { System.out.println("target finished in cruise control HeliumCCLogger"); Target target = event.getTarget(); TimedElement targetElement = (TimedElement) targets.get(target); if (targetElement != null) { long totalTime = System.currentTimeMillis() - targetElement.startTime; // targetElement.element.setAttribute(TIME_ATTR, // DefaultLogger.formatTime(totalTime)); TimedElement parentElement = null; Stack threadStack = getStack(); if (!threadStack.empty()) { TimedElement poppedStack = (TimedElement) threadStack.pop(); if (poppedStack != targetElement) { throw new RuntimeException( "Mismatch - popped element = " + poppedStack + " finished target element = " + targetElement); } if (!threadStack.empty()) { parentElement = (TimedElement) threadStack.peek(); } } if (parentElement == null) { buildElement.element.appendChild(targetElement.element); } else { parentElement.element.appendChild(targetElement.element); } } targets.remove(target); }
/** * Fired when a target starts building, this pushes a timed element for the target onto the stack * of elements for the current thread, remembering the current time and the name of the target. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void targetStarted(BuildEvent event) { Target target = event.getTarget(); TimedElement targetElement = new TimedElement(); targetElement.startTime = System.currentTimeMillis(); targetElement.element = doc.createElement(TARGET_TAG); targetElement.element.setAttribute(NAME_ATTR, target.getName()); targets.put(target, targetElement); getStack().push(targetElement); }
/** * Fired when a target starts building, this pushes a timed element for the target onto the stack * of elements for the current thread, remembering the current time and the name of the target. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void targetStarted(BuildEvent event) { System.out.println("target started in cruise control HeliumCCLogger"); Target target = event.getTarget(); TimedElement targetElement = new TimedElement(); targetElement.startTime = System.currentTimeMillis(); targetElement.element = doc.createElement(TARGET_TAG); targetElement.element.setAttribute(NAME_ATTR, target.getName()); targets.put(target, targetElement); getStack().push(targetElement); }
public void subBuildFinished(final BuildEvent event) { if (event.getProject() == this.project) { this.cleanup(); } }
/** * Fired when a message is logged, this adds a message element to the most appropriate parent * element (task, target or build) and records the priority and text of the message. * * @param event An event with any relevant extra information. Will not be <code>null</code>. */ public void messageLogged(BuildEvent event) { if (buildElement == null) { buildElement = new TimedElement(); buildElement.startTime = System.currentTimeMillis(); buildElement.element = doc.createElement(BUILD_TAG); } int priority = event.getPriority(); if (priority > msgOutputLevel) { return; } Element messageElement = doc.createElement(MESSAGE_TAG); String name = "debug"; switch (event.getPriority()) { case MSG_ERR: name = "error"; break; case MSG_WARN: name = "warn"; break; case MSG_INFO: name = "info"; break; default: name = "debug"; break; } messageElement.setAttribute(PRIORITY_ATTR, name); Throwable ex = event.getException(); if (MSG_DEBUG <= msgOutputLevel && ex != null) { Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex)); Element stacktrace = doc.createElement(STACKTRACE_TAG); stacktrace.appendChild(errText); buildElement.element.appendChild(stacktrace); } Text messageText = doc.createCDATASection(event.getMessage()); messageElement.appendChild(messageText); TimedElement parentElement = null; Task task = event.getTask(); Target target = event.getTarget(); if (task != null) { parentElement = getTaskElement(task); } if (parentElement == null && target != null) { parentElement = (TimedElement) targets.get(target); } /* * if (parentElement == null) { Stack threadStack = (Stack) * threadStacks.get(Thread.currentThread()); if (threadStack != null) { * if (!threadStack.empty()) { parentElement = (TimedElement) * threadStack.peek(); } } } */ if (parentElement != null) { parentElement.element.appendChild(messageElement); } else { buildElement.element.appendChild(messageElement); } }
@Test public void shouldConformToEqualsContract() { assertFalse(b0.equals(null)); assertTrue(b0.equals(b0)); assertFalse(b0.equals(new BuildEvent("build", "job", e1))); assertFalse(b0.equals(new BuildEvent("build", "job0", e0))); assertFalse(b0.equals(new BuildEvent("build0", "job", e0))); assertFalse(b0.equals(b1)); assertFalse(b1.equals(b0)); BuildEvent b2 = new BuildEvent("build", "job", e0); assertTrue(b0.equals(b2)); assertTrue(b2.equals(b0)); assertThat(b0.hashCode(), is(b2.hashCode())); assertThat(b0.toString(), is(b2.toString())); }
public void targetFinished(BuildEvent event) { if (event.getTarget().getName().equals("spawn")) { buildFinished = true; } }