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);
                project.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(":");

                userName = 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
        //

}



Reply via email to