handle multiple projects in one go. Submitted by: Frank Wierzbicki <wierzbickif@yahoo.com> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268981 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -13,10 +13,12 @@ Changes that could break older environments: | |||
| * several Zip methods have changed their signature as we now use a Zip | |||
| package of our own that handles Unix permissions for directories. | |||
| * The <pvcs> task has been move to a package of its own. | |||
| Other changes: | |||
| -------------- | |||
| * New tasks: ear, p4counter, record | |||
| * New tasks: ear, p4counter, record, cvspass | |||
| * Ant now uses JAXP 1.1 | |||
| @@ -42,6 +44,8 @@ Other changes: | |||
| * <jar> now has a nested <metainf> element following the same idea as | |||
| <war>'s <webinf>. | |||
| * <pvcs> can now handle multiple projects. | |||
| Fixed bugs: | |||
| ----------- | |||
| @@ -3,7 +3,6 @@ | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | |||
| <meta http-equiv="Content-Language" content="en-us"> | |||
| <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.18 i686) [Netscape]"> | |||
| <title>PVCS task</title> | |||
| </head> | |||
| <body> | |||
| @@ -132,6 +131,35 @@ tag expects the executables to be found using the PATH environment variable.</td | |||
| <td VALIGN=TOP WIDTH="10%">No</td> | |||
| </tr> | |||
| </table> | |||
| <h3><a name="nested">Nested Elements</a></h3> | |||
| <h3>pvcsproject element</h3> | |||
| <p><code>pvcs</code> supports a nested | |||
| <code><pvcsproject></code> element, that represents a project | |||
| within the PVCS repository to extract files from. By nesting multiple | |||
| <code><pvcsproject></code> elements under the | |||
| <code><pvcs></code> task, multiple projects can be | |||
| specified.</p> | |||
| <h3>Parameters</h3> | |||
| <table BORDER CELLSPACING=0 CELLPADDING=2 > | |||
| <tr> | |||
| <td VALIGN=TOP WIDTH="12%"><b>Attribute</b></td> | |||
| <td VALIGN=TOP WIDTH="78%"><b>Description</b></td> | |||
| <td VALIGN=TOP WIDTH="10%"><b>Required</b></td> | |||
| </tr> | |||
| <tr> | |||
| <td VALIGN=TOP WIDTH="12%">name</td> | |||
| <td VALIGN=TOP WIDTH="78%">The name of the pvcs project</td> | |||
| <td VALIGN=TOP WIDTH="10%">Yes</td> | |||
| </tr> | |||
| </table> | |||
| <h3> | |||
| Examples</h3> | |||
| @@ -143,7 +171,7 @@ repository. | |||
| --> | |||
| <br> <!-- =================================================================== | |||
| --> | |||
| <br> <target name="getlastes"> | |||
| <br> <target name="getlatest"> | |||
| <br> < pvcs repository="/mnt/pvcs" | |||
| pvcsproject="/myprj"/> | |||
| <br> </target></ul> | |||
| @@ -164,6 +192,39 @@ Now run: | |||
| Total time: 19 seconds</pre> | |||
| This next example extracts the latest version of the files in the pvcs | |||
| repository from two projects using nested <pvcsproject> elements. | |||
| <ul> <!-- =================================================================== | |||
| --> | |||
| <br> <!-- Get latest from myprj and myprj2 | |||
| --> | |||
| <br> <!-- =================================================================== | |||
| --> | |||
| <br> <target name="getlatest2"> | |||
| <br> <pvcs repository="/mnt/pvcs"> | |||
| <br> <pvcsproject name="/myprj" /> | |||
| <br> <pvcsproject name="/myprj2" /> | |||
| <br> </pvcs> | |||
| <br> </target></ul> | |||
| Now run: | |||
| <p> ant getlatest2 | |||
| <p>This will cause the following output to appear: | |||
| <pre> getlatest2: | |||
| [pvcs] PVCS Version Manager (VMGUI) v6.6.10 (Build 870) for Windows NT/80x86 | |||
| [pvcs] Copyright 1985-2000 MERANT. All rights reserved. | |||
| [pvcs] PVCS Version Manager (get) v6.6.10 (Build 870) for Windows NT/80x86 | |||
| [pvcs] Copyright 1985-2000 MERANT. All rights reserved. | |||
| [pvcs] c:\myws\myprj\main.java <- C:\mypvcs\archives\myprj\main.java-arc | |||
| [pvcs] rev 1.1 | |||
| [pvcs] c:\myws\myprj\apache\tool.java <- C:\mypvcs\archives\myprj\apache\tool.java-arc | |||
| [pvcs] rev 1.5 | |||
| [pvcs] c:\myws\myprj2\apache\tool2.java <- C:\mypvcs\archives\myprj2\apache\tool2.java-arc | |||
| [pvcs] rev 1.2 | |||
| BUILD SUCCESSFUL | |||
| Total time: 22 seconds</pre> | |||
| <pre> | |||
| </pre> | |||
| @@ -78,7 +78,7 @@ csc=org.apache.tools.ant.taskdefs.optional.dotnet.CSharp | |||
| ilasm=org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm | |||
| stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook | |||
| test=org.apache.tools.ant.taskdefs.optional.Test | |||
| pvcs=org.apache.tools.ant.taskdefs.optional.Pvcs | |||
| pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs | |||
| p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change | |||
| p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label | |||
| p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have | |||
| @@ -55,9 +55,11 @@ | |||
| * [Additional notices, if required by prior licensing conditions] | |||
| * | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional; | |||
| package org.apache.tools.ant.taskdefs.optional.pvcs; | |||
| import java.io.*; | |||
| import java.util.Enumeration; | |||
| import java.util.Vector; | |||
| import java.text.*; | |||
| import java.util.Random; | |||
| import org.apache.tools.ant.BuildException; | |||
| @@ -78,6 +80,7 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||
| private String pvcsbin; | |||
| private String repository; | |||
| private String pvcsProject; | |||
| private Vector pvcsProjects; | |||
| private String workspace; | |||
| private String force; | |||
| private String promotiongroup; | |||
| @@ -148,8 +151,22 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||
| if(getWorkspace()!=null) | |||
| commandLine.createArgument().setValue("-sp"+getWorkspace()); | |||
| commandLine.createArgument().setValue("-pr"+getRepository()); | |||
| // default pvcs project is "/" | |||
| if(getPvcsproject() == null && getPvcsprojects().isEmpty()) | |||
| pvcsProject = "/"; | |||
| if(getPvcsproject()!=null) | |||
| commandLine.createArgument().setValue(getPvcsproject()); | |||
| if(!getPvcsprojects().isEmpty()) { | |||
| Enumeration e = getPvcsprojects().elements(); | |||
| while (e.hasMoreElements()) { | |||
| String projectName = ((PvcsProject)e.nextElement()).getName(); | |||
| if (projectName == null || (projectName.trim()).equals("")) | |||
| throw new BuildException("name is a required attribute of pvcsproject"); | |||
| commandLine.createArgument().setValue(projectName); | |||
| } | |||
| } | |||
| File tmp = null; | |||
| try { | |||
| @@ -163,10 +180,10 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||
| if(!tmp.exists()) | |||
| throw new BuildException("Communication between ant and pvcs failed"); | |||
| // Create foldes in workspace | |||
| // Create foldes in workspace | |||
| createFolders(tmp); | |||
| // Launch get on output captured from PCLI lvf | |||
| // Launch get on output captured from PCLI lvf | |||
| commandLine.clearArgs(); | |||
| commandLine.setExecutable(getExecutable(GET_EXE)); | |||
| @@ -256,6 +273,14 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||
| pvcsProject = prj; | |||
| } | |||
| /** | |||
| * Get name of the project in the PVCS repository | |||
| * @return Vector | |||
| */ | |||
| public Vector getPvcsprojects() { | |||
| return pvcsProjects; | |||
| } | |||
| /** | |||
| * Get name of the workspace to store the retrieved files | |||
| * @return String | |||
| @@ -362,13 +387,21 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||
| ignorerc=false; | |||
| } | |||
| /** | |||
| * handles <pvcsproject> subelements | |||
| * @param PvcsProject | |||
| */ | |||
| public void addPvcsproject(PvcsProject p) { | |||
| pvcsProjects.addElement(p); | |||
| } | |||
| /** | |||
| * Creates a Pvcs object | |||
| * Default PVCS project is "/" | |||
| */ | |||
| public Pvcs() { | |||
| super(); | |||
| pvcsProject = "/"; | |||
| pvcsProject = null; | |||
| pvcsProjects = new Vector(); | |||
| workspace = null; | |||
| repository = null; | |||
| pvcsbin = null; | |||
| @@ -0,0 +1,77 @@ | |||
| /* ==================================================================== | |||
| * | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2001 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 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.optional.pvcs; | |||
| import org.apache.tools.ant.Project; | |||
| /** | |||
| * class to handle <pvcsprojec> elements | |||
| */ | |||
| public class PvcsProject { | |||
| private String name; | |||
| public PvcsProject() { | |||
| super(); | |||
| } | |||
| public void setName(String name) { | |||
| PvcsProject.this.name = name; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| } | |||