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 | * several Zip methods have changed their signature as we now use a Zip | ||||
package of our own that handles Unix permissions for directories. | package of our own that handles Unix permissions for directories. | ||||
* The <pvcs> task has been move to a package of its own. | |||||
Other changes: | Other changes: | ||||
-------------- | -------------- | ||||
* New tasks: ear, p4counter, record | |||||
* New tasks: ear, p4counter, record, cvspass | |||||
* Ant now uses JAXP 1.1 | * Ant now uses JAXP 1.1 | ||||
@@ -42,6 +44,8 @@ Other changes: | |||||
* <jar> now has a nested <metainf> element following the same idea as | * <jar> now has a nested <metainf> element following the same idea as | ||||
<war>'s <webinf>. | <war>'s <webinf>. | ||||
* <pvcs> can now handle multiple projects. | |||||
Fixed bugs: | Fixed bugs: | ||||
----------- | ----------- | ||||
@@ -3,7 +3,6 @@ | |||||
<head> | <head> | ||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | ||||
<meta http-equiv="Content-Language" content="en-us"> | <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> | <title>PVCS task</title> | ||||
</head> | </head> | ||||
<body> | <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> | <td VALIGN=TOP WIDTH="10%">No</td> | ||||
</tr> | </tr> | ||||
</table> | </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> | <h3> | ||||
Examples</h3> | Examples</h3> | ||||
@@ -143,7 +171,7 @@ repository. | |||||
--> | --> | ||||
<br> <!-- =================================================================== | <br> <!-- =================================================================== | ||||
--> | --> | ||||
<br> <target name="getlastes"> | |||||
<br> <target name="getlatest"> | |||||
<br> < pvcs repository="/mnt/pvcs" | <br> < pvcs repository="/mnt/pvcs" | ||||
pvcsproject="/myprj"/> | pvcsproject="/myprj"/> | ||||
<br> </target></ul> | <br> </target></ul> | ||||
@@ -164,6 +192,39 @@ Now run: | |||||
Total time: 19 seconds</pre> | 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> | ||||
</pre> | </pre> | ||||
@@ -78,7 +78,7 @@ csc=org.apache.tools.ant.taskdefs.optional.dotnet.CSharp | |||||
ilasm=org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm | ilasm=org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm | ||||
stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook | stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook | ||||
test=org.apache.tools.ant.taskdefs.optional.Test | 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 | p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change | ||||
p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label | p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label | ||||
p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have | p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have | ||||
@@ -55,9 +55,11 @@ | |||||
* [Additional notices, if required by prior licensing conditions] | * [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.io.*; | ||||
import java.util.Enumeration; | |||||
import java.util.Vector; | |||||
import java.text.*; | import java.text.*; | ||||
import java.util.Random; | import java.util.Random; | ||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
@@ -78,6 +80,7 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||||
private String pvcsbin; | private String pvcsbin; | ||||
private String repository; | private String repository; | ||||
private String pvcsProject; | private String pvcsProject; | ||||
private Vector pvcsProjects; | |||||
private String workspace; | private String workspace; | ||||
private String force; | private String force; | ||||
private String promotiongroup; | private String promotiongroup; | ||||
@@ -148,8 +151,22 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||||
if(getWorkspace()!=null) | if(getWorkspace()!=null) | ||||
commandLine.createArgument().setValue("-sp"+getWorkspace()); | commandLine.createArgument().setValue("-sp"+getWorkspace()); | ||||
commandLine.createArgument().setValue("-pr"+getRepository()); | commandLine.createArgument().setValue("-pr"+getRepository()); | ||||
// default pvcs project is "/" | |||||
if(getPvcsproject() == null && getPvcsprojects().isEmpty()) | |||||
pvcsProject = "/"; | |||||
if(getPvcsproject()!=null) | if(getPvcsproject()!=null) | ||||
commandLine.createArgument().setValue(getPvcsproject()); | 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; | File tmp = null; | ||||
try { | try { | ||||
@@ -163,10 +180,10 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||||
if(!tmp.exists()) | if(!tmp.exists()) | ||||
throw new BuildException("Communication between ant and pvcs failed"); | throw new BuildException("Communication between ant and pvcs failed"); | ||||
// Create foldes in workspace | |||||
// Create foldes in workspace | |||||
createFolders(tmp); | createFolders(tmp); | ||||
// Launch get on output captured from PCLI lvf | |||||
// Launch get on output captured from PCLI lvf | |||||
commandLine.clearArgs(); | commandLine.clearArgs(); | ||||
commandLine.setExecutable(getExecutable(GET_EXE)); | commandLine.setExecutable(getExecutable(GET_EXE)); | ||||
@@ -256,6 +273,14 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||||
pvcsProject = prj; | 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 | * Get name of the workspace to store the retrieved files | ||||
* @return String | * @return String | ||||
@@ -362,13 +387,21 @@ public class Pvcs extends org.apache.tools.ant.Task { | |||||
ignorerc=false; | ignorerc=false; | ||||
} | } | ||||
/** | |||||
* handles <pvcsproject> subelements | |||||
* @param PvcsProject | |||||
*/ | |||||
public void addPvcsproject(PvcsProject p) { | |||||
pvcsProjects.addElement(p); | |||||
} | |||||
/** | /** | ||||
* Creates a Pvcs object | * Creates a Pvcs object | ||||
* Default PVCS project is "/" | |||||
*/ | */ | ||||
public Pvcs() { | public Pvcs() { | ||||
super(); | super(); | ||||
pvcsProject = "/"; | |||||
pvcsProject = null; | |||||
pvcsProjects = new Vector(); | |||||
workspace = null; | workspace = null; | ||||
repository = null; | repository = null; | ||||
pvcsbin = 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; | |||||
} | |||||
} |