| @@ -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.10.4 TO Ant 1.10.5 | Changes from Ant 1.10.4 TO Ant 1.10.5 | ||||
| ===================================== | ===================================== | ||||
| @@ -62,7 +64,7 @@ Fixed bugs: | |||||
| * <cab> died with a NullPointerException since Ant 1.10.2. | * <cab> died with a NullPointerException since Ant 1.10.2. | ||||
| Bugzilla Report 62335 | Bugzilla Report 62335 | ||||
| * The <depend> task would fail with | |||||
| * The <depend> task would fail with | |||||
| "java.lang.ClassFormatError: Invalid Constant Pool entry Type 19" while | "java.lang.ClassFormatError: Invalid Constant Pool entry Type 19" while | ||||
| parsing a module-info.class. The task is compatible with | parsing a module-info.class. The task is compatible with | ||||
| Java bytecode version 53 now. | Java bytecode version 53 now. | ||||
| @@ -633,6 +633,7 @@ | |||||
| <li><q>hashvalue</q>—HashvalueAlgorithm</li> | <li><q>hashvalue</q>—HashvalueAlgorithm</li> | ||||
| <li><q>digest</q>—DigestAlgorithm</li> | <li><q>digest</q>—DigestAlgorithm</li> | ||||
| <li><q>checksum</q>—ChecksumAlgorithm</li> | <li><q>checksum</q>—ChecksumAlgorithm</li> | ||||
| <li><q>lastmodified</q>—LastModifiedAlgorithm</li> | |||||
| </ul> | </ul> | ||||
| </td> | </td> | ||||
| <td>No; defaults to <q>digest</q></td> | <td>No; defaults to <q>digest</q></td> | ||||
| @@ -747,6 +748,10 @@ | |||||
| </ul> | </ul> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td>lastmodified</td> | |||||
| <td>Uses the lastModified property of a file. No additional configuration is required.</td> | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h6>cache</h6> | <h6>cache</h6> | ||||
| <p>Same as <var>cache</var> attribute, with the following additional values:</p> | <p>Same as <var>cache</var> attribute, with the following additional values:</p> | ||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| @@ -325,6 +325,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 if (algorithmClass != null) { | } else if (algorithmClass != null) { | ||||
| // use Algorithm specified by classname | // use Algorithm specified by classname | ||||
| @@ -913,7 +915,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 { | ||||
| /** | /** | ||||
| @@ -922,7 +924,7 @@ public class ModifiedSelector extends BaseExtendSelector | |||||
| */ | */ | ||||
| @Override | @Override | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {"hashvalue", "digest", "checksum"}; | |||||
| return new String[] {"hashvalue", "digest", "checksum", "lastmodified"}; | |||||
| } | } | ||||
| } | } | ||||