Clover coverage report - Ant Coverage
Coverage timestamp: Tue Apr 8 2003 20:43:55 EST
file stats: LOC: 179   Methods: 6
NCLOC: 63   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
P4Change.java 22.2% 22.2% 16.7% 21.7%
 1   
 /*
 2   
  * The Apache Software License, Version 1.1
 3   
  *
 4   
  * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights
 5   
  * reserved.
 6   
  *
 7   
  * Redistribution and use in source and binary forms, with or without
 8   
  * modification, are permitted provided that the following conditions
 9   
  * are met:
 10   
  *
 11   
  * 1. Redistributions of source code must retain the above copyright
 12   
  *    notice, this list of conditions and the following disclaimer.
 13   
  *
 14   
  * 2. Redistributions in binary form must reproduce the above copyright
 15   
  *    notice, this list of conditions and the following disclaimer in
 16   
  *    the documentation and/or other materials provided with the
 17   
  *    distribution.
 18   
  *
 19   
  * 3. The end-user documentation included with the redistribution, if
 20   
  *    any, must include the following acknowlegement:
 21   
  *       "This product includes software developed by the
 22   
  *        Apache Software Foundation (http://www.apache.org/)."
 23   
  *    Alternately, this acknowlegement may appear in the software itself,
 24   
  *    if and wherever such third-party acknowlegements normally appear.
 25   
  *
 26   
  * 4. The names "Ant" and "Apache Software
 27   
  *    Foundation" must not be used to endorse or promote products derived
 28   
  *    from this software without prior written permission. For written
 29   
  *    permission, please contact apache@apache.org.
 30   
  *
 31   
  * 5. Products derived from this software may not be called "Apache"
 32   
  *    nor may "Apache" appear in their names without prior written
 33   
  *    permission of the Apache Group.
 34   
  *
 35   
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 36   
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 37   
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 38   
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 39   
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 40   
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 41   
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 42   
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 43   
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 44   
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 45   
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 46   
  * SUCH DAMAGE.
 47   
  * ====================================================================
 48   
  *
 49   
  * This software consists of voluntary contributions made by many
 50   
  * individuals on behalf of the Apache Software Foundation.  For more
 51   
  * information on the Apache Software Foundation, please see
 52   
  * <http://www.apache.org/>.
 53   
  */
 54   
 /*
 55   
  * Portions of this software are based upon public domain software
 56   
  * originally written at the National Center for Supercomputing Applications,
 57   
  * University of Illinois, Urbana-Champaign.
 58   
  */
 59   
 
 60   
 package org.apache.tools.ant.taskdefs.optional.perforce;
 61   
 
 62   
 import org.apache.tools.ant.BuildException;
 63   
 import org.apache.tools.ant.Project;
 64   
 
 65   
 /**
 66   
  * Requests a new changelist from the Perforce server.
 67   
  * P4Change creates a new changelist in perforce. P4Change sets the property
 68   
  * ${p4.change} with the new changelist number. This should then be passed into
 69   
  * p4edit and p4submit.
 70   
  *
 71   
  *
 72   
  * @see P4Edit
 73   
  * @see P4Submit
 74   
  * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
 75   
  *
 76   
  * @ant.task category="scm"
 77   
  */
 78   
 public class P4Change extends P4Base {
 79   
 
 80   
     protected String emptyChangeList = null;
 81   
     protected String description = "AutoSubmit By Ant";
 82   
 
 83   
     /**
 84   
      * throw all immutability rules to the wind
 85   
      */
 86  0
     public void execute() throws BuildException {
 87   
 
 88  0
         if (emptyChangeList == null) {
 89  0
             emptyChangeList = getEmptyChangeList();
 90   
         }
 91  0
         final Project myProj = getProject();
 92   
 
 93  0
         P4Handler handler = new P4HandlerAdapter() {
 94  0
             public void process(String line) {
 95  0
                 if (util.match("/Change/", line)) {
 96   
 
 97   
                     //Remove any non-numerical chars - should leave the change number
 98  0
                     line = util.substitute("s/[^0-9]//g", line);
 99   
 
 100  0
                     int changenumber = Integer.parseInt(line);
 101  0
                     log("Change Number is " + changenumber, Project.MSG_INFO);
 102  0
                     myProj.setProperty("p4.change", "" + changenumber);
 103   
 
 104  0
                 } else if (util.match("/error/", line)) {
 105  0
                     throw new BuildException("Perforce Error, check client settings and/or server");
 106   
                 }
 107   
 
 108   
             }
 109   
         };
 110   
 
 111  0
         handler.setOutput(emptyChangeList);
 112   
 
 113  0
         execP4Command("change -i", handler);
 114   
     }
 115   
 
 116   
 
 117  0
     public String getEmptyChangeList() throws BuildException {
 118  0
         final StringBuffer stringbuf = new StringBuffer();
 119   
 
 120  0
         execP4Command("change -o", new P4HandlerAdapter() {
 121  0
             public void process(String line) {
 122  0
                 if (!util.match("/^#/", line)) {
 123  0
                     if (util.match("/error/", line)) {
 124   
 
 125  0
                         log("Client Error", Project.MSG_VERBOSE);
 126  0
                         throw new BuildException("Perforce Error, check client settings and/or server");
 127   
 
 128  0
                     } else if (util.match("/<enter description here>/", line)) {
 129   
 
 130   
                         // we need to escape the description in case there are /
 131  0
                         description = backslash(description);
 132  0
                         line = util.substitute("s/<enter description here>/" + description + "/", line);
 133   
 
 134  0
                     } else if (util.match("/\\/\\//", line)) {
 135   
                         //Match "//" for begining of depot filespec
 136  0
                         return;
 137   
                     }
 138   
 
 139  0
                     stringbuf.append(line);
 140  0
                     stringbuf.append("\n");
 141   
 
 142   
                 }
 143   
             }
 144   
         });
 145   
 
 146  0
         return stringbuf.toString();
 147   
     }
 148   
 
 149   
     /**
 150   
      * Ensure that a string is backslashing slashes so that  it does not
 151   
      * confuse them with Perl substitution delimiter in Oro. Backslashes are
 152   
      * always backslashes in a string unless they escape the delimiter.
 153   
      * @param value the string to backslash for slashes
 154   
      * @return the backslashed string
 155   
      * @see < a href="http://jakarta.apache.org/oro/api/org/apache/oro/text/perl/Perl5Util.html#substitute(java.lang.String,%20java.lang.String)">Oro</a>
 156   
      */
 157  2
     public static final String backslash(String value) {
 158  2
         final StringBuffer buf = new StringBuffer(value.length());
 159  2
         final int len = value.length();
 160  2
         for (int i = 0; i < len; i++) {
 161  30
             char c = value.charAt(i);
 162  30
             if (c == '/') {
 163  5
                 buf.append('\\');
 164   
             }
 165  30
             buf.append(c);
 166   
         }
 167  2
         return buf.toString();
 168   
     }
 169   
 
 170   
     /**
 171   
      * Description for ChangeList;optional.
 172   
      * If none is specified, it will default to "AutoSubmit By Ant"
 173   
      */
 174  0
     public void setDescription(String desc) {
 175  0
         this.description = desc;
 176   
     }
 177   
 
 178   
 } //EoF
 179