output. When sent to file only, files would be created in all cases; when split file-property, files were only created if writes were performed. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276096 13f79535-47bb-0310-9956-ffa450edef68master
@@ -12,6 +12,11 @@ Fixed bugs: | |||||
* <whichresource> failed to load classes correctly. | * <whichresource> failed to load classes correctly. | ||||
* Redirector exhibited inconsistent behavior with regard to split | |||||
output. When sent to file only, files would be created in all | |||||
cases; when split file-property, files were only created if | |||||
writes were performed. | |||||
Other changes: | Other changes: | ||||
-------------- | -------------- | ||||
@@ -2668,4 +2673,4 @@ cases. | |||||
* The packagelistloc attribute of <javadoc>'s <link> child will be | * The packagelistloc attribute of <javadoc>'s <link> child will be | ||||
resolved as a file (i.e. it is either absolute or relative to | resolved as a file (i.e. it is either absolute or relative to | ||||
basedir). | |||||
basedir). |
@@ -232,7 +232,7 @@ public class Redirector { | |||||
errorStream = new LogOutputStream(managingTask, Project.MSG_WARN); | errorStream = new LogOutputStream(managingTask, Project.MSG_WARN); | ||||
} else { | } else { | ||||
if (out != null) { | if (out != null) { | ||||
outputStream = new LazyFileOutputStream(out, append); | |||||
outputStream = new LazyFileOutputStream(out, append, true); | |||||
managingTask.log("Output redirected to " + out, | managingTask.log("Output redirected to " + out, | ||||
Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
} | } | ||||
@@ -258,7 +258,7 @@ public class Redirector { | |||||
} | } | ||||
if (error != null) { | if (error != null) { | ||||
errorStream = new LazyFileOutputStream(error, append); | |||||
errorStream = new LazyFileOutputStream(error, append, true); | |||||
managingTask.log("Error redirected to " + error, | managingTask.log("Error redirected to " + error, | ||||
Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
} | } | ||||
@@ -422,15 +422,9 @@ public class Redirector { | |||||
inputStream.close(); | inputStream.close(); | ||||
} | } | ||||
if (outputStream instanceof LazyFileOutputStream) { | |||||
((LazyFileOutputStream) outputStream).open(); | |||||
} | |||||
outputStream.close(); | outputStream.close(); | ||||
if (errorStream != outputStream) { | if (errorStream != outputStream) { | ||||
if (errorStream instanceof LazyFileOutputStream) { | |||||
((LazyFileOutputStream) errorStream).open(); | |||||
} | |||||
errorStream.close(); | errorStream.close(); | ||||
} | } | ||||
@@ -33,6 +33,7 @@ public class LazyFileOutputStream extends OutputStream { | |||||
private FileOutputStream fos; | private FileOutputStream fos; | ||||
private File file; | private File file; | ||||
private boolean append; | private boolean append; | ||||
private boolean alwaysCreate; | |||||
private boolean opened = false; | private boolean opened = false; | ||||
private boolean closed = false; | private boolean closed = false; | ||||
@@ -67,8 +68,19 @@ public class LazyFileOutputStream extends OutputStream { | |||||
* it. | * it. | ||||
*/ | */ | ||||
public LazyFileOutputStream(File file, boolean append) { | public LazyFileOutputStream(File file, boolean append) { | ||||
this(file, append, false); | |||||
} | |||||
/** | |||||
* Creates a stream that will eventually write to the file with | |||||
* the given name, optionally append to instead of replacing | |||||
* it, and optionally always create a file (even if zero length). | |||||
*/ | |||||
public LazyFileOutputStream(File file, boolean append, | |||||
boolean alwaysCreate) { | |||||
this.file = file; | this.file = file; | ||||
this.append = append; | this.append = append; | ||||
this.alwaysCreate = alwaysCreate; | |||||
} | } | ||||
/** | /** | ||||
@@ -81,6 +93,9 @@ public class LazyFileOutputStream extends OutputStream { | |||||
} | } | ||||
public synchronized void close() throws IOException { | public synchronized void close() throws IOException { | ||||
if (alwaysCreate) { | |||||
ensureOpened(); | |||||
} | |||||
if (opened) { | if (opened) { | ||||
fos.close(); | fos.close(); | ||||
} | } | ||||