git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@685593 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -252,6 +252,11 @@ Other changes: | |||
| not an archive earlier if the file is big. | |||
| Bugzilla Report 45463. | |||
| * New file and resource selectors <readable/> and <writable/> have | |||
| been added that select file which the current process can read or | |||
| write. | |||
| Bugzilla Report 45081. | |||
| Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
| ============================================= | |||
| @@ -487,6 +487,10 @@ platforms. | |||
| resources whose contents match a particular regular expression.</li> | |||
| <li><a href="#rsel.compare">compare</a> - select resources | |||
| based on comparison to other resources.</li> | |||
| <li><a href="selectors.html#readable">readable</a> - | |||
| Select files (resources must be files) if they are readable.</li> | |||
| <li><a href="selectors.html#writable">writable</a> - | |||
| Select files (resources must be files) if they are writable.</li> | |||
| </ul> | |||
| <h4><a name="rsel.name">name</a></h4> | |||
| @@ -89,6 +89,10 @@ | |||
| Use a BSF or JSR 223 scripting language to create | |||
| your own selector | |||
| </li> | |||
| <li><a href="#readable"><code><readable></code></a> - | |||
| Select files if they are readable.</li> | |||
| <li><a href="#writable"><code><writable></code></a> - | |||
| Select files if they are writable.</li> | |||
| </ul> | |||
| <a name="containsselect"></a> | |||
| @@ -969,6 +973,24 @@ | |||
| </tr> | |||
| </table> | |||
| <a name="readable"></a> | |||
| <h4>Readable Selector</h4> | |||
| <p>The <code><readable></code> selector selects only files | |||
| that are readable. Ant only invokes | |||
| <code>java.io.File#canRead</code> so if a file is unreadable | |||
| but the Java VM cannot detect this state, this selector will | |||
| still select the file.</p> | |||
| <a name="writable"></a> | |||
| <h4>Writable Selector</h4> | |||
| <p>The <code><writable></code> selector selects only files | |||
| that are writable. Ant only invokes | |||
| <code>java.io.File#canWrite</code> so if a file is unwritable | |||
| but the Java VM cannot detect this state, this selector will | |||
| still select the file.</p> | |||
| <a name="scriptselector"></a> | |||
| <h4>Script Selector</h4> | |||
| @@ -45,6 +45,8 @@ import org.apache.tools.ant.types.selectors.MajoritySelector; | |||
| import org.apache.tools.ant.types.selectors.DifferentSelector; | |||
| import org.apache.tools.ant.types.selectors.SelectorContainer; | |||
| import org.apache.tools.ant.types.selectors.ContainsRegexpSelector; | |||
| import org.apache.tools.ant.types.selectors.ReadableSelector; | |||
| import org.apache.tools.ant.types.selectors.WritableSelector; | |||
| import org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector; | |||
| /** | |||
| @@ -724,6 +726,14 @@ public abstract class AbstractFileSet extends DataType | |||
| appendSelector(selector); | |||
| } | |||
| public void addReadable(ReadableSelector r) { | |||
| appendSelector(r); | |||
| } | |||
| public void addWritable(WritableSelector w) { | |||
| appendSelector(w); | |||
| } | |||
| /** | |||
| * Add an arbitary selector. | |||
| * @param selector the <code>FileSelector</code> to add. | |||
| @@ -276,6 +276,14 @@ public abstract class AbstractSelectorContainer extends DataType | |||
| appendSelector(selector); | |||
| } | |||
| public void addReadable(ReadableSelector r) { | |||
| appendSelector(r); | |||
| } | |||
| public void addWritable(WritableSelector w) { | |||
| appendSelector(w); | |||
| } | |||
| /** | |||
| * add an arbitary selector | |||
| * @param selector the selector to add | |||
| @@ -301,6 +301,14 @@ public abstract class BaseSelectorContainer extends BaseSelector | |||
| appendSelector(selector); | |||
| } | |||
| public void addReadable(ReadableSelector r) { | |||
| appendSelector(r); | |||
| } | |||
| public void addWritable(WritableSelector w) { | |||
| appendSelector(w); | |||
| } | |||
| /** | |||
| * add an arbitary selector | |||
| * @param selector the selector to add | |||
| @@ -0,0 +1,47 @@ | |||
| /* | |||
| * 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; | |||
| import java.io.File; | |||
| import org.apache.tools.ant.types.Resource; | |||
| import org.apache.tools.ant.types.resources.FileProvider; | |||
| import org.apache.tools.ant.types.resources.selectors.ResourceSelector; | |||
| /** | |||
| * A selector that selects readable files. | |||
| * | |||
| * <p>Readable is definied in terms of java.io.File#canRead, this | |||
| * means the selector will accept any file that exists and is readable | |||
| * by the application.</p> | |||
| * | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public class ReadableSelector implements FileSelector, ResourceSelector { | |||
| public boolean isSelected(File basedir, String filename, File file) { | |||
| return file != null && file.canRead(); | |||
| } | |||
| public boolean isSelected(Resource r) { | |||
| if (r instanceof FileProvider) { | |||
| return isSelected(null, null, ((FileProvider) r).getFile()); | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| /* | |||
| * 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; | |||
| import java.io.File; | |||
| import org.apache.tools.ant.types.Resource; | |||
| import org.apache.tools.ant.types.resources.FileProvider; | |||
| import org.apache.tools.ant.types.resources.selectors.ResourceSelector; | |||
| /** | |||
| * A selector that selects writable files. | |||
| * | |||
| * <p>Writable is definied in terms of java.io.File#canWrite, this | |||
| * means the selector will accept any file that exists and is | |||
| * writable by the application.</p> | |||
| * | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public class WritableSelector implements FileSelector, ResourceSelector { | |||
| public boolean isSelected(File basedir, String filename, File file) { | |||
| return file != null && file.canWrite(); | |||
| } | |||
| public boolean isSelected(Resource r) { | |||
| if (r instanceof FileProvider) { | |||
| return isSelected(null, null, ((FileProvider) r).getFile()); | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| @@ -42,8 +42,12 @@ | |||
| classname="org.apache.tools.ant.types.resources.selectors.Not" /> | |||
| <typedef name="or" | |||
| classname="org.apache.tools.ant.types.resources.selectors.Or" /> | |||
| <typedef name="readable" | |||
| classname="org.apache.tools.ant.types.selectors.ReadableSelector" /> | |||
| <typedef name="size" | |||
| classname="org.apache.tools.ant.types.resources.selectors.Size" /> | |||
| <typedef name="type" | |||
| classname="org.apache.tools.ant.types.resources.selectors.Type" /> | |||
| <typedef name="writable" | |||
| classname="org.apache.tools.ant.types.selectors.WritableSelector" /> | |||
| </antlib> | |||
| @@ -0,0 +1,110 @@ | |||
| <?xml version="1.0"?> | |||
| <!-- | |||
| 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. | |||
| --> | |||
| <project xmlns:au="antlib:org.apache.ant.antunit" default="antunit" | |||
| xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"> | |||
| <import file="../../../antunit-base.xml" /> | |||
| <property name="dir" location="testdir"/> | |||
| <property name="file" value="testfile"/> | |||
| <condition property="unix"> | |||
| <os family="unix"/> | |||
| </condition> | |||
| <target name="createTestdir"> | |||
| <mkdir dir="${dir}"/> | |||
| <touch file="${dir}/${file}"/> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${dir}"/> | |||
| </target> | |||
| <target name="testReadable" depends="createTestdir"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="1"> | |||
| <restrict> | |||
| <fileset dir="${dir}"/> | |||
| <rsel:readable/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <restrict> | |||
| <fileset dir="${dir}" excludes="${file}"/> | |||
| <rsel:readable/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="testWritable" depends="createTestdir"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="1"> | |||
| <restrict> | |||
| <fileset dir="${dir}"/> | |||
| <rsel:writable/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <restrict> | |||
| <fileset dir="${dir}" excludes="${file}"/> | |||
| <rsel:writable/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="makeFileUnwritable" | |||
| depends="createTestdir,makeFileUnwritable-Unix,makeFileUnwritable-Windows"/> | |||
| <target name="makeFileUnwritable-Unix" id="unix"> | |||
| <chmod file="${dir}/${file}" perm="444"/> | |||
| </target> | |||
| <target name="makeFileUnwritable-Windows" unless="unix"> | |||
| <attrib file="${dir}/${file}" readonly="true"/> | |||
| </target> | |||
| <target name="testUnwritable" depends="makeFileUnwritable"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <restrict> | |||
| <fileset dir="${dir}"/> | |||
| <rsel:writable/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="testAsConditions" depends="makeFileUnwritable"> | |||
| <au:assertTrue> | |||
| <isfileselected file="${dir}/${file}"> | |||
| <rsel:readable/> | |||
| </isfileselected> | |||
| </au:assertTrue> | |||
| <au:assertFalse> | |||
| <isfileselected file="${dir}/${file}"> | |||
| <rsel:writable/> | |||
| </isfileselected> | |||
| </au:assertFalse> | |||
| </target> | |||
| </project> | |||
| @@ -0,0 +1,104 @@ | |||
| <?xml version="1.0"?> | |||
| <!-- | |||
| 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. | |||
| --> | |||
| <project xmlns:au="antlib:org.apache.ant.antunit" default="antunit"> | |||
| <import file="../../antunit-base.xml" /> | |||
| <property name="dir" location="testdir"/> | |||
| <property name="file" value="testfile"/> | |||
| <condition property="unix"> | |||
| <os family="unix"/> | |||
| </condition> | |||
| <target name="createTestdir"> | |||
| <mkdir dir="${dir}"/> | |||
| <touch file="${dir}/${file}"/> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${dir}"/> | |||
| </target> | |||
| <target name="testReadable" depends="createTestdir"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="1"> | |||
| <fileset dir="${dir}"> | |||
| <readable/> | |||
| </fileset> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <fileset dir="${dir}" excludes="${file}"> | |||
| <readable/> | |||
| </fileset> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="testWritable" depends="createTestdir"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="1"> | |||
| <fileset dir="${dir}"> | |||
| <writable/> | |||
| </fileset> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <fileset dir="${dir}" excludes="${file}"> | |||
| <writable/> | |||
| </fileset> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="makeFileUnwritable" | |||
| depends="createTestdir,makeFileUnwritable-Unix,makeFileUnwritable-Windows"/> | |||
| <target name="makeFileUnwritable-Unix" id="unix"> | |||
| <chmod file="${dir}/${file}" perm="444"/> | |||
| </target> | |||
| <target name="makeFileUnwritable-Windows" unless="unix"> | |||
| <attrib file="${dir}/${file}" readonly="true"/> | |||
| </target> | |||
| <target name="testUnwritable" depends="makeFileUnwritable"> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="0"> | |||
| <fileset dir="${dir}"> | |||
| <writable/> | |||
| </fileset> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="testAsConditions" depends="makeFileUnwritable"> | |||
| <au:assertTrue> | |||
| <isfileselected file="${dir}/${file}"> | |||
| <readable/> | |||
| </isfileselected> | |||
| </au:assertTrue> | |||
| <au:assertFalse> | |||
| <isfileselected file="${dir}/${file}"> | |||
| <writable/> | |||
| </isfileselected> | |||
| </au:assertFalse> | |||
| </target> | |||
| </project> | |||