git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@904213 13f79535-47bb-0310-9956-ffa450edef68master
@@ -31,7 +31,7 @@ Fixed bugs: | |||
Other changes: | |||
-------------- | |||
Changes from Ant 1.7.1 TO Ant 1.8.0RC1 | |||
Changes from Ant 1.7.1 TO Ant 1.8.0RCx | |||
====================================== | |||
Changes that could break older environments: | |||
@@ -221,6 +221,9 @@ Changes that could break older environments: | |||
file. So Ant is now capable of supporting several ProjectHelper | |||
implementations, deciding on which to use depending of the input build file. | |||
* Mapper-aware selectors (depends, different, present) now accept typedef'd | |||
FileNameMappers. | |||
Fixed bugs: | |||
----------- | |||
@@ -66,16 +66,29 @@ public abstract class MappingSelector extends BaseSelector { | |||
/** | |||
* Defines the FileNameMapper to use (nested mapper element). | |||
* @return a mapper to be configured | |||
* @throws BuildException if more that one mapper defined | |||
* @throws BuildException if more than one mapper defined | |||
*/ | |||
public Mapper createMapper() throws BuildException { | |||
if (mapperElement != null) { | |||
if (map != null || mapperElement != null) { | |||
throw new BuildException("Cannot define more than one mapper"); | |||
} | |||
mapperElement = new Mapper(getProject()); | |||
return mapperElement; | |||
} | |||
/** | |||
* Add a configured FileNameMapper instance. | |||
* @param fileNameMapper the FileNameMapper to add | |||
* @throws BuildException if more than one mapper defined | |||
* @since Ant 1.8.0 | |||
*/ | |||
public void addConfigured(FileNameMapper fileNameMapper) { | |||
if (map != null || mapperElement != null) { | |||
throw new BuildException("Cannot define more than one mapper"); | |||
} | |||
this.map = fileNameMapper; | |||
} | |||
/** | |||
* Checks to make sure all settings are kosher. In this case, it | |||
* means that the dest attribute has been set and we have a mapper. | |||
@@ -84,13 +97,15 @@ public abstract class MappingSelector extends BaseSelector { | |||
if (targetdir == null) { | |||
setError("The targetdir attribute is required."); | |||
} | |||
if (mapperElement == null) { | |||
map = new IdentityMapper(); | |||
} else { | |||
map = mapperElement.getImplementation(); | |||
} | |||
if (map == null) { | |||
setError("Could not set <mapper> element."); | |||
if (mapperElement == null) { | |||
map = new IdentityMapper(); | |||
} else { | |||
map = mapperElement.getImplementation(); | |||
if (map == null) { | |||
setError("Could not set <mapper> element."); | |||
} | |||
} | |||
} | |||
} | |||
@@ -121,7 +136,7 @@ public abstract class MappingSelector extends BaseSelector { | |||
+ targetdir.getName() + " with filename " + filename); | |||
} | |||
String destname = destfiles[0]; | |||
File destfile = new File(targetdir, destname); | |||
File destfile = FILE_UTILS.resolveFile(targetdir, destname); | |||
boolean selected = selectionTest(file, destfile); | |||
return selected; | |||
@@ -24,6 +24,7 @@ import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
import org.apache.tools.ant.types.Mapper; | |||
import org.apache.tools.ant.util.FileNameMapper; | |||
import org.apache.tools.ant.util.FileUtils; | |||
import org.apache.tools.ant.util.IdentityMapper; | |||
/** | |||
@@ -35,7 +36,6 @@ import org.apache.tools.ant.util.IdentityMapper; | |||
* @since 1.5 | |||
*/ | |||
public class PresentSelector extends BaseSelector { | |||
private File targetdir = null; | |||
private Mapper mapperElement = null; | |||
private FileNameMapper map = null; | |||
@@ -86,17 +86,29 @@ public class PresentSelector extends BaseSelector { | |||
/** | |||
* Defines the FileNameMapper to use (nested mapper element). | |||
* @return a mapper to be configured | |||
* @throws BuildException if more that one mapper defined | |||
* @throws BuildException if more than one mapper defined | |||
*/ | |||
public Mapper createMapper() throws BuildException { | |||
if (mapperElement != null) { | |||
if (map != null || mapperElement != null) { | |||
throw new BuildException("Cannot define more than one mapper"); | |||
} | |||
mapperElement = new Mapper(getProject()); | |||
return mapperElement; | |||
} | |||
/** | |||
* Add a configured FileNameMapper instance. | |||
* @param fileNameMapper the FileNameMapper to add | |||
* @throws BuildException if more than one mapper defined | |||
* @since Ant 1.8.0 | |||
*/ | |||
public void addConfigured(FileNameMapper fileNameMapper) { | |||
if (map != null || mapperElement != null) { | |||
throw new BuildException("Cannot define more than one mapper"); | |||
} | |||
this.map = fileNameMapper; | |||
} | |||
/** | |||
* This sets whether to select a file if its dest file is present. | |||
* It could be a <code>negate</code> boolean, but by doing things | |||
@@ -123,13 +135,15 @@ public class PresentSelector extends BaseSelector { | |||
if (targetdir == null) { | |||
setError("The targetdir attribute is required."); | |||
} | |||
if (mapperElement == null) { | |||
map = new IdentityMapper(); | |||
} else { | |||
map = mapperElement.getImplementation(); | |||
} | |||
if (map == null) { | |||
setError("Could not set <mapper> element."); | |||
if (mapperElement == null) { | |||
map = new IdentityMapper(); | |||
} else { | |||
map = mapperElement.getImplementation(); | |||
if (map == null) { | |||
setError("Could not set <mapper> element."); | |||
} | |||
} | |||
} | |||
} | |||
@@ -160,7 +174,7 @@ public class PresentSelector extends BaseSelector { | |||
+ targetdir + " with filename " + filename); | |||
} | |||
String destname = destfiles[0]; | |||
File destfile = new File(targetdir, destname); | |||
File destfile = FileUtils.getFileUtils().resolveFile(targetdir, destname); | |||
return destfile.exists() == destmustexist; | |||
} | |||
@@ -173,9 +187,8 @@ public class PresentSelector extends BaseSelector { | |||
* @return the values as an array of strings | |||
*/ | |||
public String[] getValues() { | |||
return new String[]{"srconly", "both"}; | |||
return new String[] { "srconly", "both" }; | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,45 @@ | |||
<?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="output.dir" location="output" /> | |||
<property name="foo.file" location="${output.dir}/foo" /> | |||
<target name="setUp"> | |||
<touch file="${foo.file}" mkdirs="true" /> | |||
</target> | |||
<target name="tearDown"> | |||
<delete dir="${output.dir}" /> | |||
</target> | |||
<target name="testMapperByTypedef" depends="setUp"> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<fileset file="${foo.file}"> | |||
<depend targetdir="${basedir}"><!-- dummy targetdir --> | |||
<mergemapper to="${ant.file}" /> | |||
</depend> | |||
</fileset> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
</project> |
@@ -0,0 +1,46 @@ | |||
<?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="output.dir" location="output" /> | |||
<property name="foo.file" location="${output.dir}/foo" /> | |||
<target name="setUp"> | |||
<mkdir dir="${output.dir}"/> | |||
<echo file="${foo.file}">foo</echo> | |||
</target> | |||
<target name="tearDown"> | |||
<delete dir="${output.dir}" /> | |||
</target> | |||
<target name="testMapperByTypedef" depends="setUp"> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<fileset file="${foo.file}"> | |||
<different targetdir="${basedir}"><!-- dummy targetdir --> | |||
<mergemapper to="${ant.file}" /> | |||
</different> | |||
</fileset> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
</project> |
@@ -0,0 +1,45 @@ | |||
<?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="output.dir" location="output" /> | |||
<property name="foo.file" location="${output.dir}/foo" /> | |||
<target name="setUp"> | |||
<touch file="${foo.file}" mkdirs="true" /> | |||
</target> | |||
<target name="tearDown"> | |||
<delete dir="${output.dir}" /> | |||
</target> | |||
<target name="testMapperByTypedef" depends="setUp"> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<fileset file="${foo.file}"> | |||
<present targetdir="${basedir}"><!-- dummy targetdir --> | |||
<mergemapper to="${ant.file}" /> | |||
</present> | |||
</fileset> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
</project> |