Clover coverage report - Ant Coverage
Coverage timestamp: Tue Apr 8 2003 20:43:55 EST
file stats: LOC: 209   Methods: 8
NCLOC: 87   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
P4Label.java 0% 0% 0% 0%
 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 java.text.SimpleDateFormat;
 63   
 import java.util.Date;
 64   
 import org.apache.tools.ant.BuildException;
 65   
 import org.apache.tools.ant.Project;
 66   
 import org.apache.tools.ant.util.StringUtils;
 67   
 
 68   
 /**
 69   
  *  Creates a new Perforce label and set contents to reflect current
 70   
  *  client file revisions.
 71   
  *
 72   
  *  Label name defaults to AntLabel if none set.
 73   
  *
 74   
  * Example Usage:
 75   
  * <pre>
 76   
  *   &lt;P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /&gt;
 77   
  * </pre>
 78   
  *
 79   
  * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
 80   
  *
 81   
  * @ant.task category="scm"
 82   
  */
 83   
 public class P4Label extends P4Base {
 84   
 
 85   
     protected String name;
 86   
     protected String desc;
 87   
     protected String lock;
 88   
 
 89   
     /**
 90   
      * The name of the label; optional, default "AntLabel"
 91   
      */
 92  0
     public void setName(String name) {
 93  0
         this.name = name;
 94   
     }
 95   
 
 96   
     /**
 97   
      *Label Description; optional
 98   
      */
 99  0
     public void setDesc(String desc) {
 100  0
         this.desc = desc;
 101   
     }
 102   
 
 103   
     /**
 104   
      * when set to "locked", Perforce will lock the label once created; optional.
 105   
      */
 106  0
     public void setLock(String lock) {
 107  0
         this.lock = lock;
 108   
     }
 109   
 
 110   
     /**
 111   
      *  do the work
 112   
      */
 113  0
     public void execute() throws BuildException {
 114  0
         log("P4Label exec:", Project.MSG_INFO);
 115   
 
 116  0
         if (P4View == null || P4View.length() < 1) {
 117  0
             log("View not set, assuming //depot/...", Project.MSG_WARN);
 118  0
             P4View = "//depot/...";
 119   
         } else {
 120  0
             P4View = StringUtils.replace(P4View, ":", "\n\t");
 121  0
             P4View = StringUtils.replace(P4View, ";", "\n\t");
 122   
         }
 123   
 
 124  0
         if (desc == null || desc.length() < 1) {
 125  0
             log("Label Description not set, assuming 'AntLabel'",
 126   
                 Project.MSG_WARN);
 127  0
             desc = "AntLabel";
 128   
         }
 129   
 
 130  0
         if (lock != null && !lock.equalsIgnoreCase("locked")) {
 131  0
             log("lock attribute invalid - ignoring", Project.MSG_WARN);
 132   
         }
 133   
 
 134  0
         if (name == null || name.length() < 1) {
 135  0
             SimpleDateFormat formatter
 136   
                 = new SimpleDateFormat("yyyy.MM.dd-hh:mm");
 137  0
             Date now = new Date();
 138  0
             name = "AntLabel-" + formatter.format(now);
 139  0
             log("name not set, assuming '" + name + "'", Project.MSG_WARN);
 140   
         }
 141   
 
 142   
 
 143   
         //We have to create a unlocked label first
 144  0
         String newLabel =
 145   
                 "Label: " + name +
 146   
                 "\nDescription: " + desc +
 147   
                 "\nOptions: unlocked" +
 148   
                 "\nView: \n\t" + P4View;
 149   
 
 150  0
         P4Handler handler = new P4HandlerAdapter() {
 151  0
             public void process(String line) {
 152  0
                 log(line, Project.MSG_VERBOSE);
 153   
             }
 154   
         };
 155   
 
 156  0
         handler.setOutput(newLabel);
 157   
 
 158  0
         execP4Command("label -i", handler);
 159   
 
 160  0
         execP4Command("labelsync -l " + name, new P4HandlerAdapter() {
 161  0
             public void process(String line) {
 162  0
                 log(line, Project.MSG_VERBOSE);
 163   
             }
 164   
         });
 165   
 
 166   
 
 167  0
         log("Created Label " + name + " (" + desc + ") with view:\n" + P4View,
 168   
             Project.MSG_INFO);
 169   
 
 170   
         //Now lock if required
 171  0
         if (lock != null && lock.equalsIgnoreCase("locked")) {
 172   
 
 173  0
             log("Modifying lock status to 'locked'", Project.MSG_INFO);
 174   
 
 175  0
             final StringBuffer labelSpec = new StringBuffer();
 176   
 
 177   
             //Read back the label spec from perforce,
 178   
             //Replace Options
 179   
             //Submit back to Perforce
 180   
 
 181  0
             handler = new P4HandlerAdapter() {
 182  0
                 public void process(String line) {
 183  0
                     log(line, Project.MSG_VERBOSE);
 184   
 
 185  0
                     if (util.match("/^Options:/", line)) {
 186  0
                         line = "Options: " + lock;
 187   
                     }
 188   
 
 189  0
                     labelSpec.append(line + "\n");
 190   
                 }
 191   
             };
 192   
 
 193   
 
 194  0
             execP4Command("label -o " + name, handler);
 195  0
             log(labelSpec.toString(), Project.MSG_DEBUG);
 196   
 
 197  0
             log("Now locking label...", Project.MSG_VERBOSE);
 198  0
             handler = new P4HandlerAdapter() {
 199  0
                 public void process(String line) {
 200  0
                     log(line, Project.MSG_VERBOSE);
 201   
                 }
 202   
             };
 203   
 
 204  0
             handler.setOutput(labelSpec.toString());
 205  0
             execP4Command("label -i", handler);
 206   
         }
 207   
     }
 208   
 }
 209