You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@locus.apache.org on 2000/07/14 14:09:12 UTC

cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/vss MSVSS.java MSVSSGET.java

bodewig     00/07/14 05:09:12

  Modified:    docs     index.html
               src/main/org/apache/tools/ant/taskdefs defaults.properties
  Added:       src/main/org/apache/tools/ant/taskdefs/optional/vss
                        MSVSS.java MSVSSGET.java
  Log:
  Optional vssget Task
  Submitted by:	Andrew Everitt <An...@gbr.xerox.com>
  
  Revision  Changes    Path
  1.48      +61 -2     jakarta-ant/docs/index.html
  
  Index: index.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/index.html,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- index.html	2000/07/14 11:49:57	1.47
  +++ index.html	2000/07/14 12:09:09	1.48
  @@ -23,7 +23,7 @@
     <li>Sam Ruby (<a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>)</li>
   </ul>
   
  -<p>Version 1.0.8.2 - 2000/07/12</p>
  +<p>Version 1.0.8.2 - 2000/07/14</p>
   
   <hr>
   <h2>Table of Contents</h2>
  @@ -3311,6 +3311,7 @@
     <li><a href="#netrexxc">NetRexxC</a></li>
     <li><a href="#renameexts">RenameExtensions</a></li>
     <li><a href="#script">Script</a></li>
  +  <li><a href="#vssget">VssGet</a></li>
   </ul>
   <hr>
   <h2><a name="netrexxc">NetRexxC</a></h2>
  @@ -3686,7 +3687,65 @@
   <blockquote>
     <p>None yet available</p>
   </blockquote>
  -
  +<hr>
  +<h2><a name="vssget">VssGet</a></h2>
  +<h3><b>Description:</b></h3>
  +Task to perform GET commands to Microsoft Visual Source Safe.
  +<p>
  +The following attributes are interpretted:
  +<h3>Parameters:</h3>
  +<table border="1" cellpadding="2" cellspacing="0">
  +  <tr>
  +    <th>Attribute</th>
  +    <th>Values</th>
  +    <th>Required</th>
  +  </tr>
  +  <tr>
  +     <td>login</td>
  +     <td>username,password</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>vsspath</td>
  +     <td>SourceSafe path</td>
  +     <td>Yes</td>
  +  <tr>
  +  <tr>
  +     <td>localpath</td>
  +     <td>Override the working directory and get to the specified path</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>writable</td>
  +     <td>true or false</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>recursive</td>
  +     <td>true or false</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>version</td>
  +     <td>a version number to get</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>date</td>
  +     <td>a date stamp to get at</td>
  +     <td>No</td>
  +  <tr>
  +  <tr>
  +     <td>label</td>
  +     <td>a label to get for</td>
  +     <td>No</td>
  +  <tr>
  +</table>
  +<p>Note that only one of version, date or label should be specified</p>
  +<h3>Examples</h3>
  +<blockquote>
  +  <p>None yet available</p>
  +</blockquote>
   </body>
   
   </html>
  
  
  
  1.21      +1 -0      jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
  
  Index: defaults.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- defaults.properties	2000/07/12 14:19:52	1.20
  +++ defaults.properties	2000/07/14 12:09:10	1.21
  @@ -45,6 +45,7 @@
   ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator
   wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun
   wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop
  +vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET
   
   # deprecated ant tasks (kept for back compatibility)
   javadoc2=org.apache.tools.ant.taskdefs.Javadoc
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java
  
  Index: MSVSS.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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", "Tomcat", 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.vss;
  
  import org.apache.tools.ant.*;
  import org.apache.tools.ant.taskdefs.Exec;
  
  import java.io.File;
  
  /**
   * A base class for creating tasks for executing commands on Visual SourceSafe.
   * <p>
   * The class extends the 'exec' task as it operates by executing the ss.exe program
   * supplied with SourceSafe. You will need to have ss.exe in your PATH to use this
   * task.
   * </p>
   * <p>
   * This class provides set and get methods for 'login' and 'vsspath' attributes. It
   * also contains constants for the flags that can be passed to SS.
   * </p>
   *
   * @author Craig Cottingham
   * @author Andrew Everitt
   */
  public abstract class MSVSS extends Exec {
  
      private String m_vssLogin = null;
      private String m_vssPath = null;
  
      /**
       * Set the login to use when accessing vss.
       * <p>
       * Should be formatted as username,password
       *
       * @param login the login string to use
       */
      public final void setLogin(String login) {
          m_vssLogin = login;
      }
  
      /**
       * @return the appropriate login command if the 'login' attribute was specified, otherwise an empty string
       */
      public String getLoginCommand() {
          if ( m_vssLogin == null ) {
              return "";
          } else {
              return new String(" " + FLAG_LOGIN + m_vssLogin);
          }
      }
  
      /**
       * Set the path to the item in vss to operate on
       * <p>
       * Ant can't cope with a '$' sign in an attribute so we have to add it here.
       * Also we strip off any 'vss://' prefix which is an XMS special and should probably be removed!
       *
       * @param vssPath
       */
      public final void setVsspath(String vssPath) {
          if ( vssPath.startsWith("vss://") ) {
              m_vssPath= PROJECT_PREFIX + vssPath.substring(5);
          } else {
              m_vssPath = PROJECT_PREFIX + vssPath;
          }
      }
  
      /**
       * @return m_vssPath
       */
      public String getVsspath() {
          return new String(" " + m_vssPath);
      }
  
  
      /**
       * Constant for the thing to execute
       */
      public static final String SS_EXE = "ss";
  	/** */
      public static final String PROJECT_PREFIX = "$";
  
      /**
       * The 'Get' command
       */
      public static final String COMMAND_GET = "Get";
      /**
       * The 'Checkout' command
       */
      public static final String COMMAND_CHECKOUT = "Checkout";
      /**
       * The 'Label' command
       */
      public static final String COMMAND_LABEL = "Label";
      /**
       * The 'History' command
       */
      public static final String COMMAND_HISTORY = "History";
  
  	/** */
      public static final String FLAG_LOGIN = "-Y";
  	/** */
      public static final String FLAG_OVERRIDE_WORKING_DIR = "-GL";
  	/** */
      public static final String FLAG_AUTORESPONSE = "-I";
  	/** */
      public static final String FLAG_RECURSION = "-R";
  	/** */
      public static final String FLAG_VERSION = "-V";
  	/** */
      public static final String FLAG_VERSION_DATE = "-Vd";
  	/** */
      public static final String FLAG_VERSION_LABEL = "-VL";
  	/** */
      public static final String FLAG_WRITABLE = "-W";
  	/** */
      public static final String VALUE_NO = "-N";
  	/** */
      public static final String VALUE_YES = "-Y";
  }
  
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java
  
  Index: MSVSSGET.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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", "Tomcat", 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.vss;
  
  import org.apache.tools.ant.*;
  
  import java.io.File;
  
  /**
   * Task to perform GET commands to Microsoft Visual Source Safe.
   * <p>
   * The following attributes are interpretted:
   * <table border="1">
   *   <tr>
   *     <th>Attribute</th>
   *     <th>Values</th>
   *     <th>Required</th>
   *   </tr>
   *   <tr>
   *      <td>login</td>
   *      <td>username,password</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>vsspath</td>
   *      <td>SourceSafe path</td>
   *      <td>Yes</td>
   *   <tr>
   *   <tr>
   *      <td>localpath</td>
   *      <td>Override the working directory and get to the specified path</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>writable</td>
   *      <td>true or false</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>recursive</td>
   *      <td>true or false</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>version</td>
   *      <td>a version number to get</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>date</td>
   *      <td>a date stamp to get at</td>
   *      <td>No</td>
   *   <tr>
   *   <tr>
   *      <td>label</td>
   *      <td>a label to get for</td>
   *      <td>No</td>
   *   <tr>
   * </table>
   * <p>Note that only one of version, date or label should be specified</p>
   *
   * @author Craig Cottingham
   * @author Andrew Everitt
   */
  public class MSVSSGET extends MSVSS {
  
      private String m_LocalPath = null;
      private boolean m_Recursive = false;
      private boolean m_Writable = false;
      private String m_Version = null;
      private String m_Date = null;
      private String m_Label = null;
  
      /**
       * Executes the task.
       * <p>
       * Builds a command line to execute ss and then calls Exec's run method
       * to execute the command line.
       */
      public void execute() throws BuildException {
          StringBuffer commandLine = new StringBuffer();
          int result = 0;
  
          // first off, make sure that we've got a command and a vssdir ...
          if (getVsspath() == null) {
              String msg = "vsspath attribute must be set!";
              throw new BuildException(msg);
          }
  
          // now look for illegal combinations of things ...
  
          // build the command line from what we got the format is
          // ss Get VSS items [-G] [-H] [-I-] [-N] [-O] [-R] [-V] [-W] [-Y] [-?]
          // as specified in the SS.EXE help
          commandLine.append(SS_EXE).append(' ').append(COMMAND_GET);
  
          // VSS items
          commandLine.append(getVsspath());
          // -GL
          commandLine.append(getLocalpathCommand());
          // -I-
          commandLine.append(" -I-");  // ignore all errors
          // -R
          commandLine.append(getRecursiveCommand());
          // -V
          commandLine.append(getVersionCommand());
          // -W
          commandLine.append(getWritableCommand());
          // -Y
          commandLine.append(getLoginCommand());
  
          result = run(commandLine.toString());
          if ( result != 0 ) {
              String msg = "Failed executing: " + commandLine.toString();
              throw new BuildException(msg);
          }
      }
  
      /**
       * Set the local path.
       */
      public void setLocalpath(String localPath) {
          m_LocalPath = project.translatePath(localPath);
      }
  
      /**
       * Builds and returns the -GL flag command if required
       * <p>
       * The localpath is created if it didn't exist
       */
      public String getLocalpathCommand() {
          if (m_LocalPath == null) {
              return "";
          } else {
              // make sure m_LocalDir exists, create it if it doesn't
              File dir = project.resolveFile(m_LocalPath);
              if (!dir.exists()) {
                  boolean done = dir.mkdirs();
                  if (done == false) {
                      String msg = "Directory " + m_LocalPath + " creation was not " +
                          "succesful for an unknown reason";
                      throw new BuildException(msg);
                  }
                  project.log("Created dir: " + dir.getAbsolutePath());
              }
  
              return new String(" " + FLAG_OVERRIDE_WORKING_DIR + m_LocalPath);
          }
      }
  
      /**
       * Set behaviour recursive or non-recursive
       */
      public void setRecursive(String recursive) {
          m_Recursive = Project.toBoolean(recursive);
      }
  
      /**
       * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
       */
      public String getRecursiveCommand() {
          if ( !m_Recursive ) {
              return "";
          } else {
              return new String(" " + FLAG_RECURSION);
          }
      }
  
  	/**
       * Set behaviour, used in get command to make files that are 'got' writable
  	 */
      public final void setWritable(String argWritable) {
          m_Writable = Project.toBoolean(argWritable);
  	}
  
      /**
       * @return the 'make writable' command if the attribute was 'true', otherwise an empty string
       */
      public String getWritableCommand() {
          if ( !m_Writable ) {
              return "";
          } else {
              return new String(" " + FLAG_WRITABLE);
          }
      }
  
  	/**
       * Set the stored version string
       * <p>
       * Note we assume that if the supplied string has the value "null" that something
       * went wrong and that the string value got populated from a null object. This
       * happens if a ant variable is used e.g. version="${ver_server}" when ver_server
       * has not been defined to ant!
  	 */
      public void setVersion(String version) {
          if (version.equals("") || version.equals("null") ) {
              m_Version = null;
          } else {
              m_Version = version;
  		}
  	}
  
  	/**
       * Set the stored date string
       * <p>
       * Note we assume that if the supplied string has the value "null" that something
       * went wrong and that the string value got populated from a null object. This
       * happens if a ant variable is used e.g. date="${date}" when date
       * has not been defined to ant!
  	 */
      public void setDate(String date) {
          if (date.equals("") || date.equals("null") ) {
              m_Date = null;
          } else {
              m_Date = date;
  		}
  	}
  
      /**
       * Set the labeled version to operate on in SourceSafe
       * <p>
       * Note we assume that if the supplied string has the value "null" that something
       * went wrong and that the string value got populated from a null object. This
       * happens if a ant variable is used e.g. label="${label_server}" when label_server
       * has not been defined to ant!
       */
      public void setLabel(String label) {
          if ( label.equals("") || label.equals("null") ) {
              m_Label = null;
          } else {
              m_Label = label;
          }
      }
  
      /**
       * Simple order of priority. Returns the first specified of version, date, label
       * If none of these was specified returns ""
       */
      public String getVersionCommand() {
  
          if ( m_Version != null) {
              return new String(" " + FLAG_VERSION + m_Version);
          }
  
          if ( m_Date != null) {
              return new String(" " + FLAG_VERSION_DATE + m_Date);
          }
  
          if (m_Label != null) {
              return new String(" " + FLAG_VERSION_LABEL + m_Label);
          }
  
          return "";
      }
  
  }