vmassol 01/04/29 09:28:44 Modified: cactus/src/ant/org/apache/commons/cactus/ant ChangeLogTask.java Log: added support for a debug mode that outputs the result of the cvs log command to a debug file + support for all revisions of a file (and not only the latest revision) + removed previous revision support as it is now included in the general support for all revisions Revision Changes Path 1.2 +68 -57 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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ChangeLogTask.java 2001/04/29 11:29:37 1.1 +++ ChangeLogTask.java 2001/04/29 16:28:44 1.2 @@ -127,13 +127,17 @@ */ private String m_TestURL = "http://jakarta.apache.org"; + /** + * Debug file to write to when in debug mode. + */ + private File m_DebugFile; + // state machine states private final static int GET_ENTRY = 0; private final static int GET_FILE = 1; private final static int GET_DATE = 2; private final static int GET_COMMENT = 3; private final static int GET_REVISION = 4; - private final static int GET_PREVIOUS_REV = 5; /** * Input format for dates read in from cvs log @@ -142,6 +146,12 @@ new SimpleDateFormat("yyyy/MM/dd"); /** + * Input format for dates read in from cvs log + */ + private static final SimpleDateFormat FULL_INPUT_DATE = + new SimpleDateFormat("yyyy/MM/dd HH:mm"); + + /** * Output format for dates written to the XML file */ private static final SimpleDateFormat OUTPUT_DATE = @@ -151,7 +161,7 @@ * Output format for times written to the XML file */ private static final SimpleDateFormat OUTPUT_TIME = - new SimpleDateFormat("hh:mm"); + new SimpleDateFormat("HH:mm"); /** * Set the properties file name containing the matching list of (user id, @@ -199,7 +209,7 @@ * Set the threshold cvs log date. This method is automatically called by * the Ant runtime engine when the <code>date</code> attribute is * encountered in the Ant XML build file. This attribute is optional. The - * format is "yyyy/MM/dd hh:mm". + * format is "yyyy/MM/dd". * * @param theThresholdDate the threshold date before which cvs log are * ignored. @@ -259,6 +269,18 @@ } /** + * Set the debug file. This is optional and debug will be turned on only + * when this attribute is set. All output from the cvs log command will be + * dumped to this debug file. + * + * @param theDebugFile the name of the debug file to use. + */ + public void setDebug(File theDebugFile) + { + m_DebugFile = theDebugFile; + } + + /** * Read the user list from the properties file and store the matches in * memory. If no properties file has been set, do not do anything. */ @@ -432,13 +454,19 @@ m_Output = new PrintWriter(new OutputStreamWriter( new FileOutputStream(m_OutputFile),"UTF-8")); + // Prepare debug file if need be + PrintWriter debug = null; + if (m_DebugFile != null) { + debug = new PrintWriter(new OutputStreamWriter( + new FileOutputStream(m_DebugFile),"UTF-8")); + } + String file = null; String line = null; String date = null; String author = null; String comment = null; String revision = null; - String previousRev = null; // Current state in the state machine used to parse the CVS log stream int status = GET_FILE; @@ -448,6 +476,12 @@ while ((line = m_Input.readLine()) != null) { + // Log to debug file if debug mode is on + if (debug != null) { + debug.println(line); + log(line); + } + switch(status){ case GET_FILE: @@ -463,8 +497,8 @@ status = GET_DATE; } - // If we encounter a "=====" line, it means there was no - // description and thus the entry must be forgotten + // If we encounter a "=====" line, it means there is no + // more entries for the current file. else if (line.startsWith("======")) { status = GET_FILE; } @@ -472,7 +506,7 @@ case GET_DATE: if (line.startsWith("date:")) { - date = line.substring(6, 16); + date = line.substring(6, 22); line = line.substring(line.indexOf(";") + 1); author = line.substring(10, line.indexOf(";")); @@ -491,42 +525,35 @@ comment += line + "\n"; line = m_Input.readLine(); + + if (debug != null) { + debug.println(line); + log(line); + } + } comment = "<![CDATA[" + comment.substring(0,comment.length() - 1) + "]]>"; - status = GET_PREVIOUS_REV; - break; + // Add the entry to the list of entries + Entry entry; + if (!entries.containsKey(date + author + comment)) { + entry = new Entry(date, author, comment); + entries.put(date + author + comment, entry); + } else { + entry = (Entry)entries.get(date + author + comment); + } + entry.addFile(file, revision); - case GET_PREVIOUS_REV: - if (line.startsWith("revision")) { - previousRev = line.substring(9); - status = GET_FILE; + // Continue reading the other revisions - Entry entry; - if (!entries.containsKey(date + author + comment)) { - entry = new Entry(date, author, comment); - entries.put(date + author + comment, entry); - } else { - entry = (Entry)entries.get(date + author + comment); - } - entry.addFile(file, revision, previousRev); - } - if (line.startsWith("======")) { - status = GET_FILE; - Entry entry; - if (!entries.containsKey(date + author + comment)) { - entry = new Entry(date, author, comment); - entries.put(date + author + comment, entry); - }else { - entry = (Entry)entries.get(date + author + comment); - } - entry.addFile(file, revision); - } + status = GET_REVISION; + break; } } + m_Output.println("<changelog>"); Enumeration en = entries.elements(); while (en.hasMoreElements()) { @@ -535,6 +562,12 @@ m_Output.println("</changelog>"); m_Output.flush(); m_Output.close(); + + if (debug != null) { + debug.flush(); + debug.close(); + } + } /** @@ -572,7 +605,7 @@ public Entry(String theDate, String theAuthor, String theComment) { try { - m_Date = INPUT_DATE.parse(theDate); + m_Date = FULL_INPUT_DATE.parse(theDate); } catch(ParseException e) { log("Bad date format [" + theDate + "]."); } @@ -585,11 +618,6 @@ m_Files.addElement(new RCSFile(theFile, theRevision)); } - public void addFile(String theFile, String theRevision, String thePreviousRev) - { - m_Files.addElement(new RCSFile(theFile, theRevision, thePreviousRev)); - } - public String toString() { return m_Author + "\n" + m_Date + "\n" + m_Files + "\n" + m_Comment; @@ -599,7 +627,7 @@ { m_Output.println("\t<entry>"); m_Output.println("\t\t<date>" + OUTPUT_DATE.format(m_Date) + "</date>"); - m_Output.println("\t\t<time>" +OUTPUT_TIME.format(m_Date) + "</time>"); + m_Output.println("\t\t<time>" + OUTPUT_TIME.format(m_Date) + "</time>"); m_Output.println("\t\t<author>" + m_Author + "</author>"); Enumeration e = m_Files.elements(); @@ -608,10 +636,6 @@ m_Output.println("\t\t<file>"); m_Output.println("\t\t\t<name>" + file.getName() + "</name>"); m_Output.println("\t\t\t<revision>" + file.getRevision() + "</revision>"); - if (file.getPreviousRev() != null) { - m_Output.println("\t\t\t<prevrevision>" + file.getPreviousRev() - + "</prevrevision>"); - } m_Output.println("\t\t</file>"); } m_Output.println("\t\t<msg>" + m_Comment + "</msg>"); @@ -622,20 +646,11 @@ { private String m_Name; private String m_Rev; - private String m_PreviousRev; private RCSFile(String theName, String theRev) { - this(theName, theRev, null); - } - - private RCSFile(String theName, String theRev, String thePreviousRev) - { m_Name = theName; m_Rev = theRev; - if (!m_Rev.equals(m_PreviousRev)) { - m_PreviousRev = thePreviousRev; - } } public String getName() @@ -646,10 +661,6 @@ public String getRevision() { return m_Rev; - } - public String getPreviousRev() - { - return m_PreviousRev; } } }