Browse Source

Integrate Buildnumber task.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272084 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
1f1768b196
3 changed files with 302 additions and 0 deletions
  1. +46
    -0
      docs/manual/CoreTasks/buildnumber.html
  2. +255
    -0
      src/main/org/apache/tools/ant/taskdefs/BuildNumber.java
  3. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties

+ 46
- 0
docs/manual/CoreTasks/buildnumber.html View File

@@ -0,0 +1,46 @@
<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>


+ 255
- 0
src/main/org/apache/tools/ant/taskdefs/BuildNumber.java View File

@@ -0,0 +1,255 @@
/*
* 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$ $Date$
* @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 );
}
}
}

+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -64,6 +64,7 @@ loadproperties=org.apache.tools.ant.taskdefs.LoadProperties
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


Loading…
Cancel
Save