@@ -6,6 +6,8 @@ Other changes: | |||||
* generatekey task now supports SubjectAlternativeName during key | * generatekey task now supports SubjectAlternativeName during key | ||||
generation. | generation. | ||||
* the <modified> selector has a new built-in algorithm 'lastmodified' | |||||
which computes a value based upon the lastmodified time of the file. | |||||
Changes from Ant 1.9.12 TO Ant 1.9.13 | Changes from Ant 1.9.12 TO Ant 1.9.13 | ||||
===================================== | ===================================== | ||||
@@ -742,6 +742,7 @@ | |||||
<li> hashvalue - HashvalueAlgorithm </li> | <li> hashvalue - HashvalueAlgorithm </li> | ||||
<li> digest - DigestAlgorithm </li> | <li> digest - DigestAlgorithm </li> | ||||
<li> checksum - ChecksumAlgorithm </li> | <li> checksum - ChecksumAlgorithm </li> | ||||
<li> lastmodified - LastModifiedAlgorithm </li> | |||||
</ul> | </ul> | ||||
</td> | </td> | ||||
<td valign="top" align="center"> No, defaults to <i>digest</i> </td> | <td valign="top" align="center"> No, defaults to <i>digest</i> </td> | ||||
@@ -869,6 +870,12 @@ | |||||
</ul> | </ul> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top"> lastmodified </td> | |||||
<td valign="top"> Uses the lastModified property of a file. No additional | |||||
configuration is required. | |||||
</td> | |||||
</tr> | |||||
<tr><td colspan="2"><font size="+1"><b> Cache options </b></font></td></tr> | <tr><td colspan="2"><font size="+1"><b> Cache options </b></font></td></tr> | ||||
<tr> | <tr> | ||||
<td valign="top"> propertyfile </td> | <td valign="top"> propertyfile </td> | ||||
@@ -0,0 +1,53 @@ | |||||
/* | |||||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||||
* contributor license agreements. See the NOTICE file distributed with | |||||
* this work for additional information regarding copyright ownership. | |||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
* (the "License"); you may not use this file except in compliance with | |||||
* the License. You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* | |||||
*/ | |||||
package org.apache.tools.ant.types.selectors.modifiedselector; | |||||
import java.io.File; | |||||
/** | |||||
* Computes a 'timestamp' of file based on the lastModified time of that file. | |||||
* | |||||
* @version 2018-07-25 | |||||
* @since Ant 1.10.6 and 1.9.14 | |||||
*/ | |||||
public class LastModifiedAlgorithm implements Algorithm { | |||||
/** | |||||
* This algorithm doesn't need any configuration. | |||||
* Therefore it's always valid. | |||||
* @return always true | |||||
*/ | |||||
public boolean isValid() { | |||||
return true; | |||||
} | |||||
/** | |||||
* Computes a 'timestamp' for a file based on the lastModified time. | |||||
* @param file The file for which the value should be computed | |||||
* @return the timestamp or <i>null</i> if the timestamp couldn't be computed | |||||
*/ | |||||
public String getValue(File file) { | |||||
long lastModified = file.lastModified(); | |||||
if (lastModified == 0L) { | |||||
return null; | |||||
} | |||||
return Long.toString(lastModified); | |||||
} | |||||
} |
@@ -321,6 +321,8 @@ public class ModifiedSelector extends BaseExtendSelector | |||||
algorithm = new DigestAlgorithm(); | algorithm = new DigestAlgorithm(); | ||||
} else if ("checksum".equals(algoName.getValue())) { | } else if ("checksum".equals(algoName.getValue())) { | ||||
algorithm = new ChecksumAlgorithm(); | algorithm = new ChecksumAlgorithm(); | ||||
} else if ("lastmodified".equals(algoName.getValue())) { | |||||
algorithm = new LastModifiedAlgorithm(); | |||||
} | } | ||||
} else { | } else { | ||||
if (algorithmClass != null) { | if (algorithmClass != null) { | ||||
@@ -928,7 +930,7 @@ public class ModifiedSelector extends BaseExtendSelector | |||||
/** | /** | ||||
* The enumerated type for algorithm. | * The enumerated type for algorithm. | ||||
* The values are "hashValue", "digest" and "checksum". | |||||
* The values are "hashValue", "digest", "checksum" and "lastmodified". | |||||
*/ | */ | ||||
public static class AlgorithmName extends EnumeratedAttribute { | public static class AlgorithmName extends EnumeratedAttribute { | ||||
/** | /** | ||||
@@ -936,7 +938,7 @@ public class ModifiedSelector extends BaseExtendSelector | |||||
* @see EnumeratedAttribute#getValues() | * @see EnumeratedAttribute#getValues() | ||||
*/ | */ | ||||
public String[] getValues() { | public String[] getValues() { | ||||
return new String[] {"hashvalue", "digest", "checksum"}; | |||||
return new String[] {"hashvalue", "digest", "checksum", "lastmodified"}; | |||||
} | } | ||||
} | } | ||||