You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/04/03 14:34:25 UTC
svn commit: r644284 - in /ant/ivy/core/trunk: CHANGES.txt
src/java/org/apache/ivy/core/settings/XmlSettingsParser.java
test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java
test/java/org/apache/ivy/core/settings/ivysettings-macro.xml
Author: xavier
Date: Thu Apr 3 05:34:23 2008
New Revision: 644284
URL: http://svn.apache.org/viewvc?rev=644284&view=rev
Log:
FIX: ivy properties defined in an include file not available in the file that includes it (IVY-780)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/XmlSettingsParser.java
ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java
ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/ivysettings-macro.xml
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=644284&r1=644283&r2=644284&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Thu Apr 3 05:34:23 2008
@@ -76,6 +76,7 @@
- IMPROVEMENT: Change allownomd and skipbuildwithoutivy into a more semantically correct name (IVY-297)
- IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher
+- FIX: ivy properties defined in an include file not available in the file that includes it (IVY-780)
- FIX: SFTPRepository.list(String) hides exceptions (IVY-751)
- FIX: Wrong error message for republishing a module (IVY-752)
- FIX: resolve fails to put metadata in cache (IVY-779)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/XmlSettingsParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/XmlSettingsParser.java?rev=644284&r1=644283&r2=644284&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/XmlSettingsParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/XmlSettingsParser.java Thu Apr 3 05:34:23 2008
@@ -24,6 +24,7 @@
import java.net.URL;
import java.text.ParseException;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -50,6 +51,50 @@
/**
*/
public class XmlSettingsParser extends DefaultHandler {
+ /**
+ * Wraps an {@link IvyVariableContainer} delegating most method calls to the wrapped instance,
+ * except for a set of variables which are only stored locally in the wrapper, and not
+ * propagated to the wrapped instance.
+ */
+ private static final class IvyVariableContainerWrapper implements IvyVariableContainer {
+ private static final Collection SETTINGS_VARIABLES = Arrays.asList(new String[] {
+ "ivy.settings.dir", "ivy.settings.url", "ivy.settings.file",
+ "ivy.conf.dir", "ivy.conf.url", "ivy.conf.file"});
+
+ private final IvyVariableContainer variables;
+
+ private Map localVariables = new HashMap();
+
+ private IvyVariableContainerWrapper(IvyVariableContainer variables) {
+ this.variables = variables;
+ }
+
+ public void setVariable(String varName, String value, boolean overwrite) {
+ if (SETTINGS_VARIABLES.contains(varName)) {
+ if (!localVariables.containsKey(varName) || overwrite) {
+ localVariables.put(varName, value);
+ }
+ } else {
+ variables.setVariable(varName, value, overwrite);
+ }
+ }
+
+ public void setEnvironmentPrefix(String prefix) {
+ variables.setEnvironmentPrefix(prefix);
+ }
+
+ public String getVariable(String name) {
+ if (localVariables.containsKey(name)) {
+ return (String) localVariables.get(name);
+ }
+ return variables.getVariable(name);
+ }
+
+ public Object clone() {
+ throw new UnsupportedOperationException();
+ }
+ }
+
private Configurator configurator;
private List configuratorTags = Arrays.asList(new String[] {"resolvers", "namespaces",
@@ -307,8 +352,8 @@
}
private void includeStarted(Map attributes) throws IOException, ParseException {
- IvyVariableContainer variables = (IvyVariableContainer) ivy.getVariableContainer()
- .clone();
+ final IvyVariableContainer variables = (IvyVariableContainer) ivy.getVariableContainer();
+ ivy.setVariableContainer(new IvyVariableContainerWrapper(variables));
try {
String propFilePath = (String) attributes.get("file");
URL settingsURL = null;
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java?rev=644284&r1=644283&r2=644284&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/XmlSettingsParserTest.java Thu Apr 3 05:34:23 2008
@@ -399,6 +399,9 @@
assertEquals(1, ivyPatterns.size());
assertEquals("included/myrep/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]",
ivyPatterns.get(0));
+
+ // properties defined in included file should be available to including file (IVY-780)
+ assertEquals("myvalue", settings.getVariable("ivy.test.prop"));
}
public void testParser() throws Exception {
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/ivysettings-macro.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/ivysettings-macro.xml?rev=644284&r1=644283&r2=644284&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/ivysettings-macro.xml (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/settings/ivysettings-macro.xml Thu Apr 3 05:34:23 2008
@@ -17,6 +17,7 @@
under the License.
-->
<ivysettings>
+ <property name="ivy.test.prop" value="myvalue" />
<macrodef name="mymacro">
<attribute name="mymainrep"/>
<attribute name="mysecondrep"/>