donaldp 01/02/22 21:13:35
Added: src/main/org/apache/tools/ant/taskdefs/optional Pvcs.java Log: Actually add the Pvcs file Revision Changes Path 1.1 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/Pvcs.java Index: Pvcs.java =================================================================== /* ==================================================================== * * 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/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.tools.ant.taskdefs.optional; import java.io.*; import java.text.*; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.LogOutputStream; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.PumpStreamHandler; import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; import org.apache.tools.ant.types.Commandline; /** * A task that fetches source files from a PVCS archive * * @author Thomas Christensen <[EMAIL PROTECTED]> */ public class Pvcs extends org.apache.tools.ant.Task { private String pvcsbin; private String repository; private String pvcsProject; private String workspace; private String force; private String promotiongroup; private String label; private boolean ignorerc; /** * Constant for the thing to execute */ private static final String PCLI_EXE = "pcli"; /** * Constant for the PCLI listversionedfiles recursive i a format "get" understands */ private static final String PCLI_LVF_ARGS = "lvf -z -aw"; /** * Constant for the thing to execute */ private static final String GET_EXE = "get"; protected int runCmd(Commandline cmd, ExecuteStreamHandler out) { try { Project aProj = getProject(); Execute exe = new Execute(out); exe.setAntRun(aProj); exe.setWorkingDirectory(aProj.getBaseDir()); exe.setCommandline(cmd.getCommandline()); return exe.execute(); } catch (java.io.IOException e) { String msg = "Failed executing: " + cmd.toString(); throw new BuildException(msg, location); } } private String getExecutable(String exe) { StringBuffer correctedExe = new StringBuffer(); if(getPvcsbin()!=null) if(pvcsbin.endsWith(File.separator)) correctedExe.append(pvcsbin); else correctedExe.append(pvcsbin).append(File.separator); return correctedExe.append(exe).toString(); } /** * @exception org.apache.tools.ant.BuildException Something is stopping the build... */ public void execute() throws org.apache.tools.ant.BuildException { Project aProj = getProject(); int result = 0; if(repository == null || repository.trim().equals("")) throw new BuildException("Required argument repository not specified"); // Check workspace exists // Launch PCLI listversionedfiles -z -aw // Capture output // build the command line from what we got the format is Commandline commandLine = new Commandline(); commandLine.setExecutable(getExecutable(PCLI_EXE)); commandLine.createArgument().setValue("lvf"); commandLine.createArgument().setValue("-z"); commandLine.createArgument().setValue("-aw"); if(getWorkspace()!=null) commandLine.createArgument().setValue("-sp"+getWorkspace()); commandLine.createArgument().setValue("-pr"+getRepository()); if(getPvcsproject()!=null) commandLine.createArgument().setValue(getPvcsproject()); File tmp; try { tmp = File.createTempFile("pvcs_ant_",".log"); result = runCmd(commandLine, new PumpStreamHandler(new FileOutputStream(tmp), new LogOutputStream(this,Project.MSG_WARN))); if ( result != 0 && !ignorerc) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(msg, location); } if(!tmp.exists()) throw new BuildException("Communication between ant and pvcs failed"); // Create foldes in workspace createFolders(tmp); // Launch get on output captured from PCLI lvf commandLine.clearArgs(); commandLine.setExecutable(getExecutable(GET_EXE)); if(getForce()!=null && getForce().equals("yes")) commandLine.createArgument().setValue("-Y"); else commandLine.createArgument().setValue("-N"); if(getPromotiongroup()!=null) commandLine.createArgument().setValue("-G"+getPromotiongroup()); else { if(getLabel()!=null) commandLine.createArgument().setValue("-r"+getLabel()); } commandLine.createArgument().setValue("@"+tmp.getAbsolutePath()); result = runCmd(commandLine, new LogStreamHandler(this,Project.MSG_INFO, Project.MSG_WARN)); if ( result != 0 && !ignorerc) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(msg, location); } } catch(FileNotFoundException e) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(e.getMessage(),location); } catch(IOException e) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(e.getMessage(),location); } catch(ParseException e) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(e.getMessage(),location); } } /** * Parses the file and creates the folders specified in the output section */ private void createFolders(File file) throws IOException, ParseException { BufferedReader in = new BufferedReader(new FileReader(file)); MessageFormat mf = new MessageFormat("{0}({1})"); String line = in.readLine(); while(line != null) { if(line.startsWith("\"")) { Object[] objs = mf.parse(line); String f = (String)objs[1]; // Extract the name of the directory from the filename File dir = new File(f.substring(0,f.lastIndexOf(File.separator))); if(!dir.exists()) dir.mkdirs(); } line = in.readLine(); } } /** * Get network name of the PVCS repository * @return String */ public String getRepository() { return repository; } /** * Specifies the network name of the PVCS repository * @param repo String */ public void setRepository(String repo) { repository = repo; } /** * Get name of the project in the PVCS repository * @return String */ public String getPvcsproject() { return pvcsProject; } /** * Specifies the name of the project in the PVCS repository * @param prj String */ public void setPvcsproject(String prj) { pvcsProject = prj; } /** * Get name of the workspace to store the retrieved files * @return String */ public String getWorkspace() { return workspace; } /** * Specifies the name of the workspace to store retrieved files * @param ws String */ public void setWorkspace(String ws) { workspace = ws; } /** * Get name of the PVCS bin directory * @return String */ public String getPvcsbin() { return pvcsbin; } /** * Specifies the location of the PVCS bin directory * @param ws String */ public void setPvcsbin(String bin) { pvcsbin = bin; } /** * Get value of force * @return String */ public String getForce() { return force; } /** * Specifies the value of the force argument * @param repo String (yes/no) */ public void setForce(String f) { if(f!=null && f.equalsIgnoreCase("yes")) force="yes"; else force = "no"; } /** * Get value of promotiongroup * @return String */ public String getPromotiongroup() { return promotiongroup; } /** * Specifies the name of the promotiongroup argument * @param repo String */ public void setPromotiongroup(String w) { promotiongroup=w; } /** * Get value of label * @return String */ public String getLabel() { return label; } /** * Specifies the name of the label argument * @param repo String */ public void setLabel(String l) { label=l; } /** * Get value of ignorereturncode * @return String */ public String getIgnoreReturnCode() { if(ignorerc) return "true"; else return "false"; } /** * If set to true the return value from executing the pvcs * commands are ignored. * @param l String "true/false" */ public void setIgnoreReturnCode(String l) { if(l.trim().equalsIgnoreCase("true")) ignorerc=true; else ignorerc=false; } /** * Creates a Pvcs object * Default PVCS project is "/" */ public Pvcs() { super(); pvcsProject = "/"; workspace = null; repository = null; pvcsbin = null; force=null; promotiongroup=null; label=null; ignorerc=false; } }
