vmassol 01/08/16 02:54:52
Modified: cactus/src/ant/org/apache/commons/cactus/ant
ChangeLogTask.java
Log:
handles error stream coming from CVS (had to fight to get this to work because of a
known bug in JDK < 1.4, bug
http://developer.java.sun.com/developer/bugParade/bugs/4329985.html)
Revision Changes Path
1.4 +29 -16
jakarta-commons/cactus/src/ant/org/apache/commons/cactus/ant/ChangeLogTask.java
Index: ChangeLogTask.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/cactus/src/ant/org/apache/commons/cactus/ant/ChangeLogTask.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ChangeLogTask.java 2001/04/29 16:43:36 1.3
+++ ChangeLogTask.java 2001/08/16 09:54:52 1.4
@@ -111,6 +111,11 @@
private BufferedReader m_Input;
/**
+ * Error Input stream read in from CVS log command
+ */
+ private InputStreamReader m_ErrorInput;
+
+ /**
* Output file stream where results will be written to
*/
private PrintWriter m_Output;
@@ -426,6 +431,7 @@
*/
public void setProcessErrorStream(InputStream theIs) throws IOException
{
+ m_ErrorInput = new InputStreamReader(theIs);
}
/**
@@ -458,7 +464,7 @@
PrintWriter debug = null;
if (m_DebugFile != null) {
debug = new PrintWriter(new OutputStreamWriter(
- new FileOutputStream(m_DebugFile),"UTF-8"));
+ new FileOutputStream(m_DebugFile),"UTF-8"), true);
}
String file = null;
@@ -470,24 +476,23 @@
// Current state in the state machine used to parse the CVS log stream
int status = GET_FILE;
+ if (debug != null) debug.println("State = GET_FILE");
// RCS entries
Hashtable entries = new Hashtable();
while ((line = m_Input.readLine()) != null) {
- // Log to debug file if debug mode is on
- if (debug != null) {
- debug.println(line);
- log(line);
- }
-
+ // Log to debug file if debug mode is on
+ if (debug != null) debug.println("Text: [" + line);
+
switch(status){
case GET_FILE:
if (line.startsWith("Working file:")) {
file = line.substring(14, line.length());
status = GET_REVISION;
+ if (debug != null) debug.println("Next state =
GET_REVISION");
}
break;
@@ -495,12 +500,14 @@
if (line.startsWith("revision")) {
revision = line.substring(9);
status = GET_DATE;
+ if (debug != null) debug.println("Next state = GET_DATE");
}
// If we encounter a "=====" line, it means there is no
// more entries for the current file.
else if (line.startsWith("======")) {
status = GET_FILE;
+ if (debug != null) debug.println("Next state = GET_FILE");
}
break;
@@ -515,6 +522,7 @@
}
status = GET_COMMENT;
+ if (debug != null) debug.println("Next state =
GET_COMMENT");
}
break;
@@ -526,10 +534,7 @@
comment += line + "\n";
line = m_Input.readLine();
- if (debug != null) {
- debug.println(line);
- log(line);
- }
+ if (debug != null) debug.println("Text: [" + line);
}
comment = "<![CDATA[" +
@@ -548,15 +553,26 @@
// Continue reading the other revisions or skip to next file
if (line.startsWith("======")) {
status = GET_FILE;
+ if (debug != null) debug.println("Next state = GET_FILE");
} else {
status = GET_REVISION;
+ if (debug != null) debug.println("Next state =
GET_REVISION");
}
break;
+ }
+
+ // Read the error stream so that it does not block !
+ // We cannot use a BufferedReader as the ready() method is bugged!
+ // (see Bug 4329985, which is supposed to be fixed in JDK 1.4 :
+ // http://developer.java.sun.com/developer/bugParade/bugs/4329985.html)
+ while (m_ErrorInput.ready()) {
+ m_ErrorInput.read();
}
-
}
+ if (debug != null) debug.println("Preparing to write changelog file");
+
m_Output.println("<changelog>");
Enumeration en = entries.elements();
while (en.hasMoreElements()) {
@@ -566,10 +582,7 @@
m_Output.flush();
m_Output.close();
- if (debug != null) {
- debug.flush();
- debug.close();
- }
+ if (debug != null) debug.close();
}