bodewig 2004/11/02 08:19:48 Modified: src/main/org/apache/tools/ant/taskdefs Recorder.java RecorderEntry.java Log: Make sure <record> lets go of files when stopped. PR: 26020 Submitted by: Martijn Kruithof Revision Changes Path 1.22 +11 -14 ant/src/main/org/apache/tools/ant/taskdefs/Recorder.java Index: Recorder.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Recorder.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- Recorder.java 24 Jun 2004 11:16:41 -0000 1.21 +++ Recorder.java 2 Nov 2004 16:19:48 -0000 1.22 @@ -146,7 +146,15 @@ RecorderEntry recorder = getRecorder(filename, getProject()); // set the values on the recorder recorder.setMessageOutputLevel(loglevel); - recorder.setRecordState(start); + if (start != null) { + if (start.booleanValue()) { + recorder.reopenFile(); + recorder.setRecordState(start); + } else { + recorder.setRecordState(start); + recorder.closeFile(); + } + } recorder.setEmacsMode(emacsMode); } @@ -193,24 +201,13 @@ if (o == null) { // create a recorder entry - try { entry = new RecorderEntry(name); - PrintStream out = null; - if (append == null) { - out = new PrintStream( - new FileOutputStream(name)); + entry.openFile(false); } else { - out = new PrintStream( - new FileOutputStream(name, append.booleanValue())); + entry.openFile(append.booleanValue()); } - entry.setErrorPrintStream(out); - entry.setOutputPrintStream(out); - } catch (IOException ioe) { - throw new BuildException("Problems creating a recorder entry", - ioe); - } entry.setProject(proj); recorderEntries.put(name, entry); } else { 1.19 +64 -7 ant/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java Index: RecorderEntry.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- RecorderEntry.java 24 Jun 2004 11:16:41 -0000 1.18 +++ RecorderEntry.java 2 Nov 2004 16:19:48 -0000 1.19 @@ -16,8 +16,11 @@ */ package org.apache.tools.ant.taskdefs; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.PrintStream; import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildLogger; import org.apache.tools.ant.DefaultLogger; import org.apache.tools.ant.Project; @@ -28,7 +31,6 @@ * This is a class that represents a recorder. This is the listener to the * build process. * - * @version 0.5 * @since Ant 1.4 */ public class RecorderEntry implements BuildLogger, SubBuildListener { @@ -80,6 +82,7 @@ */ public void setRecordState(Boolean state) { if (state != null) { + flush(); record = state.booleanValue(); } } @@ -93,6 +96,7 @@ public void buildFinished(BuildEvent event) { log("< BUILD FINISHED", Project.MSG_DEBUG); + if (record && out != null) { Throwable error = event.getException(); if (error == null) { @@ -102,6 +106,7 @@ + StringUtils.LINE_SEP); error.printStackTrace(out); } + } cleanup(); } @@ -145,7 +150,7 @@ String time = formatTime(System.currentTimeMillis() - targetStartTime); log(event.getTarget() + ": duration " + time, Project.MSG_VERBOSE); - out.flush(); + flush(); } @@ -156,7 +161,7 @@ public void taskFinished(BuildEvent event) { log("<<< TASK FINISHED -- " + event.getTask(), Project.MSG_DEBUG); - out.flush(); + flush(); } @@ -191,10 +196,16 @@ * @param level The verbosity level of the message. */ private void log(String mesg, int level) { - if (record && (level <= loglevel)) { + if (record && (level <= loglevel) && out != null) { out.println(mesg); } } + + private void flush() { + if (record && out != null) { + out.flush(); + } + } public void setMessageOutputLevel(int level) { @@ -205,6 +216,7 @@ public void setOutputPrintStream(PrintStream output) { + closeFile(); out = output; } @@ -215,7 +227,7 @@ public void setErrorPrintStream(PrintStream err) { - out = err; + setOutputPrintStream(err); } @@ -254,12 +266,57 @@ * @since 1.6.2 */ public void cleanup() { - out.flush(); - out.close(); + closeFile(); if (project != null) { project.removeBuildListener(this); } project = null; } + + /** + * Initially opens the file associated with this recorder. + * Used by Recorder. + * @param append Indicates if output must be appended to the logfile or that + * the logfile should be overwritten. + * @throws BuildException + * @since 1.6.3 + */ + void openFile(boolean append) throws BuildException { + openFileImpl(append); + } + + /** + * Closes the file associated with this recorder. + * Used by Recorder. + * @since 1.6.3 + */ + void closeFile() { + if (out != null) { + out.close(); + out = null; + } + } + + /** + * Re-opens the file associated with this recorder. + * Used by Recorder. + * @throws BuildException + * @since 1.6.3 + */ + void reopenFile() throws BuildException { + openFileImpl(true); + } + + private void openFileImpl(boolean append) throws BuildException { + if (out == null) { + try { + out = new PrintStream(new FileOutputStream(filename, append)); + } catch (IOException ioe) { + throw new BuildException("Problems opening file using a " + + "recorder entry", ioe); + } + } + } + }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]