antoine 2003/05/24 08:28:38
Modified: src/main/org/apache/tools/ant/taskdefs/optional/perforce SimpleP4OutputHandler.java docs/manual/OptionalTasks perforce.html src/main/org/apache/tools/ant/taskdefs defaults.properties Added: src/main/org/apache/tools/ant/taskdefs/optional/perforce P4Labelsync.java Log: New p4labelsync task - update in documentation of Perforce tasks PR: 18431 Revision Changes Path 1.13 +4 -1 ant/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java Index: SimpleP4OutputHandler.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- SimpleP4OutputHandler.java 17 Feb 2003 09:07:34 -0000 1.12 +++ SimpleP4OutputHandler.java 24 May 2003 15:28:38 -0000 1.13 @@ -84,8 +84,11 @@ //Others mark errors as info, for example edit a file //which is already open for edit..... //Just look for error: - catches most things.... + //when running labelsync, if view elements are in sync, Perforce produces a line of output + //looking like this one : + //error: //depot/file2 - label in sync. - if (parent.util.match("/error:/", line) && !parent.util.match("/up-to-date/", line)) { + if (parent.util.match("/error:/", line) && !parent.util.match("/up-to-date/", line) && !parent.util.match("/label in sync/", line)) { throw new BuildException(line); } 1.1 ant/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Labelsync.java Index: P4Labelsync.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2003 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 "Ant" 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/>. */ /* * Portions of this software are based upon public domain software * originally written at the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign. */ package org.apache.tools.ant.taskdefs.optional.perforce; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.util.StringUtils; /** * Syncs an existing Perforce label against the Perforce client * or against a set of files/revisions * * * Example Usage: * <pre> * <p4labelsync name="MyLabel-${TSTAMP}-${DSTAMP}" view="//depot/...#head;//depot2/file1#25" /> * </pre> * * @author <A HREF="mailto:[EMAIL PROTECTED]">Antoine Levy-Lambert</A> * * @ant.task category="scm" */ public class P4Labelsync extends P4Base { protected String name; private boolean add; /* -a */ private boolean delete; /* -n */ private boolean simulationmode; /* -n */ /** * -a flag of p4 labelsync - preserve files which exist in the label, but not in the current view * @return add attribute * if set to true the task will not remove any files from the label * only add files which were not there previously or update these where the revision has changed * the add attribute is the -a flag of p4 labelsync */ public boolean isAdd() { return add; } /** * -a flag of p4 labelsync - preserve files which exist in the label, but not in the current view * @param add if set to true the task will not remove any files from the label * only add files which were not there previously or update these where the revision has changed * the add attribute is the -a flag of p4 labelsync */ public void setAdd(boolean add) { this.add = add; } /** * -d flag of p4 labelsync; indicates an intention of deleting from the label the files specified in the view * @return delete attribute */ public boolean isDelete() { return delete; } /** * -d flag of p4 labelsync; indicates an intention of deleting from the label the files specified in the view * @param delete */ public void setDelete(boolean delete) { this.delete = delete; } /** * The name of the label; optional, default "AntLabel" */ public void setName(String name) { this.name = name; } /** * -n flag of p4 labelsync - display changes without actually doing them * @return -n flag of p4 labelsync */ public boolean isSimulationmode() { return simulationmode; } /** * -n flag of p4 labelsync - display changes without actually doing them * @param simulationmode */ public void setSimulationmode(boolean simulationmode) { this.simulationmode = simulationmode; } /** * do the work */ public void execute() throws BuildException { log("P4Labelsync exec:", Project.MSG_INFO); if (P4View != null && P4View.length() >= 1) { P4View = StringUtils.replace(P4View, ":", "\n\t"); P4View = StringUtils.replace(P4View, ";", "\n\t"); } if (P4View == null) { P4View=""; } if (name == null || name.length() < 1) { throw new BuildException("name attribute is compulsory for labelsync"); } if ( this.isSimulationmode() ) { P4CmdOpts = P4CmdOpts + " -n"; } if ( this.isDelete() ) { P4CmdOpts = P4CmdOpts + " -d"; } if ( this.isAdd() ) { P4CmdOpts = P4CmdOpts + " -a"; } execP4Command("-s labelsync -l "+name +" "+ P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this)); } } 1.21 +103 -18 ant/docs/manual/OptionalTasks/perforce.html Index: perforce.html =================================================================== RCS file: /home/cvs/ant/docs/manual/OptionalTasks/perforce.html,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- perforce.html 4 Feb 2003 12:23:50 -0000 1.20 +++ perforce.html 24 May 2003 15:28:38 -0000 1.21 @@ -9,6 +9,7 @@ <li>Les Hughes (<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>)</li> <li>Kirk Wylie (<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>)</li> <li>Matt Bishop (<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>)</li> + <li>Antoine Levy-Lambert (<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>)</li> </ul> <p>Version $Revision$ - $Date$</p> <hr> @@ -62,6 +63,10 @@ <td>Create a label reflecting files in the current workspace</td> </tr> <tr> + <td><a href="#p4labelsync">P4Labelsync</a></td> + <td>Syncs an existing label</td> + </tr> + <tr> <td><a href="#p4counter">P4Counter</a></td> <td>Obtain or set the value of a counter</td> </tr> @@ -202,23 +207,6 @@ available from the <a href="http://www.perforce.com/" target="_top">Perforce website</a>. </p> -<h3>Taskdefs</h3> -<p>Standard taskdefs (for you to copy'n'paste) -- normally this is done automatically if you install this optional task.</p> -<pre> - <taskdef name="p4sync" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Sync"/> - <taskdef name="p4change" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Change"/> - <taskdef name="p4edit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Edit"/> - <taskdef name="p4submit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Submit"/> - <taskdef name="p4have" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Have"/> - <taskdef name="p4label" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Label"/> - <taskdef name="p4counter" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Counter"/> - <taskdef name="p4reopen" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Reopen"/> - <taskdef name="p4revert" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Revert"/> - <taskdef name="p4add" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Add"/> - <taskdef name="p4delete" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Delete"/> - <taskdef name="p4integrate" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Integrate"/> - <taskdef name="p4resolve" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Resolve"/> -</pre> <hr> <h2>Task Descriptions</h2> @@ -423,6 +411,96 @@ <hr> +<h2><a name="p4labelsync">P4Labelsync</a></h2> +<h3>Description:</h3> +<p>Syncs an existing label against the current workspace or against specified revisions. +</p> +<h3>Parameters</h3> +<table border="1" cellpadding="2" cellspacing="0"> + <tr> + <td valign="top"><b>Attribute</b></td> + <td valign="top"><b>Description</b></td> + <td align="center" valign="top"><b>Required</b></td> + <td align="center" valign="top"><b>Perforce command line flag</b></td> + </tr> + <tr> + <td valign="top">name</td> + <td valign="top">The name of the label</td> + <td valign="center" align="center">Yes</td> + <td valign="top" align="center">-l labelname</td> + </tr> + <tr> + <td valign="top">view</td> + <td valign="top"> + list of files or revision specs separated by : or ;<br> + in the absence of this attribute, the labelsync will be done against the current Perforce client or the value of the p4client attribute or the value of the p4.client property or the value of the environment variable P4CLIENT</td> + <td valign="center" align="center">No</td> + <td valign="center" align="center">file[revRange] ... </td> + </tr> + <tr> + <td valign="top">simulationmode</td> + <td valign="top">Displays which effect the operation would have on the label but do not actually do it</td> + <td valign="center" align="center">No</td> + <td valign="top" align="center">-n</td> + </tr> + <tr> + <td valign="top">add</td> + <td valign="top">If set to true, preserve files which exist in the label, but not in the current view</td> + <td valign="center" align="center">No</td> + <td valign="top" align="center">-a</td> + </tr> + <tr> + <td valign="top">delete</td> + <td valign="top">If set to true, remove from the label the files mentioned in the view attribute</td> + <td valign="center" align="center">No</td> + <td valign="top" align="center">-d</td> + </tr> + + +</table> +<h3>Examples</h3> +<pre> +< +p4labelsync +name="current_release" +view="//depot/...#head;//depot2/file1#25" +add="true" +/> +</pre> +This example will add into the label called <i>current_release</i> the current head revision of all the files located under <i>//depot</i> +and the revision 25 of the file <i>//depot2/file1</i>. +<pre> +< +p4labelsync +name="current_release" +p4client="myclient" +/> +</pre> +This example will update the label called <i>current_release</i> so that it reflects the Perforce client <i>myclient</i>.<br> +Files present in the label before the sync and not present currently in the client will be removed from the label, because the add attribute is not set. +<pre> +< +p4labelsync +name="current_release" +/> +</pre> +This example will update the label called <i>current_release</i> so that it reflects the current default client for the ant Perforce tasks.<br> +The default client is by order of priority : +<ul> +<li> +the value of the p4.client property if set in the project +</li> +<li> +the value of the P4CLIENT environment variable +</li> +<li> +the default Perforce client from the Windows registry under Windows operating systems +</li> +</ul> +Files present in the label before the sync and not present currently in the client will be removed from the label, because the add attribute is not set. +<hr> + + <h2><a name="p4counter">P4Counter</a></h2> <h3>Description:</h3> <p> @@ -872,6 +950,13 @@ <td valign="top">Added globalopts to P4Base to allow additional global options to be set.<br> Added p4fstat task</td> +</tr> +<tr> + <td valign="top">May 2003</td> + <td valign="top">V1.3</td> + <td valign="top">Added p4labelsync, p4resolve, p4integrate.<br> + Changed p4submit (detection of changes of change numbers, + and of failed submits due to resolution needed)</td> </tr> </table> <hr> 1.148 +1 -0 ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties Index: defaults.properties =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v retrieving revision 1.147 retrieving revision 1.148 diff -u -r1.147 -r1.148 --- defaults.properties 13 May 2003 14:37:03 -0000 1.147 +++ defaults.properties 24 May 2003 15:28:38 -0000 1.148 @@ -128,6 +128,7 @@ p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change p4delete=org.apache.tools.ant.taskdefs.optional.perforce.P4Delete p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label +p4labelsync=org.apache.tools.ant.taskdefs.optional.perforce.P4Labelsync p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit