mbenson 2004/09/24 11:55:16
Modified: docs/manual/CoreTypes redirector.html
src/main/org/apache/tools/ant/taskdefs Redirector.java
src/main/org/apache/tools/ant/types RedirectorElement.java
src/testcases/org/apache/tools/ant/taskdefs
ExecTaskTest.java
src/etc/testcases/taskdefs/exec exec.xml
. WHATSNEW
Log:
Add alwayslog attribute to <redirector>.
Revision Changes Path
1.3 +35 -23 ant/docs/manual/CoreTypes/redirector.html
Index: redirector.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTypes/redirector.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- redirector.html 23 Apr 2004 07:33:51 -0000 1.2
+++ redirector.html 24 Sep 2004 18:55:16 -0000 1.3
@@ -27,62 +27,66 @@
</tr>
<tr>
<td valign="top">output</td>
- <td valign="top">Name of a file to which to write the output. If the
error stream
- is not also redirected to a file or property, it will appear in this
output.</td>
+ <td valign="top">Name of a file to which output should be written.
+ If the error stream is not also redirected to a file or property,
+ it will appear in this output.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">error</td>
<td valign="top">The file to which the standard error of the
- command should be redirected.</td>
+ command should be redirected.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">logError</td>
- <td valign="top">This attribute is used when you wish to see error
output in Ant's
- log and you are redirecting output to a file/property.
The error
- output will not be included in the output
file/property. If you
- redirect error with the <i>error</i> or
<i>errorProperty</i>
- attributes, this will have no effect.</td>
+ <td valign="top">This attribute is used when you wish to see
+ error output in Ant's log and you are redirecting output to
+ a file/property. The error output will not be included in
+ the output file/property. If you redirect error with the
+ <i>error</i> or <i>errorProperty</i> attributes, this will
+ have no effect.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">append</td>
- <td valign="top">Whether output and error files should be appended to or
overwritten.
- Defaults to <code>false</code>.</td>
+ <td valign="top">Whether output and error files should be
+ appended to rather than overwritten. Defaults to
+ <code>false</code>.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">createemptyfiles</td>
- <td valign="top">Whether output and error files should be created even
when empty.
- Defaults to <code>true</code>.</td>
+ <td valign="top">Whether output and error files should be
+ created even when empty. Defaults to <code>true</code>.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">outputproperty</td>
<td valign="top">The name of a property in which the output of the
- command should be stored. Unless the error stream is redirected to a
separate
- file or stream, this property will include the error output.</td>
+ command should be stored. Unless the error stream is redirected
+ to a separate file or stream, this property will include the
+ error output.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">errorproperty</td>
- <td valign="top">The name of a property in which the standard error of
the
- command should be stored.</td>
+ <td valign="top">The name of a property in which the standard error
+ of the command should be stored.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">input</td>
<td valign="top">A file from which the executed command's standard input
- is taken. This attribute is mutually exclusive with the
- <i>inputstring</i> attribute.</td>
+ is taken. This attribute is mutually exclusive with the
+ <i>inputstring</i> attribute.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">inputstring</td>
<td valign="top">A string which serves as the input stream for the
- executed command. This attribute is mutually exclusive
with the
- <i>input</i> attribute.</td>
+ executed command. This attribute is mutually exclusive with the
+ <i>input</i> attribute.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
@@ -100,6 +104,14 @@
<td valign="top">The error encoding.</td>
<td align="center" valign="top">No</td>
</tr>
+ <tr>
+ <td valign="top">alwayslog</td>
+ <td valign="top">Always send to the log in addition to
+ any other destination. Default <code>false</code>.
+ <i>Since Ant 1.6.3</i>.
+ </td>
+ <td align="center" valign="top">No</td>
+ </tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>inputmapper</h4>
@@ -122,13 +134,13 @@
A nested <errormapper> is not compatible with the
<i>error</i> attribute.</p>
<h4>inputfilterchain</h4>
-<p>One or more <a href="./filterchain.html">FilterChain</a>s can be
+<p>A <a href="./filterchain.html">FilterChain</a> can be
applied to the process input.</p>
<h4>outputfilterchain</h4>
-<p>One or more <a href="./filterchain.html">FilterChain</a>s can be
+<p>A <a href="./filterchain.html">FilterChain</a> can be
applied to the process output.</p>
<h4>errorfilterchain</h4>
-<p>One or more <a href="./filterchain.html">FilterChain</a>s can be
+<p>A <a href="./filterchain.html">FilterChain</a> can be
applied to the error output.</p>
<h3>Usage</h3>
Tasks known to support I/O redirection:
1.20 +47 -37
ant/src/main/org/apache/tools/ant/taskdefs/Redirector.java
Index: Redirector.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Redirector.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Redirector.java 23 Apr 2004 07:33:51 -0000 1.19
+++ Redirector.java 24 Sep 2004 18:55:16 -0000 1.20
@@ -122,6 +122,9 @@
/** Flag which indicates if error and output files are to be appended. */
private boolean append = false;
+ /** Flag which indicates that output should be always sent to the log */
+ private boolean alwaysLog = false;
+
/** Flag which indicates whether files should be created even when
empty. */
private boolean createEmptyFiles = true;
@@ -334,11 +337,22 @@
}
/**
+ * If true, (error and non-error) output will be "teed", redirected
+ * as specified while being sent to Ant's logging mechanism as if no
+ * redirection had taken place. Defaults to false.
+ * @param alwaysLog <code>boolean</code>
+ * @since Ant 1.6.3
+ */
+ public synchronized void setAlwaysLog(boolean alwaysLog) {
+ this.alwaysLog = alwaysLog;
+ }
+
+ /**
* Whether output and error files should be created even when empty.
* Defaults to true.
* @param createEmptyFiles <CODE>boolean</CODE>.
*/
- public void setCreateEmptyFiles(boolean createEmptyFiles) {
+ public synchronized void setCreateEmptyFiles(boolean createEmptyFiles) {
this.createEmptyFiles = createEmptyFiles;
}
@@ -371,7 +385,7 @@
*
* @param outputFilterChains <CODE>Vector</CODE> containing
<CODE>FilterChain</CODE>.
*/
- public void setOutputFilterChains(Vector outputFilterChains) {
+ public synchronized void setOutputFilterChains(Vector
outputFilterChains) {
this.outputFilterChains = outputFilterChains;
}
@@ -380,7 +394,7 @@
*
* @param errorFilterChains <CODE>Vector</CODE> containing
<CODE>FilterChain</CODE>.
*/
- public void setErrorFilterChains(Vector errorFilterChains) {
+ public synchronized void setErrorFilterChains(Vector errorFilterChains) {
this.errorFilterChains = errorFilterChains;
}
@@ -413,35 +427,24 @@
* configuration options.
*/
public synchronized void createStreams() {
- if ((out == null || out.length == 0) && outputProperty == null) {
- outputStream = new LogOutputStream(managingTask,
Project.MSG_INFO);
- } else {
- if (out != null && out.length > 0) {
- String logHead = new StringBuffer("Output ").append(
- ((append) ? "appended" : "redirected")).append(
- " to ").toString();
- outputStream = foldFiles(out, logHead, Project.MSG_VERBOSE);
- }
-
- if (outputProperty != null) {
- if (baos == null) {
- baos = new PropertyOutputStream(outputProperty);
- managingTask.log("Output redirected to property: "
- + outputProperty, Project.MSG_VERBOSE);
- }
- //shield it from being closed by a filtering StreamPumper
- OutputStream keepAliveOutput = new
KeepAliveOutputStream(baos);
- if (outputStream == null) {
- outputStream = keepAliveOutput;
- } else {
- outputStream
- = new TeeOutputStream(outputStream, keepAliveOutput);
- }
- } else {
- baos = null;
+ if (out != null && out.length > 0) {
+ String logHead = new StringBuffer("Output ").append(
+ ((append) ? "appended" : "redirected")).append(
+ " to ").toString();
+ outputStream = foldFiles(out, logHead, Project.MSG_VERBOSE);
+ }
+ if (outputProperty != null) {
+ if (baos == null) {
+ baos = new PropertyOutputStream(outputProperty);
+ managingTask.log("Output redirected to property: "
+ + outputProperty, Project.MSG_VERBOSE);
}
-
- errorStream = outputStream;
+ //shield it from being closed by a filtering StreamPumper
+ OutputStream keepAliveOutput = new KeepAliveOutputStream(baos);
+ outputStream = (outputStream == null) ? keepAliveOutput
+ : new TeeOutputStream(outputStream, keepAliveOutput);
+ } else {
+ baos = null;
}
if (error != null && error.length > 0) {
@@ -449,10 +452,7 @@
((append) ? "appended" : "redirected")).append(
" to ").toString();
errorStream = foldFiles(error, logHead, Project.MSG_VERBOSE);
-
- } else if (logError || errorStream == null) {
- errorStream = new LogOutputStream(managingTask,
Project.MSG_WARN);
- } else { //must be errorStream == outputStream
+ } else if (!(logError || outputStream == null)) {
long funnelTimeout = 0L;
OutputStreamFunneler funneler
= new OutputStreamFunneler(outputStream, funnelTimeout);
@@ -464,7 +464,6 @@
"error splitting output/error streams", eyeOhEx);
}
}
-
if (errorProperty != null) {
if (errorBaos == null) {
errorBaos = new PropertyOutputStream(errorProperty);
@@ -478,7 +477,18 @@
} else {
errorBaos = null;
}
-
+ if (alwaysLog || outputStream == null) {
+ OutputStream outputLog
+ = new LogOutputStream(managingTask, Project.MSG_INFO);
+ outputStream = (outputStream == null)
+ ? outputLog : new TeeOutputStream(outputLog, outputStream);
+ }
+ if (alwaysLog || errorStream == null) {
+ OutputStream errorLog
+ = new LogOutputStream(managingTask, Project.MSG_WARN);
+ errorStream = (errorStream == null)
+ ? errorLog : new TeeOutputStream(errorLog, errorStream);
+ }
if ((outputFilterChains != null && outputFilterChains.size() > 0)
|| !(outputEncoding.equalsIgnoreCase(inputEncoding))) {
try {
1.3 +21 -0
ant/src/main/org/apache/tools/ant/types/RedirectorElement.java
Index: RedirectorElement.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/types/RedirectorElement.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RedirectorElement.java 23 Apr 2004 07:33:51 -0000 1.2
+++ RedirectorElement.java 24 Sep 2004 18:55:16 -0000 1.3
@@ -65,6 +65,9 @@
/** Flag which indicates if error and output files are to be appended. */
private Boolean append;
+ /** Flag which indicates that output should be always sent to the log */
+ private Boolean alwaysLog;
+
/** Flag which indicates whether files should be created even if empty.
*/
private Boolean createEmptyFiles;
@@ -317,6 +320,21 @@
}
/**
+ * If true, (error and non-error) output will be "teed", redirected
+ * as specified while being sent to Ant's logging mechanism as if no
+ * redirection had taken place. Defaults to false.
+ * @param alwaysLog <code>boolean</code>
+ * @since Ant 1.6.3
+ */
+ public void setAlwaysLog(boolean alwaysLog) {
+ if (isReference()) {
+ throw tooManyAttributes();
+ }
+ //pre JDK 1.4 compatible
+ this.alwaysLog = ((alwaysLog) ? Boolean.TRUE : Boolean.FALSE);
+ }
+
+ /**
* Whether output and error files should be created even when empty.
* Defaults to true.
* @param createEmptyFiles <CODE>boolean</CODE>.
@@ -400,6 +418,9 @@
* @param sourcefile <CODE>String</CODE>.
*/
public void configure(Redirector redirector, String sourcefile) {
+ if (alwaysLog != null) {
+ redirector.setAlwaysLog(alwaysLog.booleanValue());
+ }
if (logError != null) {
redirector.setLogError(logError.booleanValue());
}
1.15 +8 -0
ant/src/testcases/org/apache/tools/ant/taskdefs/ExecTaskTest.java
Index: ExecTaskTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/ExecTaskTest.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ExecTaskTest.java 27 Mar 2004 21:22:59 -0000 1.14
+++ ExecTaskTest.java 24 Sep 2004 18:55:16 -0000 1.15
@@ -329,6 +329,14 @@
executeTarget("redirector17");
}
+ public void testRedirector18() {
+ if (getProject().getProperty("test.can.run") == null) {
+ return;
+ }
+ expectLog("redirector18", getProject().getProperty("ant.file")
+ + " out" + getProject().getProperty("ant.file") + " err");
+ }
+
public void testspawn() {
project.executeTarget("init");
if (project.getProperty("test.can.run") == null) {
1.5 +16 -0 ant/src/etc/testcases/taskdefs/exec/exec.xml
Index: exec.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/exec/exec.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- exec.xml 27 Mar 2004 21:22:58 -0000 1.4
+++ exec.xml 24 Sep 2004 18:55:16 -0000 1.5
@@ -313,6 +313,22 @@
<fail if="17fail">Files were created.</fail>
</target>
+ <target name="redirector18" depends="init" if="test.can.run">
+ <exec executable="sh">
+ <arg value="parrot.sh"/>
+ <arg value="${ant.file}" />
+ <redirector alwayslog="true" logerror="true"
+ outputproperty="redirector.out" />
+ </exec>
+ <fail message="property redirector.out has unexpected content">
+ <condition>
+ <not>
+ <equals arg1="${ant.file} out" arg2="${redirector.out}"
/>
+ </not>
+ </condition>
+ </fail>
+ </target>
+
<target name="cleanup">
<delete>
<fileset file="${logFile}" />
1.667 +3 -1 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.666
retrieving revision 1.667
diff -u -r1.666 -r1.667
--- WHATSNEW 24 Sep 2004 15:30:45 -0000 1.666
+++ WHATSNEW 24 Sep 2004 18:55:16 -0000 1.667
@@ -77,12 +77,14 @@
* Enable to choose the regexp implementation without system property.
Bugzilla Report 15390.
-* Expose objects and methods in IntrospectionHelper. Bugzilla Report 30794.
+* Expose objects and methods in IntrospectionHelper. Bugzilla Report 30794.
* Allow file attribute of <move> to rename a directory.
Bugzilla Report 22863.
* Add xmlcatalog nested element to XmlProperty. Bugzilla report 27053.
+
+* New attribute alwayslog for <redirector> type.
Fixed bugs:
-----------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]