ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From co...@apache.org
Subject cvs commit: jakarta-ant/docs/manual/OptionalTasks perforce.html
Date Thu, 30 Jan 2003 14:42:03 GMT
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 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.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:miha@softhome.net">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 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/>.
   */
  /*
   * 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>
   * &lt;project name=&quot;p4fstat&quot; default=&quot;p4fstat&quot;
basedir=&quot;C:\dev\gnu&quot;&gt;
   *     &lt;target name=&quot;p4fstat&quot; &gt;
   *         &lt;p4fstat showfilter=&quot;all&quot;&gt;
   *             &lt;fileset dir=&quot;depot&quot; includes=&quot;**\/*&quot;/&gt;
   *         &lt;/p4fstat&gt;
   *     &lt;/target&gt;
   * &lt;/project&gt;
   * </pre>
   *
   * @author <A HREF="mailto:miha@softhome.net">Miha</A>
   * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
   * @author <A HREF="mailto:ashundi@tibco.com">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 @@
   &lt;p4add&gt;
   &lt;p4submit change=&quot;${p4.change}&quot;/&gt;
   </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>&quot;all&quot;</td><td>list all files,
first the ones which are under Perforce control, then the others</td></tr>
  +        <tr><td>&quot;existing&quot;</td><td>list only
files under Perforce control</td></tr>
  +        <tr><td>&quot;non-existing&quot;</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>
  +&lt;project name=&quot;p4fstat&quot; default=&quot;p4fstat&quot; basedir=&quot;C:\dev\gnu&quot;&gt;
  +    &lt;target name=&quot;p4fstat&quot; &gt;
  +        &lt;p4fstat showfilter=&quot;all&quot;&gt;
  +            &lt;fileset dir=&quot;depot&quot; includes=&quot;**/*&quot;/&gt;
  +        &lt;/p4fstat&gt;
  +    &lt;/target&gt;
  +&lt;/project&gt;</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: ant-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: ant-dev-help@jakarta.apache.org


Mime
View raw message