Browse Source

More output management

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272313 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 23 years ago
parent
commit
7be61ff46c
9 changed files with 61 additions and 37 deletions
  1. +13
    -8
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java
  2. +21
    -12
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.java
  3. +9
    -9
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java
  4. +0
    -1
      proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.java
  5. +6
    -2
      proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java
  6. +0
    -1
      proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java
  7. +5
    -2
      proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.java
  8. +4
    -2
      proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.java
  9. +3
    -0
      proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.java

+ 13
- 8
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java View File

@@ -63,6 +63,7 @@ import org.apache.ant.common.event.BuildListener;
import org.apache.ant.common.model.ModelElement; import org.apache.ant.common.model.ModelElement;
import org.apache.ant.common.util.DemuxOutputReceiver; import org.apache.ant.common.util.DemuxOutputReceiver;
import org.apache.ant.common.event.MessageLevel; import org.apache.ant.common.event.MessageLevel;
import org.apache.ant.common.util.ExecutionException;


/** /**
* BuildEventSupport is used by classes which which to send build events to * BuildEventSupport is used by classes which which to send build events to
@@ -230,16 +231,20 @@ public class BuildEventSupport implements DemuxOutputReceiver {
*/ */
public void threadOutput(String line, boolean isError) { public void threadOutput(String line, boolean isError) {
Task task = (Task) threadTasks.get(Thread.currentThread()); Task task = (Task) threadTasks.get(Thread.currentThread());
if (task == null) {
fireMessageLogged(this, line,
isError ? MessageLevel.MSG_ERR : MessageLevel.MSG_INFO);
} else {
if (isError) {
task.handleSystemErr(line);
} else {
task.handleSystemOut(line);
if (task != null) {
try {
if (isError) {
task.handleSystemErr(line);
} else {
task.handleSystemOut(line);
}
return;
} catch (ExecutionException e) {
// ignore just log normally
} }
} }
fireMessageLogged(this, line,
isError ? MessageLevel.MSG_ERR : MessageLevel.MSG_INFO);
} }
} }



+ 21
- 12
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.java View File

@@ -77,7 +77,7 @@ public class CoreExecService implements ExecService {


/** The Frame this service instance is working for */ /** The Frame this service instance is working for */
private Frame frame; private Frame frame;
/** A map of subbuild keys to the frame of the subbuild. */ /** A map of subbuild keys to the frame of the subbuild. */
private Map subBuilds = new HashMap(); private Map subBuilds = new HashMap();


@@ -152,18 +152,12 @@ public class CoreExecService implements ExecService {




/** /**
* Handle subbuild output.
* Gets the Frame for a subbuild based on the key
* *
* @param subbuildKey the core's key for managing the subbuild.
* @param line the content produce by the current thread.
* @param isErr true if this content is from the thread's error stream.
* @param key Description of the Parameter
* @return the subbuild's Frame
* @exception ExecutionException if the build cannot be found.
*/ */
public void handleBuildOutput(Object subbuildKey, String line,
boolean isErr) throws ExecutionException {
getSubbuildFrame(subbuildKey).threadOutput(line, isErr);
}


private Frame getSubbuildFrame(Object key) throws ExecutionException { private Frame getSubbuildFrame(Object key) throws ExecutionException {
Frame subFrame = (Frame) subBuilds.get(key); Frame subFrame = (Frame) subBuilds.get(key);


@@ -173,7 +167,22 @@ public class CoreExecService implements ExecService {
} }
return subFrame; return subFrame;
} }


/**
* Handle subbuild output.
*
* @param subbuildKey the core's key for managing the subbuild.
* @param line the content produce by the current thread.
* @param isErr true if this content is from the thread's error stream.
* @exception ExecutionException if the subbuild cannot be found.
*/
public void handleBuildOutput(Object subbuildKey, String line,
boolean isErr) throws ExecutionException {
getSubbuildFrame(subbuildKey).threadOutput(line, isErr);
}


/** /**
* Run a build which have been previously setup * Run a build which have been previously setup
* *


+ 9
- 9
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java View File

@@ -190,7 +190,7 @@ public class Frame implements DemuxOutputReceiver {
this.project = project; this.project = project;
referencedFrames = new HashMap(); referencedFrames = new HashMap();


for (Iterator i = project.getReferencedProjectNames(); i.hasNext(); ) {
for (Iterator i = project.getReferencedProjectNames(); i.hasNext();) {
String referenceName = (String) i.next(); String referenceName = (String) i.next();
Project referencedProject Project referencedProject
= project.getReferencedProject(referenceName); = project.getReferencedProject(referenceName);
@@ -540,7 +540,7 @@ public class Frame implements DemuxOutputReceiver {
* @exception ExecutionException if the frame cannot be created. * @exception ExecutionException if the frame cannot be created.
*/ */
protected void addProperties(Map properties) throws ExecutionException { protected void addProperties(Map properties) throws ExecutionException {
for (Iterator i = properties.keySet().iterator(); i.hasNext(); ) {
for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
String name = (String) i.next(); String name = (String) i.next();
Object value = properties.get(name); Object value = properties.get(name);


@@ -562,7 +562,7 @@ public class Frame implements DemuxOutputReceiver {
= new Frame(standardLibs, initConfig, config); = new Frame(standardLibs, initConfig, config);


newFrame.setProject(project); newFrame.setProject(project);
for (Iterator j = eventSupport.getListeners(); j.hasNext(); ) {
for (Iterator j = eventSupport.getListeners(); j.hasNext();) {
BuildListener listener = (BuildListener) j.next(); BuildListener listener = (BuildListener) j.next();


newFrame.addBuildListener(listener); newFrame.addBuildListener(listener);
@@ -588,7 +588,7 @@ public class Frame implements DemuxOutputReceiver {
* @param listener the listener to be added to the frame * @param listener the listener to be added to the frame
*/ */
protected void addBuildListener(BuildListener listener) { protected void addBuildListener(BuildListener listener) {
for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
for (Iterator i = getReferencedFrames(); i.hasNext();) {
Frame referencedFrame = (Frame) i.next(); Frame referencedFrame = (Frame) i.next();


referencedFrame.addBuildListener(listener); referencedFrame.addBuildListener(listener);
@@ -603,7 +603,7 @@ public class Frame implements DemuxOutputReceiver {
* @param listener the listener to be removed * @param listener the listener to be removed
*/ */
protected void removeBuildListener(BuildListener listener) { protected void removeBuildListener(BuildListener listener) {
for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
for (Iterator i = getReferencedFrames(); i.hasNext();) {
Frame subFrame = (Frame) i.next(); Frame subFrame = (Frame) i.next();


subFrame.removeBuildListener(listener); subFrame.removeBuildListener(listener);
@@ -632,7 +632,7 @@ public class Frame implements DemuxOutputReceiver {
executeTarget(defaultTarget); executeTarget(defaultTarget);
} }
} else { } else {
for (Iterator i = targets.iterator(); i.hasNext(); ) {
for (Iterator i = targets.iterator(); i.hasNext();) {
String targetName = (String) i.next(); String targetName = (String) i.next();


log("Executing target: " + targetName, MessageLevel.MSG_DEBUG); log("Executing target: " + targetName, MessageLevel.MSG_DEBUG);
@@ -657,7 +657,7 @@ public class Frame implements DemuxOutputReceiver {
// firstly build a list of fully qualified target names to execute. // firstly build a list of fully qualified target names to execute.
List dependencyOrder = project.getTargetDependencies(targetName); List dependencyOrder = project.getTargetDependencies(targetName);


for (Iterator i = dependencyOrder.iterator(); i.hasNext(); ) {
for (Iterator i = dependencyOrder.iterator(); i.hasNext();) {
String fullTargetName = (String) i.next(); String fullTargetName = (String) i.next();
Frame frame = getContainingFrame(fullTargetName); Frame frame = getContainingFrame(fullTargetName);
String localTargetName = getNameInFrame(fullTargetName); String localTargetName = getNameInFrame(fullTargetName);
@@ -773,7 +773,7 @@ public class Frame implements DemuxOutputReceiver {
* failed * failed
*/ */
protected void initialize() throws ExecutionException { protected void initialize() throws ExecutionException {
for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
for (Iterator i = getReferencedFrames(); i.hasNext();) {
Frame referencedFrame = (Frame) i.next(); Frame referencedFrame = (Frame) i.next();


referencedFrame.initialize(); referencedFrame.initialize();
@@ -816,7 +816,7 @@ public class Frame implements DemuxOutputReceiver {
} }
setDataValue(MagicProperties.BASEDIR, baseDir.getAbsolutePath(), true); setDataValue(MagicProperties.BASEDIR, baseDir.getAbsolutePath(), true);


for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
for (Iterator i = getReferencedFrames(); i.hasNext();) {
Frame refFrame = (Frame) i.next(); Frame refFrame = (Frame) i.next();


refFrame.determineBaseDirs(); refFrame.determineBaseDirs();


+ 0
- 1
proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.java View File

@@ -53,7 +53,6 @@
*/ */
package org.apache.ant.antlib.system; package org.apache.ant.antlib.system;
import java.io.File; import java.io.File;
import org.apache.ant.common.service.ExecService;
import org.apache.ant.common.util.ExecutionException; import org.apache.ant.common.util.ExecutionException;
import org.apache.ant.common.service.MagicProperties; import org.apache.ant.common.service.MagicProperties;
import org.apache.ant.common.util.FileUtils; import org.apache.ant.common.util.FileUtils;


+ 6
- 2
proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java View File

@@ -325,11 +325,13 @@ public abstract class AntBase extends AbstractTask {
* System.err, directly or indirectly. * System.err, directly or indirectly.
* *
* @param line The line of error info produce by the task * @param line The line of error info produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
public void handleSystemErr(String line) {
public void handleSystemErr(String line) throws ExecutionException {
if (subbuildKey == null) { if (subbuildKey == null) {
super.handleSystemErr(line); super.handleSystemErr(line);
} else { } else {
execService.handleBuildOutput(subbuildKey, line, true);
} }
} }


@@ -341,11 +343,13 @@ public abstract class AntBase extends AbstractTask {
* or indirectly. * or indirectly.
* *
* @param line The line of content produce by the task * @param line The line of content produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
public void handleSystemOut(String line) {
public void handleSystemOut(String line) throws ExecutionException {
if (subbuildKey == null) { if (subbuildKey == null) {
super.handleSystemOut(line); super.handleSystemOut(line);
} else { } else {
execService.handleBuildOutput(subbuildKey, line, false);
} }
} }




+ 0
- 1
proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java View File

@@ -52,7 +52,6 @@
* <http://www.apache.org/>. * <http://www.apache.org/>.
*/ */
package org.apache.ant.antlib.system; package org.apache.ant.antlib.system;
import org.apache.ant.common.service.ExecService;
import org.apache.ant.common.util.ExecutionException; import org.apache.ant.common.util.ExecutionException;
import org.apache.ant.common.service.MagicProperties; import org.apache.ant.common.service.MagicProperties;




+ 5
- 2
proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.java View File

@@ -53,6 +53,7 @@
*/ */
package org.apache.ant.common.antlib; package org.apache.ant.common.antlib;
import org.apache.ant.common.event.MessageLevel; import org.apache.ant.common.event.MessageLevel;
import org.apache.ant.common.util.ExecutionException;


/** /**
* Abstract implementation of the Task interface * Abstract implementation of the Task interface
@@ -89,8 +90,9 @@ public abstract class AbstractTask extends AbstractComponent implements Task {
* directly or indirectly. * directly or indirectly.
* *
* @param line The line of content produce by the task * @param line The line of content produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
public void handleSystemOut(String line) {
public void handleSystemOut(String line) throws ExecutionException {
// default behaviout is to log at INFO level // default behaviout is to log at INFO level
log(line, MessageLevel.MSG_INFO); log(line, MessageLevel.MSG_INFO);
} }
@@ -102,8 +104,9 @@ public abstract class AbstractTask extends AbstractComponent implements Task {
* System.err, directly or indirectly. * System.err, directly or indirectly.
* *
* @param line The line of error info produce by the task * @param line The line of error info produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
public void handleSystemErr(String line) {
public void handleSystemErr(String line) throws ExecutionException {
// default behaviout is to log at WARN level // default behaviout is to log at WARN level
log(line, MessageLevel.MSG_WARN); log(line, MessageLevel.MSG_WARN);
} }


+ 4
- 2
proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.java View File

@@ -89,8 +89,9 @@ public interface Task extends ExecutionComponent {
* directly or indirectly. * directly or indirectly.
* *
* @param line The line of content produce by the task * @param line The line of content produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
void handleSystemOut(String line);
void handleSystemOut(String line) throws ExecutionException;


/** /**
* Handle error information produced by the task. When a task prints to * Handle error information produced by the task. When a task prints to
@@ -99,7 +100,8 @@ public interface Task extends ExecutionComponent {
* System.err, directly or indirectly. * System.err, directly or indirectly.
* *
* @param line The line of error info produce by the task * @param line The line of error info produce by the task
* @exception ExecutionException if the output cannot be handled.
*/ */
void handleSystemErr(String line);
void handleSystemErr(String line) throws ExecutionException;
} }



+ 3
- 0
proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.java View File

@@ -93,6 +93,7 @@ public interface ExecService {
* *
* @param properties the initiali properties to be used in the build * @param properties the initiali properties to be used in the build
* @exception ExecutionException if the subbuild cannot be setup * @exception ExecutionException if the subbuild cannot be setup
* @return a key to the build allowing it to be executed and managed
*/ */
Object setupBuild(Map properties) Object setupBuild(Map properties)
throws ExecutionException; throws ExecutionException;
@@ -136,6 +137,8 @@ public interface ExecService {
* @param subbuildKey the core's key for managing the subbuild. * @param subbuildKey the core's key for managing the subbuild.
* @param line the content produce by the current thread. * @param line the content produce by the current thread.
* @param isErr true if this content is from the thread's error stream. * @param isErr true if this content is from the thread's error stream.
*
* @exception ExecutionException if the subbuild cannot be found.
*/ */
void handleBuildOutput(Object subbuildKey, String line, boolean isErr) void handleBuildOutput(Object subbuildKey, String line, boolean isErr)
throws ExecutionException; throws ExecutionException;


Loading…
Cancel
Save