git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@816591 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -976,6 +976,10 @@ Other changes: | |||
| * <property location="from" basedir="to" relative="true"/> can now | |||
| calculate relative paths. | |||
| * The <name> selector supports a new handleDirSep attribute that | |||
| makes it ignore differences between / and \ separators. | |||
| Bugzilla Report 47858. | |||
| Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
| ============================================= | |||
| @@ -545,6 +545,16 @@ platforms. | |||
| <td valign="top">Whether name comparisons are case-sensitive</td> | |||
| <td align="center" valign="top">No, default <i>true</i></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">handledirsep</td> | |||
| <td valign="top"> | |||
| If this is specified, the mapper will treat a \ character in a | |||
| resource name or name attribute as a / for the purposes of | |||
| matching. This attribute can be true or false, the default is | |||
| false. | |||
| <em>Since Ant 1.8.0.</em> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| </table> | |||
| <h4><a name="rsel.exists">exists</a></h4> | |||
| @@ -31,6 +31,7 @@ public class Name implements ResourceSelector { | |||
| private String regex = null; | |||
| private String pattern; | |||
| private boolean cs = true; | |||
| private boolean handleDirSep = false; | |||
| // caches for performance reasons | |||
| private RegularExpression reg; | |||
| @@ -61,6 +62,7 @@ public class Name implements ResourceSelector { | |||
| /** | |||
| * Set the regular expression to compare names against. | |||
| * @param r the regex to set. | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public void setRegex(String r) { | |||
| regex = r; | |||
| @@ -70,6 +72,7 @@ public class Name implements ResourceSelector { | |||
| /** | |||
| * Get the regular expression used by this Name ResourceSelector. | |||
| * @return the String selection pattern. | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public String getRegex() { | |||
| return regex; | |||
| @@ -91,6 +94,26 @@ public class Name implements ResourceSelector { | |||
| return cs; | |||
| } | |||
| /** | |||
| * Attribute specifing whether to ignore the difference | |||
| * between / and \ (the two common directory characters). | |||
| * @param handleDirSep a boolean, default is false. | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public void setHandleDirSep(boolean handleDirSep) { | |||
| this.handleDirSep = handleDirSep; | |||
| } | |||
| /** | |||
| * Whether the difference between / and \ (the two common | |||
| * directory characters) is ignored. | |||
| * | |||
| * @since Ant 1.8.0 | |||
| */ | |||
| public boolean doesHandledirSep() { | |||
| return handleDirSep; | |||
| } | |||
| /** | |||
| * Return true if this Resource is selected. | |||
| * @param r the Resource to check. | |||
| @@ -107,7 +130,7 @@ public class Name implements ResourceSelector { | |||
| private boolean matches(String name) { | |||
| if (pattern != null) { | |||
| return SelectorUtils.match(pattern, name, cs); | |||
| return SelectorUtils.match(modify(pattern), modify(name), cs); | |||
| } else { | |||
| if (reg == null) { | |||
| reg = new RegularExpression(); | |||
| @@ -118,7 +141,14 @@ public class Name implements ResourceSelector { | |||
| if (!cs) { | |||
| options |= Regexp.MATCH_CASE_INSENSITIVE; | |||
| } | |||
| return expression.matches(name, options); | |||
| return expression.matches(modify(name), options); | |||
| } | |||
| } | |||
| private String modify(String s) { | |||
| if (s == null || !handleDirSep || s.indexOf("\\") == -1) { | |||
| return s; | |||
| } | |||
| return s.replace('\\', '/'); | |||
| } | |||
| } | |||
| @@ -15,8 +15,7 @@ | |||
| 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"> | |||
| <project xmlns:au="antlib:org.apache.ant.antunit" default="antunit"> | |||
| <import file="../../../antunit-base.xml" /> | |||
| @@ -32,7 +31,7 @@ | |||
| <resourcecount when="equal" count="1"> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <rsel:name name="*"/> | |||
| <name name="*"/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| @@ -40,7 +39,7 @@ | |||
| <resourcecount when="equal" count="0"> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <rsel:name name=".*"/> | |||
| <name name=".*"/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| @@ -51,9 +50,41 @@ | |||
| <resourcecount when="equal" count="1"> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <rsel:name regex=".*"/> | |||
| <name regex=".*"/> | |||
| </restrict> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="testHandledirSep" depends="createTestdir"> | |||
| <au:assertTrue> | |||
| <!-- only one should match the current platform --> | |||
| <resourcecount when="equal" count="1"> | |||
| <resources> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <name name="**/${file}"/> | |||
| </restrict> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <name name="**\${file}"/> | |||
| </restrict> | |||
| </resources> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| <au:assertTrue> | |||
| <resourcecount when="equal" count="2"> | |||
| <resources> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <name name="**/${file}" handleDirSep="true"/> | |||
| </restrict> | |||
| <restrict> | |||
| <fileset dir="${output}"/> | |||
| <name name="**\${file}" handleDirSep="true"/> | |||
| </restrict> | |||
| </resources> | |||
| </resourcecount> | |||
| </au:assertTrue> | |||
| </target> | |||
| </project> | |||