Erik, I haven't looked in detail at your proposal but I think it would be best implemented as an optional task. This way it gets compiled into ant only if the user has the com.ice.cvsc.* classes in their classpath. As you have provided it, I think ant would fail to build unless these classes are present.
Cheers Conor > -----Original Message----- > From: Erik Meade [mailto:[EMAIL PROTECTED] > Sent: Thursday, 1 June 2000 15:38 > To: [EMAIL PROTECTED] > Subject: [PATCH]? Jcvs taskdef > > > I noticed this comment in Cvs taskdef: > > // XXX: we should use JCVS (www.ice.com/JCVS) instead of > command line > // execution so that we don't rely on having native CVS > stuff around (SM) > > So took a stab at it and started a Jcvs taskdef, which uses Tim's > com.ice.cvsc > package. > http://www.gjt.org/servlets/JCVSlet/zip/ice/com/ice/cvsc/cvsc.zip ) > > I've included a patch to add the Jcvs taskdef to the > defaults.properties as > well as > the Jcvs.java file. > > Jcvs is backwards compatible with Cvs, except for the "-r" > option. ( Because I > didn't implement it, not because it is unimplementable ). > > This is my first time so please be gentle :) > Erik Meade > > > --- defaults.properties.orig Thu Jun 01 00:19:50 2000 > +++ defaults.properties Wed May 31 19:09:24 2000 > @@ -29,6 +29,7 @@ > filter=org.apache.tools.ant.taskdefs.Filter > fixcrlf=org.apache.tools.ant.taskdefs.FixCRLF > rename=org.apache.tools.ant.taskdefs.Rename > +jcvs=org.apache.tools.ant.taskdefs.Jcvs > > # optional tasks > script=org.apache.tools.ant.taskdefs.optional.Script > > > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 1999 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", "Tomcat", 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 [EMAIL PROTECTED] > * > * 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; > > import com.ice.cvsc.*; > import java.io.File; > import org.apache.tools.ant.BuildException; > > /** > * > * > * @author [EMAIL PROTECTED] > */ > > public class Jcvs extends Exec implements CVSUserInterface { > > String userName; > String password = "anoncvs"; > String hostName; > String repository; > String rootDirectory; > String localDirectory; > String tempDirectory; > > boolean isPServer = true; > int connMethod = CVSRequest.METHOD_INETD; > int cvsPort = 2401; > > public void execute() throws BuildException { > if (tempDirectory == null) { > tempDirectory = > System.getProperty("java.io.tmpdir"); > } > > if (localDirectory == null) { > localDirectory = "."; > } > > CVSRequest request = new CVSRequest(); > boolean parsed = > request.parseControlString(":co:N:ANP:deou:"); > > CVSEntryVector entries = new CVSEntryVector(); > > CVSArgumentVector arguments = new CVSArgumentVector(); > arguments.appendArgument(repository); > > CVSClient client = new CVSClient(hostName, cvsPort ); > CVSProject project = new CVSProject(client); > project.setUserName(userName); > project.setTempDirectory(tempDirectory); > project.setRepository(repository); > project.setRootDirectory(rootDirectory); > project.setLocalRootDirectory(localDirectory); > project.setPServer(isPServer); > project.setConnectionMethod(connMethod); > ject.setPassword(CVSScramble.scramblePassword( > password, 'A' )); > project.establishRootEntry(rootDirectory); > > request.setPServer(isPServer); > request.setUserName(userName); > request.setPassword(project.getPassword()); > request.setConnectionMethod(connMethod); > request.setPort(cvsPort); > request.setHostName(hostName); > request.setRepository(repository); > request.setRootDirectory(rootDirectory); > request.setRootRepository(rootDirectory); > request.setLocalDirectory(localDirectory); > request.responseHandler = project; > request.traceRequest = CVSProject.overTraceRequest; > request.traceResponse = CVSProject.overTraceResponse; > request.traceTCPData = CVSProject.overTraceTCP; > request.traceProcessing = CVSProject.overTraceProcessing; > request.setEntries(entries); > request.appendArguments(arguments); > request.setUserInterface(this); > > CVSResponse response = client.processCVSRequest(request); > response.deleteTempFiles(); > } > > public void setDest(String dest) { > setDir(dest); > } > > public void setHostName(String hostName) { > this.hostName = hostName; > } > > public void setLocalDir(String localDir) { > this.localDirectory = localDir; > } > > public void setPassword(String password) { > this.password = password; > } > > public void setPort(int port) { > cvsPort = port; > } > > public void setRepository(String repository) { > this.repository = repository; > } > > public void setRootDir(String rootDir) { > rootDirectory = rootDir; > } > > public void setTempDir(String tempDir) { > tempDirectory = tempDir; > } > > public void setUserName(String userName) { > this.userName = userName; > } > > // For backward compatabitly with Cvs. > public void setCvsRoot(String root) { > // XXX: handle non isPServer > if (root.startsWith(":pserver:")) { > isPServer = true; > // strip off the :pserver: > root = root.substring(9); > } > > int atIndex = root.indexOf("@"); > int cvsrootIndex = root.indexOf(":"); > > userN ame = root.substring(0, atIndex); > hostName = root.substring(atIndex + 1, cvsrootIndex); > rootDirectory = root.substring(cvsrootIndex + 1); > } > > public void setPackage(String p) { > repository = p; > } > > // XXX: Need to handle this in the Jcvs way > public void setTag(String p) { > // Check if not real tag => set it to null > if (p != null) { > if (p.trim().equals("")) > p = null; > } > // this.tag = p; > } > > // > // CVS USER INTERFACE METHODS > // > > public void uiDisplayProgressMsg( String message ) { > System.out.println("[exec] " + message); > } > > public void uiDisplayProgramError( String error ) { > System.out.println("[error] " + error); > } > > public void uiDisplayResponse( CVSResponse response ) { > } > > // > // END OF CVS USER INTERFACE METHODS > // > > } > >