bodewig 00/09/20 07:49:38
Modified: . WHATSNEW
docs index.html
src/main/org/apache/tools/ant/taskdefs CompileTask.java
defaults.properties
Added: src/main/org/apache/tools/ant/taskdefs UpToDate.java
Log:
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 <[EMAIL PROTECTED]>,
Hiroaki Nakamura <[EMAIL PROTECTED]>
Revision Changes Path
1.30 +1 -1 jakarta-ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- WHATSNEW 2000/09/19 09:09:20 1.29
+++ WHATSNEW 2000/09/20 14:49:34 1.30
@@ -46,7 +46,7 @@
--------------
* 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.
1.111 +36 -1 jakarta-ant/docs/index.html
Index: index.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/index.html,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -r1.110 -r1.111
--- index.html 2000/09/20 11:31:09 1.110
+++ index.html 2000/09/20 14:49:35 1.111
@@ -25,7 +25,7 @@
<li>Dave Walend (<a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</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 @@
<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>
@@ -3757,6 +3758,40 @@
</table>
<h3>Examples</h3>
<pre> <tstamp/></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 <srcfiles>
+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> <uptodate property="xmlBuild.notRequired"
targetfile="${deploy}\xmlClasses.jar" >
+ <srcfiles dir= "${src}/xml" includes="**/*.dtd"
/>
+ </uptodate></pre>
+<p>sets the property <code><i>xmlBuild.notRequired</i></code> to the value
"true"
+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>
1.3 +4 -0
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/CompileTask.java
Index: CompileTask.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/CompileTask.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CompileTask.java 2000/07/19 15:12:33 1.2
+++ CompileTask.java 2000/09/20 14:49:36 1.3
@@ -65,6 +65,8 @@
* which otherwise would require multiple executions of Ant.
*
* @author Sam Ruby <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
+ *
+ * @deprecated use <taskdef> elements nested into <target>s
instead
*/
public class CompileTask extends Javac {
@@ -84,6 +86,8 @@
* 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(); ) {
1.40 +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.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- defaults.properties 2000/09/15 11:41:18 1.39
+++ defaults.properties 2000/09/20 14:49:37 1.40
@@ -44,6 +44,7 @@
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
1.1
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/UpToDate.java
Index: UpToDate.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 [EMAIL PROTECTED]
*
* 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:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @author Hiroaki Nakamura <a href="mailto:[EMAIL PROTECTED]">[EMAIL
PROTECTED]</a>
* @author <a href="mailto:[EMAIL PROTECTED]">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;
}
}