Browse Source

make allowNativeBasedir work even when nested, PR 45711. fixes PR 30569 at the same time.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@690251 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 17 years ago
parent
commit
b8a829b11b
5 changed files with 55 additions and 6 deletions
  1. +4
    -0
      WHATSNEW
  2. +9
    -0
      src/main/org/apache/tools/ant/Project.java
  3. +11
    -0
      src/main/org/apache/tools/ant/PropertyHelper.java
  4. +30
    -5
      src/main/org/apache/tools/ant/taskdefs/Ant.java
  5. +1
    -1
      src/tests/antunit/taskdefs/subant-test.xml

+ 4
- 0
WHATSNEW View File

@@ -183,6 +183,10 @@ Fixed bugs:
* ant -v -version would print the version information twice. * ant -v -version would print the version information twice.
Bugzilla Report 45695. Bugzilla Report 45695.


* when nested into builds that have been invoked by <ant> tasks
<subant> might set the wrong basedir on the called projects.
Bugzilla Report 30569.

Other changes: Other changes:
-------------- --------------




+ 9
- 0
src/main/org/apache/tools/ant/Project.java View File

@@ -655,6 +655,15 @@ public class Project implements ResourceFactory {
return PropertyHelper.getPropertyHelper(this).getUserProperties(); return PropertyHelper.getPropertyHelper(this).getUserProperties();
} }


/**
* Return a copy of the inherited property hashtable.
* @return a hashtable containing just the inherited properties.
* @since Ant 1.8.0
*/
public Hashtable getInheritedProperties() {
return PropertyHelper.getPropertyHelper(this).getInheritedProperties();
}

/** /**
* Copy all user properties that have been set on the command * Copy all user properties that have been set on the command
* line or a GUI tool from this instance to the Project instance * line or a GUI tool from this instance to the Project instance


+ 11
- 0
src/main/org/apache/tools/ant/PropertyHelper.java View File

@@ -774,6 +774,17 @@ public class PropertyHelper implements GetProperty {
} }
} }


/**
* Returns a copy of the inherited property hashtable
* @return a hashtable containing just the inherited properties
*/
public Hashtable getInheritedProperties() {
//avoid concurrent modification:
synchronized (inheritedProperties) {
return new Hashtable(inheritedProperties);
}
}

/** /**
* special back door for subclasses, internal access to the hashtables * special back door for subclasses, internal access to the hashtables
* @return the live hashtable of all properties * @return the live hashtable of all properties


+ 30
- 5
src/main/org/apache/tools/ant/taskdefs/Ant.java View File

@@ -215,7 +215,11 @@ public class Ant extends Task {
} }
} }
// set user-defined properties // set user-defined properties
if (allowNativeBasedir) {
addAlmostAll(getProject().getUserProperties(), PropertyType.USER);
} else {
getProject().copyUserProperties(newProject); getProject().copyUserProperties(newProject);
}


if (!inheritAll) { if (!inheritAll) {
// set Ant's built-in properties separately, // set Ant's built-in properties separately,
@@ -224,13 +228,13 @@ public class Ant extends Task {


} else { } else {
// set all properties from calling project // set all properties from calling project
addAlmostAll(getProject().getProperties());
addAlmostAll(getProject().getProperties(), PropertyType.PLAIN);
} }


Enumeration e = propertySets.elements(); Enumeration e = propertySets.elements();
while (e.hasMoreElements()) { while (e.hasMoreElements()) {
PropertySet ps = (PropertySet) e.nextElement(); PropertySet ps = (PropertySet) e.nextElement();
addAlmostAll(ps.getProperties());
addAlmostAll(ps.getProperties(), PropertyType.PLAIN);
} }
} }


@@ -490,7 +494,12 @@ public class Ant extends Task {
p.setProject(newProject); p.setProject(newProject);
p.execute(); p.execute();
} }
if (allowNativeBasedir) {
addAlmostAll(getProject().getInheritedProperties(),
PropertyType.INHERITED);
} else {
getProject().copyInheritedProperties(newProject); getProject().copyInheritedProperties(newProject);
}
} }


/** /**
@@ -601,23 +610,32 @@ public class Ant extends Task {
* well as properties named basedir or ant.file. * well as properties named basedir or ant.file.
* @param props properties <code>Hashtable</code> to copy to the * @param props properties <code>Hashtable</code> to copy to the
* new project. * new project.
* @since Ant 1.6
* @param the type of property to set (a plain Ant property, a
* user property or an inherited property).
* @since Ant 1.8.0
*/ */
private void addAlmostAll(Hashtable props) {
private void addAlmostAll(Hashtable props, PropertyType type) {
Enumeration e = props.keys(); Enumeration e = props.keys();
while (e.hasMoreElements()) { while (e.hasMoreElements()) {
String key = e.nextElement().toString(); String key = e.nextElement().toString();
if (MagicNames.PROJECT_BASEDIR.equals(key) || MagicNames.ANT_FILE.equals(key)) {
if (MagicNames.PROJECT_BASEDIR.equals(key)
|| MagicNames.ANT_FILE.equals(key)) {
// basedir and ant.file get special treatment in execute() // basedir and ant.file get special treatment in execute()
continue; continue;
} }


String value = props.get(key).toString(); String value = props.get(key).toString();
if (type == PropertyType.PLAIN) {
// don't re-set user properties, avoid the warning message // don't re-set user properties, avoid the warning message
if (newProject.getProperty(key) == null) { if (newProject.getProperty(key) == null) {
// no user property // no user property
newProject.setNewProperty(key, value); newProject.setNewProperty(key, value);
} }
} else if (type == PropertyType.USER) {
newProject.setUserProperty(key, value);
} else if (type == PropertyType.INHERITED) {
newProject.setInheritedProperty(key, value);
}
} }
} }


@@ -801,4 +819,11 @@ public class Ant extends Task {
return name; return name;
} }
} }

private static final class PropertyType {
private PropertyType() {}
private static final PropertyType PLAIN = new PropertyType();
private static final PropertyType INHERITED = new PropertyType();
private static final PropertyType USER = new PropertyType();
}
} }

+ 1
- 1
src/tests/antunit/taskdefs/subant-test.xml View File

@@ -54,7 +54,7 @@
<ant antfile="${ant.file}" target="testSubAntDoesntSetBasedir"/> <ant antfile="${ant.file}" target="testSubAntDoesntSetBasedir"/>
</target> </target>


<target name="XtestSubAntDoesntSetBasedirAfterAntWithDir">
<target name="testSubAntDoesntSetBasedirAfterAntWithDir">
<ant antfile="${ant.file}" dir="${basedir}" <ant antfile="${ant.file}" dir="${basedir}"
target="testSubAntDoesntSetBasedir"/> target="testSubAntDoesntSetBasedir"/>
</target> </target>


Loading…
Cancel
Save