Browse Source

Make tagEntry a top level class.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272453 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
020f9a52c4
2 changed files with 151 additions and 98 deletions
  1. +46
    -98
      src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java
  2. +105
    -0
      src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java

+ 46
- 98
src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java View File

@@ -96,29 +96,29 @@ import java.util.Vector;
* <!-- Previous revision number --> * <!-- Previous revision number -->
* <!ELEMENT prevrevision ( #PCDATA ) > * <!ELEMENT prevrevision ( #PCDATA ) >
* </PRE> * </PRE>
*
*
* @author <a href="mailto:fred@castify.net">Frederic Lavigne</a> * @author <a href="mailto:fred@castify.net">Frederic Lavigne</a>
* @version $Revision$ $Date$ * @version $Revision$ $Date$
* @since Ant 1.5 * @since Ant 1.5
* @ant.task name="cvstagdiff" * @ant.task name="cvstagdiff"
*/ */
public class CvsTagDiff extends Task { public class CvsTagDiff extends Task {
/** /**
* Token to identify a new file in the rdiff log * Token to identify a new file in the rdiff log
*/ */
static final String FILE_IS_NEW = " is new; current revision "; static final String FILE_IS_NEW = " is new; current revision ";
/** /**
* Token to identify a modified file in the rdiff log * Token to identify a modified file in the rdiff log
*/ */
static final String FILE_HAS_CHANGED = " changed from revision "; static final String FILE_HAS_CHANGED = " changed from revision ";
/** /**
* Token to identify a removed file in the rdiff log * Token to identify a removed file in the rdiff log
*/ */
static final String FILE_WAS_REMOVED = " is removed"; static final String FILE_WAS_REMOVED = " is removed";
/** /**
* The cvs task which will perform the rdiff. * The cvs task which will perform the rdiff.
*/ */
@@ -133,7 +133,7 @@ public class CvsTagDiff extends Task {
* The earliest tag from which diffs are to be included in the report. * The earliest tag from which diffs are to be included in the report.
*/ */
private String m_startTag; private String m_startTag;
/** /**
* The latest tag from which diffs are to be included in the report. * The latest tag from which diffs are to be included in the report.
*/ */
@@ -143,25 +143,25 @@ public class CvsTagDiff extends Task {
* The earliest date from which diffs are to be included in the report. * The earliest date from which diffs are to be included in the report.
*/ */
private String m_startDate; private String m_startDate;
/** /**
* The latest date from which diffs are to be included in the report. * The latest date from which diffs are to be included in the report.
*/ */
private String m_endDate; private String m_endDate;
/** /**
* The file in which to write the diff report. * The file in which to write the diff report.
*/ */
private File m_destfile; private File m_destfile;
/** /**
* Used to create the temp file for cvs log * Used to create the temp file for cvs log
*/ */
private FileUtils m_fileUtils = FileUtils.newFileUtils(); private FileUtils m_fileUtils = FileUtils.newFileUtils();
/** /**
* Initialize this task. * Initialize this task.
* CvsTagDiff initializes a member cvs task in init() to perform the
* CvsTagDiff initializes a member cvs task in init() to perform the
* rdiff in execute(). * rdiff in execute().
* *
* @exception BuildException if an error occurs * @exception BuildException if an error occurs
@@ -169,7 +169,7 @@ public class CvsTagDiff extends Task {
public void init() throws BuildException { public void init() throws BuildException {
m_cvs = (Cvs) getProject().createTask("cvs"); m_cvs = (Cvs) getProject().createTask("cvs");
} }
/** /**
* @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCompressionLevel(int) * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCompressionLevel(int)
*/ */
@@ -259,7 +259,7 @@ public class CvsTagDiff extends Task {
public void setEndTag(String s) { public void setEndTag(String s) {
m_endTag = s; m_endTag = s;
} }
/** /**
* Set the end date. * Set the end date.
* *
@@ -277,7 +277,7 @@ public class CvsTagDiff extends Task {
public void setDestFile(File f) { public void setDestFile(File f) {
m_destfile = f; m_destfile = f;
} }
/** /**
* Execute task. * Execute task.
* *
@@ -286,12 +286,12 @@ public class CvsTagDiff extends Task {
public void execute() throws BuildException { public void execute() throws BuildException {
// validate the input parameters // validate the input parameters
validate(); validate();
// build the rdiff command // build the rdiff command
String rdiff = "rdiff -s " + String rdiff = "rdiff -s " +
(m_startTag != null ? ("-r " + m_startTag) : ("-D " + m_startDate))
+ " "
+ (m_endTag != null ? ("-r " + m_endTag) : ("-D " + m_endDate))
(m_startTag != null ? ("-r " + m_startTag) : ("-D " + m_startDate))
+ " "
+ (m_endTag != null ? ("-r " + m_endTag) : ("-D " + m_endDate))
+ " " + m_package; + " " + m_package;
log("Cvs command is " + rdiff, Project.MSG_VERBOSE); log("Cvs command is " + rdiff, Project.MSG_VERBOSE);
m_cvs.setCommand(rdiff); m_cvs.setCommand(rdiff);
@@ -300,7 +300,7 @@ public class CvsTagDiff extends Task {
try { try {
tmpFile = m_fileUtils.createTempFile("cvstagdiff", ".log", null); tmpFile = m_fileUtils.createTempFile("cvstagdiff", ".log", null);
m_cvs.setOutput(tmpFile); m_cvs.setOutput(tmpFile);
// run the cvs command // run the cvs command
m_cvs.execute(); m_cvs.execute();


@@ -316,7 +316,7 @@ public class CvsTagDiff extends Task {
} }
} }
} }
/** /**
* Parse the tmpFile and return and array of CvsTagEntry to be * Parse the tmpFile and return and array of CvsTagEntry to be
* written in the output. * written in the output.
@@ -328,10 +328,10 @@ public class CvsTagDiff extends Task {
private CvsTagEntry[] parseRDiff(File tmpFile) throws BuildException { private CvsTagEntry[] parseRDiff(File tmpFile) throws BuildException {
// parse the output of the command // parse the output of the command
BufferedReader reader = null; BufferedReader reader = null;
try { try {
reader = new BufferedReader(new FileReader(tmpFile)); reader = new BufferedReader(new FileReader(tmpFile));
// entries are of the form: // entries are of the form:
// File module/filename is new; current revision 1.1 // File module/filename is new; current revision 1.1
// or // or
@@ -341,22 +341,22 @@ public class CvsTagDiff extends Task {
// release tag SKINLF_12 // release tag SKINLF_12


// get rid of 'File module/" // get rid of 'File module/"
int headerLength = 5 + m_package.length() + 1;
int headerLength = 5 + m_package.length() + 1;
Vector entries = new Vector(); Vector entries = new Vector();
String line = reader.readLine(); String line = reader.readLine();
int index; int index;
CvsTagEntry entry = null; CvsTagEntry entry = null;
while (null != line) { while (null != line) {
line = line.substring(headerLength); line = line.substring(headerLength);
if ((index = line.indexOf(FILE_IS_NEW)) != -1) { if ((index = line.indexOf(FILE_IS_NEW)) != -1) {
// it is a new file // it is a new file
// set the revision but not the prevrevision // set the revision but not the prevrevision
String filename = line.substring(0, index); String filename = line.substring(0, index);
String rev = line.substring(index + FILE_IS_NEW.length()); String rev = line.substring(index + FILE_IS_NEW.length());
entries.addElement(entry = new CvsTagEntry(filename, rev)); entries.addElement(entry = new CvsTagEntry(filename, rev));
log(entry.toString(), Project.MSG_VERBOSE); log(entry.toString(), Project.MSG_VERBOSE);
} else if ((index = line.indexOf(FILE_HAS_CHANGED)) != -1) { } else if ((index = line.indexOf(FILE_HAS_CHANGED)) != -1) {
@@ -364,40 +364,40 @@ public class CvsTagDiff extends Task {
// set the revision and the prevrevision // set the revision and the prevrevision
String filename = line.substring(0, index); String filename = line.substring(0, index);
int revSeparator = line.indexOf(" to ", index); int revSeparator = line.indexOf(" to ", index);
String prevRevision =
line.substring(index + FILE_HAS_CHANGED.length(),
String prevRevision =
line.substring(index + FILE_HAS_CHANGED.length(),
revSeparator); revSeparator);
// 4 is " to " length // 4 is " to " length
String revision = line.substring(revSeparator + 4); String revision = line.substring(revSeparator + 4);
entries.addElement(entry = new CvsTagEntry(filename,
revision,
entries.addElement(entry = new CvsTagEntry(filename,
revision,
prevRevision)); prevRevision));
log(entry.toString(), Project.MSG_VERBOSE); log(entry.toString(), Project.MSG_VERBOSE);
} else if ((index = line.indexOf(FILE_WAS_REMOVED)) != -1) { } else if ((index = line.indexOf(FILE_WAS_REMOVED)) != -1) {
// it is a removed file // it is a removed file
String filename = line.substring(0, index); String filename = line.substring(0, index);
entries.addElement(entry = new CvsTagEntry(filename)); entries.addElement(entry = new CvsTagEntry(filename));
log(entry.toString(), Project.MSG_VERBOSE); log(entry.toString(), Project.MSG_VERBOSE);
} }
line = reader.readLine(); line = reader.readLine();
} }
CvsTagEntry[] array = new CvsTagEntry[entries.size()]; CvsTagEntry[] array = new CvsTagEntry[entries.size()];
entries.copyInto(array); entries.copyInto(array);
return array;
return array;
} catch (IOException e) { } catch (IOException e) {
throw new BuildException("Error in parsing", e); throw new BuildException("Error in parsing", e);
} finally { } finally {
if (reader != null) { if (reader != null) {
try { try {
reader.close();
reader.close();
} catch (IOException e) { } catch (IOException e) {
} }
} }
}
}
} }


/** /**
@@ -443,7 +443,7 @@ public class CvsTagDiff extends Task {
} }
} }
} }
/** /**
* Write a single entry to the given writer. * Write a single entry to the given writer.
* *
@@ -455,17 +455,17 @@ public class CvsTagDiff extends Task {
writer.println("\t\t<file>"); writer.println("\t\t<file>");
writer.println("\t\t\t<name>" + entry.getFile() + "</name>"); writer.println("\t\t\t<name>" + entry.getFile() + "</name>");
if (entry.getRevision() != null) { if (entry.getRevision() != null) {
writer.println("\t\t\t<revision>" + entry.getRevision()
writer.println("\t\t\t<revision>" + entry.getRevision()
+ "</revision>"); + "</revision>");
} }
if (entry.getPreviousRevision() != null) { if (entry.getPreviousRevision() != null) {
writer.println("\t\t\t<prevrevision>"
writer.println("\t\t\t<prevrevision>"
+ entry.getPreviousRevision() + "</prevrevision>"); + entry.getPreviousRevision() + "</prevrevision>");
} }
writer.println("\t\t</file>");
writer.println("\t\t</file>");
writer.println("\t</entry>"); writer.println("\t</entry>");
} }
/** /**
* Validate the parameters specified for task. * Validate the parameters specified for task.
* *
@@ -475,11 +475,11 @@ public class CvsTagDiff extends Task {
if (null == m_package) { if (null == m_package) {
throw new BuildException("Package/module must be set."); throw new BuildException("Package/module must be set.");
} }
if (null == m_destfile) { if (null == m_destfile) {
throw new BuildException("Destfile must be set."); throw new BuildException("Destfile must be set.");
} }
if (null == m_startTag && null == m_startDate) { if (null == m_startTag && null == m_startDate) {
throw new BuildException("Start tag or start date must be set."); throw new BuildException("Start tag or start date must be set.");
} }
@@ -488,7 +488,7 @@ public class CvsTagDiff extends Task {
throw new BuildException("Only one of start tag and start date " throw new BuildException("Only one of start tag and start date "
+ "must be set."); + "must be set.");
} }
if (null == m_endTag && null == m_endDate) { if (null == m_endTag && null == m_endDate) {
throw new BuildException("End tag or end date must be set."); throw new BuildException("End tag or end date must be set.");
} }
@@ -496,58 +496,6 @@ public class CvsTagDiff extends Task {
if (null != m_endTag && null != m_endDate) { if (null != m_endTag && null != m_endDate) {
throw new BuildException("Only one of end tag and end date must " throw new BuildException("Only one of end tag and end date must "
+ "be set."); + "be set.");
}
}
/**
* Holds the information of a line of rdiff
*/
static class CvsTagEntry {
String m_filename;
String m_prevRevision;
String m_revision;

public CvsTagEntry(String filename) {
this(filename, null, null);
}

public CvsTagEntry(String filename, String revision) {
this(filename, revision, null);
}

public CvsTagEntry(String filename, String revision,
String prevRevision) {
m_filename = filename;
m_revision = revision;
m_prevRevision = prevRevision;
}

public String getFile() {
return m_filename;
}

public String getRevision() {
return m_revision;
}

public String getPreviousRevision() {
return m_prevRevision;
}

public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(m_filename);
if ((m_revision == null) && (m_prevRevision == null)) {
buffer.append(" was removed");
} else if (m_revision != null && m_prevRevision == null) {
buffer.append(" is new; current revision is ")
.append(m_revision);
} else if (m_revision != null && m_prevRevision != null) {
buffer.append(" has changed from ")
.append(m_prevRevision).append(" to ").append(m_revision);
}
return buffer.toString();
} }
} }

} }

+ 105
- 0
src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java View File

@@ -0,0 +1,105 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.taskdefs.cvslib;

/**
* Holds the information of a line of rdiff
*/
class CvsTagEntry {
String m_filename;
String m_prevRevision;
String m_revision;

public CvsTagEntry(String filename) {
this(filename, null, null);
}

public CvsTagEntry(String filename, String revision) {
this(filename, revision, null);
}

public CvsTagEntry(String filename, String revision,
String prevRevision) {
m_filename = filename;
m_revision = revision;
m_prevRevision = prevRevision;
}

public String getFile() {
return m_filename;
}

public String getRevision() {
return m_revision;
}

public String getPreviousRevision() {
return m_prevRevision;
}

public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(m_filename);
if ((m_revision == null) && (m_prevRevision == null)) {
buffer.append(" was removed");
} else if (m_revision != null && m_prevRevision == null) {
buffer.append(" is new; current revision is ")
.append(m_revision);
} else if (m_revision != null && m_prevRevision != null) {
buffer.append(" has changed from ")
.append(m_prevRevision).append(" to ").append(m_revision);
}
return buffer.toString();
}
}

Loading…
Cancel
Save