ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs BuildNumber.java defaults.properties
Date Fri, 29 Mar 2002 01:30:42 GMT
donaldp     02/03/28 17:30:42

  Modified:    src/main/org/apache/tools/ant/taskdefs defaults.properties
  Added:       docs/manual/CoreTasks buildnumber.html
               src/main/org/apache/tools/ant/taskdefs BuildNumber.java
  Log:
  Integrate Buildnumber task.
  
  Revision  Changes    Path
  1.1                  jakarta-ant/docs/manual/CoreTasks/buildnumber.html
  
  Index: buildnumber.html
  ===================================================================
  <html>
  
  <head>
  <meta http-equiv="Content-Language" content="en-us">
  <title>Buildnumber Task</title>
  </head>
  
  <body>
  
  <h2><a name="buildnumber">Buildnumber</a></h2>
  <h3>Description</h3>
  <p>This is a basic task that can be used to track build numbers.</p>
  <p>It will first attempt to read a build number from a file, then
  set the property "build.number" to the value that was read in
  (or 0 if no such value). Then it will increment the build number
  by one and write it back out into the file.</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">file</td>
      <td valign="top">the file to read and write build number from.</td>
      <td align="center" valign="top">No, defaults to &quot;build.number&quot;</td>
    </tr>
  </table>
  
  <h3>Examples</h3>
  <pre>  &lt;buildnumber/&gt;</pre>
  
  <p>Read, increment and write a build number to the default file &quot;build.number&quot;.</p>
  
  <pre>  &lt;buildnumber file=&quot;mybuild.number&quot;/&gt;</pre>
  
  <p>Read, increment and write a build number to the file &quot;mybuild.number&quot;.</p>
  
  <hr><p align="center">Copyright &copy; 2002 Apache Software Foundation.
All rights
  Reserved.</p>
  
  </body>
  </html>
  
  
  
  
  1.118     +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.117
  retrieving revision 1.118
  diff -u -r1.117 -r1.118
  --- defaults.properties	28 Mar 2002 22:56:48 -0000	1.117
  +++ defaults.properties	29 Mar 2002 01:30:41 -0000	1.118
  @@ -64,6 +64,7 @@
   basename=org.apache.tools.ant.taskdefs.Basename
   dirname=org.apache.tools.ant.taskdefs.Dirname
   changelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask
  +buildnumber=org.apache.tools.ant.taskdefs.BuildNumber
   
   # optional tasks
   script=org.apache.tools.ant.taskdefs.optional.Script
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java
  
  Index: BuildNumber.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.util.Properties;
  import org.apache.tools.ant.Task;
  import org.apache.tools.ant.BuildException;
  
  /**
   * This is a basic task that can be used to track build numbers.
   *
   * It will first attempt to read a build number from a file, then
   * set the property "build.number" to the value that was read in
   * (or 0 if no such value). Then it will increment the build number
   * by one and write it back out into the file.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/03/29 01:30:41 $
   * @ant.task name="buildnumber"
   */
  public class BuildNumber
      extends Task
  {
      /**
       * The name of the property in which the build number is stored.
       */
      private static final String DEFAULT_PROPRTY_NAME = "build.number";
  
      /**
       * The default filename to use if no file specified.
       */
      private static final String DEFAULT_FILENAME = DEFAULT_PROPRTY_NAME;
  
      /**
       * The File in which the build number is stored.
       */
      private File m_file;
  
      /**
       * Specify the file in which the build numberis stored.
       * Defaults to "build.number" if not specified.
       *
       * @param file the file in which build number is stored.
       */
      public void setFile( final File file )
      {
          m_file = file;
      }
  
      /**
       * Run task.
       *
       * @exception BuildException if an error occurs
       */
      public void execute()
          throws BuildException
      {
          validate();
  
          final Properties properties = loadProperties();
          final int buildNumber = getBuildNumber( properties );
  
          properties.put( DEFAULT_PROPRTY_NAME,
                          String.valueOf( buildNumber + 1 ) );
  
          // Write the properties file back out
          FileOutputStream output = null;
          try
          {
              output = new FileOutputStream( m_file );
  
              final String header = "Build Number for ANT. Do not edit!";
              properties.store( output, header );
          }
          catch( final IOException ioe )
          {
              final String message = "Error while writing " + m_file;
              throw new BuildException( message, ioe );
          }
          finally
          {
              if( null != output )
              {
                  try
                  {
                      output.close();
                  }
                  catch( final IOException ioe )
                  {
                  }
              }
          }
  
          //Finally set the property
          getProject().setProperty( DEFAULT_PROPRTY_NAME,
                                    String.valueOf( buildNumber ) );
      }
  
      /**
       * Utility method to retrieve build number from properties object.
       *
       * @param properties the properties to retrieve build number from
       * @return the build number or if no number in properties object
       * @throws BuildException if build.number property is not an integer
       */
      private int getBuildNumber( final Properties properties )
          throws BuildException
      {
          final String buildNumber =
              properties.getProperty( DEFAULT_PROPRTY_NAME, "0" ).trim();
  
          // Try parsing the line into an integer.
          try
          {
              return Integer.parseInt( buildNumber );
          }
          catch( final NumberFormatException nfe )
          {
              final String message = 
                  m_file + " contains a non integer build number: " + buildNumber;
              throw new BuildException( message );
          }
      }
  
      /**
       * Utility method to load properties from file.
       *
       * @return the loaded properties
       * @throws BuildException
       */
      private Properties loadProperties()
          throws BuildException
      {
          FileInputStream input = null;
          try
          {
              final Properties properties = new Properties();
              input = new FileInputStream( m_file );
              properties.load( input );
              return properties;
          }
          catch( final IOException ioe )
          {
              throw new BuildException( ioe.getMessage() );
          }
          finally
          {
              if( null != input )
              {
                  try
                  {
                      input.close();
                  }
                  catch( final IOException ioe )
                  {
                  }
              }
          }
      }
  
      /**
       * Validate that the task parameters are valid.
       *
       * @throws BuildException if parameters are invalid
       */
      private void validate()
          throws BuildException
      {
          if( null == m_file )
          {
              m_file = getProject().resolveFile( DEFAULT_FILENAME );
          }
  
          if( !m_file.exists() )
          {
              try
              {
                  m_file.createNewFile();
              }
              catch( final IOException ioe )
              {
                  final String message = 
                      m_file + " doesn't exist and new file can't be created.";
                  throw new BuildException( message, ioe );
              }
          }
  
          if( !m_file.canRead() )
          {
              final String message = "Unable to read from " + m_file + ".";
              throw new BuildException( message );
          }
  
          if( !m_file.canWrite() )
          {
              final String message = "Unable to write to " + m_file + ".";
              throw new BuildException( message );
          }
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message