Browse Source

New task <uptodate> that set's a property if a given target file is

newer than a given set of source files.

I've taken the freedom to merge ideas submitted by William and Hiroaki
and to throw in some of my own.

Submitted by:	William Ferguson <williamf@mincom.com>,
                Hiroaki Nakamura <hnakamur@mc.neweb.ne.jp>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268019 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 25 years ago
parent
commit
683a5f1433
5 changed files with 204 additions and 2 deletions
  1. +1
    -1
      WHATSNEW
  2. +36
    -1
      docs/index.html
  3. +4
    -0
      src/main/org/apache/tools/ant/taskdefs/CompileTask.java
  4. +162
    -0
      src/main/org/apache/tools/ant/taskdefs/UpToDate.java
  5. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties

+ 1
- 1
WHATSNEW View File

@@ -46,7 +46,7 @@ Other changes:
--------------

* New tasks: antstructure, cab, execon, fail, ftp, genkey, jlink,
junit, sql, javacc, jjtree, starteam, war, unwar.
junit, sql, javacc, jjtree, starteam, war, unwar, uptodate.

* New tasks mparse pending documentation.



+ 36
- 1
docs/index.html View File

@@ -25,7 +25,7 @@
<li>Dave Walend (<a href="mailto:dwalend@cs.tufts.edu">dwalend@cs.tufts.edu</a>)</li>
</ul>

<p>Version 1.2 - 2000/09/19</p>
<p>Version 1.2 - 2000/09/20</p>

<hr>
<h2>Table of Contents</h2>
@@ -876,6 +876,7 @@ same patterns as the example before.</p>
<li><a href="#taskdef">Taskdef</a></li>
<li><a href="#touch">Touch</a></li>
<li><a href="#tstamp">Tstamp</a></li>
<li><a href="#uptodate">Uptodate</a></li>
<li><a href="#unzip">Unjar</a></li>
<li><a href="#untar">Untar</a></li>
<li><a href="#unzip">Unwar</a></li>
@@ -3758,6 +3759,40 @@ initialization target.</p>
<h3>Examples</h3>
<pre> &lt;tstamp/&gt;</pre>
<hr>
<h2><a name="uptodate">Uptodate</a></h2>
<h3>Description</h3>
<p>Sets a property if a Target file is more up to date than a set of
Source files. Source files are specified by nested &lt;srcfiles&gt;
elements, these are <a href="#fileset">FileSet</a>s.</p>
<p>The value part of the property being set is <i>true</i> if the timestamp of the
Target file is more recent than the timestamp of every Source file.</p>
<p>Normally, this task is used to set properties that are useful to avoid target
execution depending on the relative age of the specified files.</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">property</td>
<td valign="top">the name of the property to set.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">targetfile</td>
<td valign="top">the file for which we want to determine the status.</td>
<td valign="top" align="center">Yes</td>
</tr>
</table>
<h3>Examples</h3>
<pre> &lt;uptodate property=&quot;xmlBuild.notRequired&quot; targetfile=&quot;${deploy}\xmlClasses.jar&quot; &gt;
&lt;srcfiles dir= &quot;${src}/xml&quot; includes=&quot;**/*.dtd&quot; /&gt;
&lt;/uptodate&gt;</pre>
<p>sets the property <code><i>xmlBuild.notRequired</i></code> to the value &quot;true&quot;
if the <i>${deploy}/xmlClasses.jar</i> is more up to date than any of the DTD files in the <i>${src}/xml</i> directory.</p>
<hr>
<h2><a name="unzip">Unjar/Unwar/Unzip</a></h2>
<h3>Description</h3>
<p>Unzips a zip-, war- or jarfile.</p>


+ 4
- 0
src/main/org/apache/tools/ant/taskdefs/CompileTask.java View File

@@ -65,6 +65,8 @@ import java.util.*;
* which otherwise would require multiple executions of Ant.
*
* @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
*
* @deprecated use &lt;taskdef&gt; elements nested into &lt;target&gt;s instead
*/

public class CompileTask extends Javac {
@@ -84,6 +86,8 @@ public class CompileTask extends Javac {
* do all the real work in init
*/
public void init() {
log("!! CompileTask is deprecated. !!");
log("Use <taskdef> elements nested into <target>s instead");

// create all the include entries from the task defs
for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) {


+ 162
- 0
src/main/org/apache/tools/ant/taskdefs/UpToDate.java View File

@@ -0,0 +1,162 @@
/*
* 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;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.*;
import java.io.*;
import java.util.Enumeration;
import java.util.Date;
import java.util.Vector;

/**
* Will set the given property if the specified target has a timestamp
* greater than all of the source files.
*
* @author William Ferguson <a href="mailto:williamf@mincom.com">williamf@mincom.com</a>
* @author Hiroaki Nakamura <a href="mailto:hnakamur@mc.neweb.ne.jp">hnakamur@mc.neweb.ne.jp</a>
* @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a>
*/

public class UpToDate extends MatchingTask {

private String _property;
private File _targetFile;
private Vector sourceFileSets = new Vector();

/**
* The property to set if the target file is more up to date than each of
* the source files.
*
* @param property the name of the property to set if Target is up to date.
*/
public void setProperty(String property) {
_property = property;
}

/**
* The file which must be more up to date than each of the source files
* if the property is to be set.
*
* @param file the file which we are checking against.
*/
public void setTargetFile(File file) {
_targetFile = file;
}

/**
* Nested <srcfiles> element.
*/
public void addSrcfiles(FileSet fs) {
sourceFileSets.addElement(fs);
}

/**
* Sets property to true if target file has a more recent timestamp than
* each of the source files.
*/
public void execute() throws BuildException {

if (sourceFileSets.size() == 0) {
throw new BuildException("At least one <srcfiles> element must be set");
}

if (_targetFile == null) {
throw new BuildException("The targetfile attribute must be set");
}

// if not there then it can't be up to date
if (!_targetFile.exists()) return;

Enumeration enum = sourceFileSets.elements();
boolean upToDate = true;
while (upToDate && enum.hasMoreElements()) {
FileSet fs = (FileSet) enum.nextElement();
DirectoryScanner ds = fs.getDirectoryScanner(project);
upToDate = upToDate && scanDir(fs.getDir(project), _targetFile,
ds.getIncludedFiles());
}

if (upToDate) {
this.project.setProperty(_property, "true");
log("File \"" + _targetFile.getAbsolutePath() + "\" is up to date.",
Project.MSG_VERBOSE);
}
}

protected boolean scanDir(File srcDir, File destFile, String files[]) {
long destLastModified = destFile.lastModified();
long now = (new Date()).getTime();
if (destLastModified > now) {
log("Warning: destfile modified in the future: " +
destFile.getPath(), Project.MSG_WARN);
}

for (int i = 0; i < files.length; i++) {
File srcFile = new File(srcDir, files[i]);

long srcLastModified = srcFile.lastModified();
if (srcLastModified > now) {
log("Warning: file modified in the future: " +
files[i], Project.MSG_WARN);
}

if (srcLastModified > destLastModified) {
return false;
}
}
return true;
}
}

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

@@ -44,6 +44,7 @@ sql=org.apache.tools.ant.taskdefs.SQLExec
mail=org.apache.tools.ant.taskdefs.SendEmail
fail=org.apache.tools.ant.taskdefs.Exit
war=org.apache.tools.ant.taskdefs.War
uptodate=org.apache.tools.ant.taskdefs.UpToDate

# optional tasks
script=org.apache.tools.ant.taskdefs.optional.Script


Loading…
Cancel
Save