Modify CvsChangeLog to accept a branch as the tag attribute ChangeLogTask.java now inherits from AbstractCvsTask PR: 13510 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275969 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -66,6 +66,11 @@ Other changes: | |||||
| detected by Ant and treated just like Java 1.4. You can now specify | detected by Ant and treated just like Java 1.4. You can now specify | ||||
| source="1.5" in the <javac> task. | source="1.5" in the <javac> task. | ||||
| * created new task <cvsversion> | |||||
| * added support for branch logging via the tag attribute in <cvschangelog> | |||||
| Bugzilla Report 13510. | |||||
| Changes from Ant 1.5.4 to Ant 1.6.0 | Changes from Ant 1.5.4 to Ant 1.6.0 | ||||
| =================================== | =================================== | ||||
| @@ -21,6 +21,49 @@ from the command line in the target directory in which you are working. | |||||
| <td valign="top"><b>Description</b></td> | <td valign="top"><b>Description</b></td> | ||||
| <td align="center" valign="top"><b>Required</b></td> | <td align="center" valign="top"><b>Required</b></td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td colspan="3">Attributes from parent Cvs task which are meaningful here<br/> | |||||
| Since ant 1.6.1</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsRoot</td> | |||||
| <td valign="top">the <code>CVSROOT</code> variable.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsRsh</td> | |||||
| <td valign="top">the <code>CVS_RSH</code> variable.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">package</td> | |||||
| <td valign="top">the package/module to check out.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">port</td> | |||||
| <td valign="top">Port used by CVS to communicate with the server.</td> | |||||
| <td align="center" valign="top">No, default port 2401.</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">passfile</td> | |||||
| <td valign="top">Password file to read passwords from.</td> | |||||
| <td align="center" valign="top">No, default file ~/.cvspass.</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">failonerror</td> | |||||
| <td valign="top">Stop the build process if the command exits with a | |||||
| return code other than <code>0</code>. Defaults to false</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">tag</td> | |||||
| <td valign="top">query the changelog for a specific branch.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="3">Specific attributes</td> | |||||
| </tr> | |||||
| <tr> | <tr> | ||||
| <td valign="top">dir</td> | <td valign="top">dir</td> | ||||
| <td valign="top">The directory from which to run the CVS <em>log</em> | <td valign="top">The directory from which to run the CVS <em>log</em> | ||||
| @@ -138,6 +181,11 @@ under the <code>dve/network</code> directory, substituting the name | |||||
| anytime it encounters a change made by the user ID "donaldp". | anytime it encounters a change made by the user ID "donaldp". | ||||
| It writes these changes into the file <code>changelog.xml</code>.</p> | It writes these changes into the file <code>changelog.xml</code>.</p> | ||||
| <p>Generates a change log report on the <code>ANT_16_BRANCH</code>.</p> | |||||
| <pre> | |||||
| <cvschangelog dir="c:/dev/asf/ant.head" passfile="c:/home/myself/.cvspass" | |||||
| destfile="changelogant.xml" tag="ANT_16_BRANCH" /> | |||||
| </pre> | |||||
| <h4>Generate Report</h4> | <h4>Generate Report</h4> | ||||
| <p>Ant includes a basic XSLT stylesheet that you can use to generate | <p>Ant includes a basic XSLT stylesheet that you can use to generate | ||||
| a HTML report based on the xml output. The following example illustrates | a HTML report based on the xml output. The following example illustrates | ||||
| @@ -172,7 +220,7 @@ This allows temp[lates to be stored inside jar]]></msg> | |||||
| </changelog> | </changelog> | ||||
| </pre> | </pre> | ||||
| <hr><p align="center">Copyright © 2002-2003 Apache Software Foundation. All rights | |||||
| <hr><p align="center">Copyright © 2002-2004 Apache Software Foundation. All rights | |||||
| Reserved.</p> | Reserved.</p> | ||||
| </body> | </body> | ||||
| @@ -0,0 +1,93 @@ | |||||
| <html> | |||||
| <head> | |||||
| <meta http-equiv="Content-Language" content="en-us"> | |||||
| <title>CVSVersion Task</title> | |||||
| <link rel="stylesheet" type="text/css" href="../stylesheets/antmanual.css"> | |||||
| </head> | |||||
| <body> | |||||
| <h2><a name="cvs">CvsVersion</a></h2> | |||||
| <h3>Description</h3> | |||||
| <p> | |||||
| This task allows to retrieve a CVS client and server version | |||||
| </p> | |||||
| <h3>Parameters</h3> | |||||
| <table border="1" cellpadding="2" cellspacing="0"> | |||||
| <tr> | |||||
| <td valign="top"><b>Attribute</b></td> | |||||
| <td valign="top"><b>Description</b></td> | |||||
| <td align="center" valign="top"><b>Required</b></td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="3">Attributes from parent Cvs task which are meaningful here</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsRoot</td> | |||||
| <td valign="top">the <code>CVSROOT</code> variable.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsRsh</td> | |||||
| <td valign="top">the <code>CVS_RSH</code> variable.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">dest</td> | |||||
| <td valign="top">directory containing the checked out version of the project</td> | |||||
| <td align="center" valign="top">No, default is project's basedir.</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">package</td> | |||||
| <td valign="top">the package/module to check out.</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">port</td> | |||||
| <td valign="top">Port used by CVS to communicate with the server.</td> | |||||
| <td align="center" valign="top">No, default port 2401.</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">passfile</td> | |||||
| <td valign="top">Password file to read passwords from.</td> | |||||
| <td align="center" valign="top">No, default file ~/.cvspass.</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">failonerror</td> | |||||
| <td valign="top">Stop the build process if the command exits with a | |||||
| return code other than <code>0</code>. Defaults to false</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="3">Specific attributes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsclientproperty</td> | |||||
| <td valign="top">Name of a property where the cvsclient version | |||||
| should be stored</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">cvsserverproperty</td> | |||||
| <td valign="top">Name of a property where the cvs server version | |||||
| should be stored</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| </table> | |||||
| <h3>Examples</h3> | |||||
| <pre> <cvsversion cvsRoot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" | |||||
| passfile="/home/myself/.cvspass" | |||||
| cvsserverproperty="apachecvsversion" | |||||
| cvsclientproperty="localcvsversion" | |||||
| /></pre> | |||||
| <p>finds out the cvs client and server versions and stores the versions in the | |||||
| properties called apachecvsversion and localcvsversion</p> | |||||
| <hr> | |||||
| <p align="center">Copyright © 2004 Apache Software | |||||
| Foundation. All rights Reserved.</p> | |||||
| </body> | |||||
| </html> | |||||
| @@ -34,6 +34,7 @@ | |||||
| <a href="CoreTasks/copyfile.html"><i>Copyfile</i></a><br> | <a href="CoreTasks/copyfile.html"><i>Copyfile</i></a><br> | ||||
| <a href="CoreTasks/cvs.html">Cvs</a><br> | <a href="CoreTasks/cvs.html">Cvs</a><br> | ||||
| <a href="CoreTasks/changelog.html">CvsChangeLog</a><br> | <a href="CoreTasks/changelog.html">CvsChangeLog</a><br> | ||||
| <a href="CoreTasks/cvsversion.html">CvsVersion</a><br> | |||||
| <a href="CoreTasks/cvspass.html">CVSPass</a><br> | <a href="CoreTasks/cvspass.html">CVSPass</a><br> | ||||
| <a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br> | <a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br> | ||||
| <a href="CoreTasks/defaultexcludes.html">Defaultexcludes</a><br> | <a href="CoreTasks/defaultexcludes.html">Defaultexcludes</a><br> | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2002-2004 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -111,7 +111,10 @@ public abstract class AbstractCvsTask extends Task { | |||||
| * the package/module to check out. | * the package/module to check out. | ||||
| */ | */ | ||||
| private String cvsPackage; | private String cvsPackage; | ||||
| /** | |||||
| * the tag | |||||
| */ | |||||
| private String tag; | |||||
| /** | /** | ||||
| * the default command. | * the default command. | ||||
| */ | */ | ||||
| @@ -609,6 +612,13 @@ public abstract class AbstractCvsTask extends Task { | |||||
| return this.cvsPackage; | return this.cvsPackage; | ||||
| } | } | ||||
| /** | |||||
| * tag or branch | |||||
| * @return tag or branch | |||||
| */ | |||||
| public String getTag() { | |||||
| return tag; | |||||
| } | |||||
| /** | /** | ||||
| * The tag of the package/module to operate upon. | * The tag of the package/module to operate upon. | ||||
| @@ -617,8 +627,8 @@ public abstract class AbstractCvsTask extends Task { | |||||
| public void setTag(String p) { | public void setTag(String p) { | ||||
| // Check if not real tag => set it to null | // Check if not real tag => set it to null | ||||
| if (p != null && p.trim().length() > 0) { | if (p != null && p.trim().length() > 0) { | ||||
| addCommandArgument("-r"); | |||||
| addCommandArgument(p); | |||||
| tag = p; | |||||
| addCommandArgument("-r" + p); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2002-2004 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -68,8 +68,8 @@ import java.util.Vector; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.DirectoryScanner; | import org.apache.tools.ant.DirectoryScanner; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.taskdefs.Execute; | import org.apache.tools.ant.taskdefs.Execute; | ||||
| import org.apache.tools.ant.taskdefs.AbstractCvsTask; | |||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| @@ -102,9 +102,9 @@ import org.apache.tools.ant.types.FileSet; | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | * @author <a href="mailto:peter@apache.org">Peter Donald</a> | ||||
| * @version $Revision$ $Date$ | * @version $Revision$ $Date$ | ||||
| * @since Ant 1.5 | * @since Ant 1.5 | ||||
| * @ant.task name="cvschangelog" | |||||
| * @ant.task name="cvschangelog" category="scm" | |||||
| */ | */ | ||||
| public class ChangeLogTask extends Task { | |||||
| public class ChangeLogTask extends AbstractCvsTask { | |||||
| /** User list */ | /** User list */ | ||||
| private File m_usersFile; | private File m_usersFile; | ||||
| @@ -226,7 +226,6 @@ public class ChangeLogTask extends Task { | |||||
| try { | try { | ||||
| validate(); | validate(); | ||||
| final Properties userList = new Properties(); | final Properties userList = new Properties(); | ||||
| loadUserlist(userList); | loadUserlist(userList); | ||||
| @@ -239,11 +238,22 @@ public class ChangeLogTask extends Task { | |||||
| userList.put(user.getUserID(), user.getDisplayname()); | userList.put(user.getUserID(), user.getDisplayname()); | ||||
| } | } | ||||
| final Commandline command = new Commandline(); | |||||
| command.setExecutable("cvs"); | |||||
| command.createArgument().setValue("log"); | |||||
| setCommand("log"); | |||||
| if (getTag() != null) { | |||||
| CvsVersion myCvsVersion = new CvsVersion(); | |||||
| myCvsVersion.setProject(getProject()); | |||||
| myCvsVersion.setTaskName("cvsversion"); | |||||
| myCvsVersion.setCvsRoot(getCvsRoot()); | |||||
| myCvsVersion.setCvsRsh(getCvsRsh()); | |||||
| myCvsVersion.setPassfile(getPassFile()); | |||||
| myCvsVersion.setDest(m_dir); | |||||
| myCvsVersion.execute(); | |||||
| if (myCvsVersion.supportsCvsLogWithSOption()) { | |||||
| addCommandArgument("-S"); | |||||
| } | |||||
| } | |||||
| if (null != m_start) { | if (null != m_start) { | ||||
| final SimpleDateFormat outputDate = | final SimpleDateFormat outputDate = | ||||
| new SimpleDateFormat("yyyy-MM-dd"); | new SimpleDateFormat("yyyy-MM-dd"); | ||||
| @@ -252,8 +262,8 @@ public class ChangeLogTask extends Task { | |||||
| final String dateRange = ">=" + outputDate.format(m_start); | final String dateRange = ">=" + outputDate.format(m_start); | ||||
| // Supply '-d' as a separate argument - Bug# 14397 | // Supply '-d' as a separate argument - Bug# 14397 | ||||
| command.createArgument().setValue("-d"); | |||||
| command.createArgument().setValue(dateRange); | |||||
| addCommandArgument("-d"); | |||||
| addCommandArgument(dateRange); | |||||
| } | } | ||||
| // Check if list of files to check has been specified | // Check if list of files to check has been specified | ||||
| @@ -267,7 +277,7 @@ public class ChangeLogTask extends Task { | |||||
| final String[] files = scanner.getIncludedFiles(); | final String[] files = scanner.getIncludedFiles(); | ||||
| for (int i = 0; i < files.length; i++) { | for (int i = 0; i < files.length; i++) { | ||||
| command.createArgument().setValue(files[i]); | |||||
| addCommandArgument(files[i]); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -276,23 +286,11 @@ public class ChangeLogTask extends Task { | |||||
| final RedirectingStreamHandler handler = | final RedirectingStreamHandler handler = | ||||
| new RedirectingStreamHandler(parser); | new RedirectingStreamHandler(parser); | ||||
| log(command.describeCommand(), Project.MSG_VERBOSE); | |||||
| final Execute exe = new Execute(handler); | |||||
| exe.setWorkingDirectory(m_dir); | |||||
| exe.setCommandline(command.getCommandline()); | |||||
| exe.setAntRun(getProject()); | |||||
| try { | |||||
| final int resultCode = exe.execute(); | |||||
| if (Execute.isFailure(resultCode)) { | |||||
| throw new BuildException("Error running cvs log"); | |||||
| } | |||||
| } catch (final IOException ioe) { | |||||
| throw new BuildException(ioe.toString()); | |||||
| } | |||||
| log(getCommand(), Project.MSG_VERBOSE); | |||||
| setDest(m_dir); | |||||
| setExecuteStreamHandler(handler); | |||||
| super.execute(); | |||||
| final String errors = handler.getErrors(); | final String errors = handler.getErrors(); | ||||
| if (null != errors) { | if (null != errors) { | ||||
| @@ -0,0 +1,189 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2004 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 "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; | |||||
| import org.apache.tools.ant.taskdefs.AbstractCvsTask; | |||||
| import java.io.ByteArrayOutputStream; | |||||
| import java.util.StringTokenizer; | |||||
| /** | |||||
| * this task allows to find out the client and the server version of a | |||||
| * CVS installation | |||||
| * | |||||
| * example usage : | |||||
| * <cvsversion | |||||
| * cvsRoot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" | |||||
| * passfile="c:/programme/cygwin/home/antoine/.cvspass" | |||||
| * clientversionproperty="apacheclient" | |||||
| * serverversionproperty="apacheserver" /> | |||||
| * | |||||
| * the task can be used also in the API by calling its execute method, | |||||
| * then calling getServerVersion and/or getClientVersion | |||||
| * | |||||
| * @ant.task category="scm" | |||||
| * @author Antoine Levy-Lambert | |||||
| */ | |||||
| public class CvsVersion extends AbstractCvsTask { | |||||
| static final long VERSION_1_11_2 = 11102; | |||||
| static final long MULTIPLY = 100; | |||||
| private String clientVersion; | |||||
| private String serverVersion; | |||||
| private String clientVersionProperty; | |||||
| private String serverVersionProperty; | |||||
| /** | |||||
| * get the CVS client version | |||||
| * @return CVS client version | |||||
| */ | |||||
| public String getClientVersion() { | |||||
| return clientVersion; | |||||
| } | |||||
| /** | |||||
| * get the CVS server version | |||||
| * @return CVS server version | |||||
| */ | |||||
| public String getServerVersion() { | |||||
| return serverVersion; | |||||
| } | |||||
| /** | |||||
| * set a property where to store the CVS client version | |||||
| * @param clientVersionProperty property for CVS client version | |||||
| */ | |||||
| public void setClientVersionProperty(String clientVersionProperty) { | |||||
| this.clientVersionProperty = clientVersionProperty; | |||||
| } | |||||
| /** | |||||
| * set a property where to store the CVS server version | |||||
| * @param serverVersionProperty property for CVS server version | |||||
| */ | |||||
| public void setServerVersionProperty(String serverVersionProperty) { | |||||
| this.serverVersionProperty = serverVersionProperty; | |||||
| } | |||||
| /** | |||||
| * find out if the server version supports log with S option | |||||
| * @return boolean indicating if the server version supports log with S option | |||||
| */ | |||||
| public boolean supportsCvsLogWithSOption() { | |||||
| if (serverVersion == null) { | |||||
| return false; | |||||
| } | |||||
| StringTokenizer mySt = new StringTokenizer(serverVersion, "."); | |||||
| long versionNumber; | |||||
| long counter = MULTIPLY * MULTIPLY; | |||||
| long version = 0; | |||||
| while (mySt.hasMoreTokens()) { | |||||
| String s = mySt.nextToken(); | |||||
| int i = 0; | |||||
| for (i = 0; i < s.length(); i++) { | |||||
| if (!Character.isDigit(s.charAt(i))) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| String s2 = s.substring(0, i); | |||||
| version = version + counter * Long.parseLong(s2); | |||||
| if (counter == 1) { | |||||
| break; | |||||
| } | |||||
| counter = counter / MULTIPLY; | |||||
| } | |||||
| return (version >= VERSION_1_11_2); | |||||
| } | |||||
| /** | |||||
| * the execute method running CvsVersion | |||||
| */ | |||||
| public void execute() { | |||||
| ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |||||
| this.setOutputStream(bos); | |||||
| ByteArrayOutputStream berr = new ByteArrayOutputStream(); | |||||
| this.setErrorStream(berr); | |||||
| setCommand("version"); | |||||
| super.execute(); | |||||
| String output = bos.toString(); | |||||
| StringTokenizer st = new StringTokenizer(output); | |||||
| boolean client = false; | |||||
| boolean server = false; | |||||
| boolean cvs = false; | |||||
| while (st.hasMoreTokens()) { | |||||
| String currentToken = st.nextToken(); | |||||
| if (currentToken.equals("Client:")) { | |||||
| client = true; | |||||
| } else if (currentToken.equals("Server:")) { | |||||
| server = true; | |||||
| } else if (currentToken.equals("(CVS)")) { | |||||
| cvs = true; | |||||
| } | |||||
| if (client && cvs) { | |||||
| if (st.hasMoreTokens()) { | |||||
| clientVersion = st.nextToken(); | |||||
| } | |||||
| client = false; | |||||
| cvs = false; | |||||
| } else if (server && cvs) { | |||||
| if (st.hasMoreTokens()) { | |||||
| serverVersion = st.nextToken(); | |||||
| } | |||||
| server = false; | |||||
| cvs = false; | |||||
| } | |||||
| } | |||||
| if (clientVersionProperty != null) { | |||||
| getProject().setNewProperty(clientVersionProperty, clientVersion); | |||||
| } | |||||
| if (serverVersionProperty != null) { | |||||
| getProject().setNewProperty(serverVersionProperty, serverVersion); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -66,6 +66,7 @@ loadproperties=org.apache.tools.ant.taskdefs.LoadProperties | |||||
| basename=org.apache.tools.ant.taskdefs.Basename | basename=org.apache.tools.ant.taskdefs.Basename | ||||
| dirname=org.apache.tools.ant.taskdefs.Dirname | dirname=org.apache.tools.ant.taskdefs.Dirname | ||||
| cvschangelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask | cvschangelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask | ||||
| cvsversion=org.apache.tools.ant.tasksdefs.cvslib.CvsVersion | |||||
| buildnumber=org.apache.tools.ant.taskdefs.BuildNumber | buildnumber=org.apache.tools.ant.taskdefs.BuildNumber | ||||
| concat=org.apache.tools.ant.taskdefs.Concat | concat=org.apache.tools.ant.taskdefs.Concat | ||||
| cvstagdiff=org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff | cvstagdiff=org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff | ||||