conor 2003/01/30 06:42:03 Modified: docs/manual/OptionalTasks perforce.html Added: src/main/org/apache/tools/ant/taskdefs/optional/perforce FStatP4OutputHandler.java P4Fstat.java Log: Perforce task to show differences between local source repository and p4 repository and report on files that still not under revision control. PR: 13928 Submitted by: Miha Revision Changes Path 1.1 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/perforce/FStatP4OutputHandler.java Index: FStatP4OutputHandler.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 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 "The Jakarta Project", "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/>. */ package org.apache.tools.ant.taskdefs.optional.perforce; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.oro.text.perl.Perl5Util; import java.util.ArrayList; /** * FStatP4OutputHandler - spezialied Perforce output handler * able to sort files recognized as managed by Perforce and files not * managed by Perforce in the output * * @author <A HREF="mailto:[EMAIL PROTECTED]">Miha</A> */ class FStatP4OutputHandler extends P4HandlerAdapter { private P4Fstat parent; private ArrayList existing = new ArrayList(); private ArrayList nonExisting = new ArrayList(); private static Perl5Util util = new Perl5Util(); public FStatP4OutputHandler(P4Fstat parent) { this.parent = parent; } public void process(String line) throws BuildException { if (util.match("/^... clientFile (.+)$/", line)) { String f = util.group(1); existing.add(f); } else if (util.match("/^(.+) - no such file/", line)) { String f = util.group(1); nonExisting.add(f); } parent.log(parent.util.substitute("s/^.*: //", line), Project.MSG_VERBOSE); } public ArrayList getExisting() { return existing; } public ArrayList getNonExisting() { return nonExisting; } } 1.1 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Fstat.java Index: P4Fstat.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 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 "The Jakarta Project", "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.io.File; import java.util.Vector; import java.util.ArrayList; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileSet; /** * P4Fstat - find out which files are under Perforce control and which are not. * * <br><b>Example Usage:</b><br> * <pre> * <project name="p4fstat" default="p4fstat" basedir="C:\dev\gnu"> * <target name="p4fstat" > * <p4fstat showfilter="all"> * <fileset dir="depot" includes="**\/*"/> * </p4fstat> * </target> * </project> * </pre> * * @author <A HREF="mailto:[EMAIL PROTECTED]">Miha</A> * @author <A HREF="mailto:[EMAIL PROTECTED]">Les Hughes</A> * @author <A HREF="mailto:[EMAIL PROTECTED]">Anli Shundi</A> */ public class P4Fstat extends P4Base { private int changelist; private String addCmd = ""; private Vector filesets = new Vector(); private int cmdLength = 300; private static final int SHOW_ALL = 0; private static final int SHOW_EXISTING = 1; private static final int SHOW_NON_EXISTING = 2; private int show = SHOW_NON_EXISTING; private FStatP4OutputHandler handler; private StringBuffer filelist; private int fileNum = 0; private int doneFileNum = 0; private boolean debug = false; private static final String EXISTING_HEADER = "Following files exist in perforce"; private static final String NONEXISTING_HEADER = "Following files do not exist in perforce"; public void setShowFilter(String filter) { if (filter.equalsIgnoreCase("all")) { show = SHOW_ALL; } else if (filter.equalsIgnoreCase("existing")) { show = SHOW_EXISTING; } else if (filter.equalsIgnoreCase("non-existing")) { show = SHOW_NON_EXISTING; } else { throw new BuildException("P4Fstat: ShowFilter should be one of: " + "all, existing, non-existing"); } } public void setChangelist(int changelist) throws BuildException { if (changelist <= 0) { throw new BuildException("P4FStat: Changelist# should be a " + "positive number"); } this.changelist = changelist; } public void addFileset(FileSet set) { filesets.addElement(set); } public void execute() throws BuildException { handler = new FStatP4OutputHandler(this); if (P4View != null) { addCmd = P4View; } P4CmdOpts = (changelist > 0) ? ("-c " + changelist) : ""; filelist = new StringBuffer(); for (int i = 0; i < filesets.size(); i++) { FileSet fs = (FileSet) filesets.elementAt(i); DirectoryScanner ds = fs.getDirectoryScanner(getProject()); //File fromDir = fs.getDir(project); String[] srcFiles = ds.getIncludedFiles(); fileNum = srcFiles.length; if (srcFiles != null) { for (int j = 0; j < srcFiles.length; j++) { File f = new File(ds.getBasedir(), srcFiles[j]); filelist.append(" ").append('"').append(f.getAbsolutePath()).append('"'); doneFileNum++; if (filelist.length() > cmdLength) { execP4Fstat(filelist); filelist.setLength(0); } } if (filelist.length() > 0) { execP4Fstat(filelist); } } else { log("No files specified to add!", Project.MSG_WARN); } } if (show == SHOW_ALL || show == SHOW_EXISTING) { printRes(handler.getExisting(), EXISTING_HEADER); } if (show == SHOW_ALL || show == SHOW_NON_EXISTING) { printRes(handler.getNonExisting(), NONEXISTING_HEADER); } } public int getLengthOfTask() { return fileNum; } int getPasses() { return filesets.size(); } private void printRes(ArrayList ar, String header) { log(header, Project.MSG_INFO); for (int i = 0; i < ar.size(); i++) { log((String) ar.get(i), Project.MSG_INFO); } } private void execP4Fstat(StringBuffer list) { if (debug) { log("Executing fstat " + P4CmdOpts + " " + addCmd + list + "\n", Project.MSG_INFO); } execP4Command("fstat " + P4CmdOpts + " " + addCmd + list, handler); } } 1.19 +57 -5 jakarta-ant/docs/manual/OptionalTasks/perforce.html Index: perforce.html =================================================================== RCS file: /home/cvs/jakarta-ant/docs/manual/OptionalTasks/perforce.html,v retrieving revision 1.18 retrieving revision 1.19 diff -u -w -u -r1.18 -r1.19 --- perforce.html 30 Jan 2003 09:09:53 -0000 1.18 +++ perforce.html 30 Jan 2003 14:42:03 -0000 1.19 @@ -79,6 +79,11 @@ <td><a href="#p4add">P4Add</a></td> <td>Add files</td> </tr> + + <tr> + <td><a href="#p4fstat">P4Fstat</a></td> + <td>Show differences between local repository and p4 repository</td> + </tr> </table> <h3>General P4 Properties</h3> @@ -566,6 +571,52 @@ <p4add> <p4submit change="${p4.change}"/> </pre> +<hr> + +<h2><a name="p4fstat">P4Fstat</a></h2> +<h3>Description:</h3> +<p> +Lists files under Perforce control and files not under Perforce control in one or several filesets +</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> + </tr> + <tr> + <td valign="top">showfilter</td> + <td valign="top">should be one of + <table border="1"> + <tr><td>value</td><td>description</td></tr> + <tr><td>"all"</td><td>list all files, first the ones which are under Perforce control, then the others</td></tr> + <tr><td>"existing"</td><td>list only files under Perforce control</td></tr> + <tr><td>"non-existing"</td><td>list only files which are not under Perforce control</td></tr></table> + </td> + <td valign="top" align="center">Yes</td> + </tr> + <tr> + <td valign="top">fileset</td> + <td valign="top">one or several <a href="../CoreTypes/fileset.html">fileset(s)</a></td> + <td valign="top" align="center">yes (at least one fileset is needed)</td> + </tr> +</table> +Several nested filesets can be used with P4Fstat, one should be there at least. +<h3>Examples</h3> +will list all the files under C:\dev\gnu\depot, sorted by under Perforce or not under Perforce<br> +<pre> +<project name="p4fstat" default="p4fstat" basedir="C:\dev\gnu"> + <target name="p4fstat" > + <p4fstat showfilter="all"> + <fileset dir="depot" includes="**/*"/> + </p4fstat> + </target> +</project></p> +</pre> + + + <h2><a name="changes">Change History</a></h2> <table border="1" cellpadding="2" cellspacing="0"> @@ -588,10 +639,11 @@ Refactored exec'ing code</td> </tr> <tr> - <td valign="top">Nov 2002</td> + <td valign="top">Jan 2003</td> <td valign="top">V1.2</td> - <td valign="top">Added globalopts to P4Base to allow<br> - additional global options to be set.</td> + <td valign="top">Added globalopts to P4Base to allow + additional global options to be set.<br> + Added p4fstat task</td> </tr> </table> <hr>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]