You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ma...@apache.org on 2008/03/28 23:10:59 UTC
svn commit: r642405 - in /ant/ivy/core/trunk: CHANGES.txt
src/java/org/apache/ivy/ant/IvyBuildList.java test/buildlist/E2/
test/buildlist/E2/build.xml test/buildlist/E2/ivy.xml
test/java/org/apache/ivy/ant/IvyBuildListTest.java
Author: maartenc
Date: Fri Mar 28 15:10:53 2008
New Revision: 642405
URL: http://svn.apache.org/viewvc?rev=642405&view=rev
Log:
FIX: buildlist evicts modules with the same name, but different organisation (IVY-731)
Added:
ant/ivy/core/trunk/test/buildlist/E2/
ant/ivy/core/trunk/test/buildlist/E2/build.xml
ant/ivy/core/trunk/test/buildlist/E2/ivy.xml
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java
ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyBuildListTest.java
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=642405&r1=642404&r2=642405&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Fri Mar 28 15:10:53 2008
@@ -75,6 +75,7 @@
- IMPROVEMENT: Parse description and home page from poms (IVY-767)
- IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher
+- FIX: buildlist evicts modules with the same name, but different organisation (IVY-731)
- FIX: Out of memory/Stack overflow for new highly coupled project (IVY-595)
- FIX: Compatibility with maven's dependencyMangement (IVY-753) (not completed yet)
- FIX: ivy:settings fails when override is not set to 'true' (IVY-771)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java?rev=642405&r1=642404&r2=642405&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java Fri Mar 28 15:10:53 2008
@@ -22,8 +22,8 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.ListIterator;
@@ -153,8 +153,8 @@
Path path = new Path(getProject());
Map buildFiles = new HashMap(); // Map (ModuleDescriptor -> File buildFile)
- Map mdsMap = new LinkedHashMap(); // Map (String moduleName -> ModuleDescriptor)
List independent = new ArrayList();
+ Collection mds = new ArrayList();
Set rootModuleNames = new LinkedHashSet();
if (!"*".equals(root)) {
@@ -202,7 +202,7 @@
ModuleDescriptor md = ModuleDescriptorParserRegistry.getInstance()
.parseDescriptor(settings, ivyFile.toURL(), doValidate(settings));
buildFiles.put(md, buildFile);
- mdsMap.put(md.getModuleRevisionId().getModuleId().getName(), md);
+ mds.add(md);
Message.debug("Add " + md.getModuleRevisionId().getModuleId());
} catch (Exception ex) {
if (haltOnError) {
@@ -220,13 +220,12 @@
}
List leafModuleDescriptors =
- convertModuleNamesToModuleDescriptors(mdsMap, leafModuleNames, "leaf");
+ convertModuleNamesToModuleDescriptors(mds, leafModuleNames, "leaf");
List rootModuleDescriptors =
- convertModuleNamesToModuleDescriptors(mdsMap, rootModuleNames, "root");
+ convertModuleNamesToModuleDescriptors(mds, rootModuleNames, "root");
List restartFromModuleDescriptors =
- convertModuleNamesToModuleDescriptors(mdsMap, restartFromModuleNames, "restartFrom");
+ convertModuleNamesToModuleDescriptors(mds, restartFromModuleNames, "restartFrom");
- Collection mds = new ArrayList(mdsMap.values());
if (!rootModuleDescriptors.isEmpty()) {
Message.info("Filtering modules based on roots " + rootModuleNames);
mds = filterModulesFromRoot(mds, rootModuleDescriptors);
@@ -248,7 +247,7 @@
Collections.reverse(sortedModules);
}
// Remove modules that are before the restartFrom point
- // Independant modules (without valid ivy file) can not be addressed
+ // Independent modules (without valid ivy file) can not be addressed
// so they are not removed from build path.
if (!restartFromModuleDescriptors.isEmpty()) {
boolean foundRestartFrom = false;
@@ -280,19 +279,37 @@
getProject().addReference(getReference(), path);
getProject().setProperty("ivy.sorted.modules", order.toString());
}
+
+ private List convertModuleNamesToModuleDescriptors(Collection mds, Set moduleNames, String kind) {
+ List result = new ArrayList();
+ Set foundModuleNames = new HashSet();
+
+ for (Iterator it = mds.iterator(); it.hasNext(); ) {
+ ModuleDescriptor md = (ModuleDescriptor) it.next();
+ String name = md.getModuleRevisionId().getModuleId().getName();
+ if (moduleNames.contains(name)) {
+ foundModuleNames.add(name);
+ result.add(md);
+ }
+ }
- private List convertModuleNamesToModuleDescriptors(Map mdsMap, Set moduleNames, String kind) {
- List mds = new ArrayList();
- for (Iterator iter = moduleNames.iterator(); iter.hasNext();) {
- String name = (String) iter.next();
- ModuleDescriptor md = (ModuleDescriptor) mdsMap.get(name);
- if (md == null) {
- throw new BuildException("unable to find " + kind + " module " + name
- + " in build fileset");
+ if (foundModuleNames.size() < moduleNames.size()) {
+ Set missingModules = new HashSet(moduleNames);
+ missingModules.removeAll(foundModuleNames);
+
+ StringBuffer missingNames = new StringBuffer();
+ String sep = "";
+ for (Iterator it = missingModules.iterator(); it.hasNext(); ) {
+ missingNames.append(sep);
+ missingNames.append(it.next());
+ sep = ", ";
}
- mds.add(md);
+
+ throw new BuildException("unable to find " + kind + " module(s) " + missingNames.toString()
+ + " in build fileset");
}
- return mds;
+
+ return result;
}
/**
Added: ant/ivy/core/trunk/test/buildlist/E2/build.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/buildlist/E2/build.xml?rev=642405&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/buildlist/E2/build.xml (added)
+++ ant/ivy/core/trunk/test/buildlist/E2/build.xml Fri Mar 28 15:10:53 2008
@@ -0,0 +1,18 @@
+<!--
+ 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.
+-->
Added: ant/ivy/core/trunk/test/buildlist/E2/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/buildlist/E2/ivy.xml?rev=642405&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/buildlist/E2/ivy.xml (added)
+++ ant/ivy/core/trunk/test/buildlist/E2/ivy.xml Fri Mar 28 15:10:53 2008
@@ -0,0 +1,21 @@
+<!--
+ 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.
+-->
+<ivy-module version="1.2">
+ <info organisation="apache2" module="E"/>
+</ivy-module>
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyBuildListTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyBuildListTest.java?rev=642405&r1=642404&r2=642405&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyBuildListTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyBuildListTest.java Fri Mar 28 15:10:53 2008
@@ -40,7 +40,7 @@
*/
//CheckStyle:MagicNumber| OFF
- //The test very often use MagicNumber. Using a constant is less expessif.
+ //The test very often use MagicNumber. Using a constant is less expressive.
public void testSimple() {
@@ -52,7 +52,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
- fs.setExcludes("F/build.xml,G/build.xml");
+ fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -91,7 +91,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
- fs.setExcludes("F/build.xml,G/build.xml");
+ fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml");
buildlist.addFileset(fs);
buildlist.setReference("reverse.ordered.build.files");
@@ -131,6 +131,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -188,6 +189,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -224,6 +226,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -255,6 +258,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -287,6 +291,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -349,6 +354,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -387,6 +393,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -420,6 +427,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
+ fs.setExcludes("E2/**");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -452,7 +460,7 @@
FileSet fs = new FileSet();
fs.setDir(new File("test/buildlist"));
fs.setIncludes("**/build.xml");
- fs.setExcludes("F/build.xml,G/build.xml");
+ fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml");
buildlist.addFileset(fs);
buildlist.setReference("ordered.build.files");
@@ -479,7 +487,45 @@
.getAbsolutePath());
}
+ public void testWithModuleWithSameNameAndDifferentOrg() {
+ Project p = new Project();
+
+ IvyBuildList buildlist = new IvyBuildList();
+ buildlist.setProject(p);
+ FileSet fs = new FileSet();
+ fs.setDir(new File("test/buildlist"));
+ fs.setIncludes("**/build.xml");
+ fs.setExcludes("F/build.xml,G/build.xml");
+ buildlist.addFileset(fs);
+
+ buildlist.setReference("ordered.build.files");
+
+ buildlist.execute();
+
+ Object o = p.getReference("ordered.build.files");
+ assertNotNull(o);
+ assertTrue(o instanceof Path);
+
+ Path path = (Path) o;
+ String[] files = path.list();
+ assertNotNull(files);
+
+ assertEquals(6, files.length);
+
+ assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0])
+ .getAbsolutePath());
+ assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1])
+ .getAbsolutePath());
+ assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2])
+ .getAbsolutePath());
+ assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[3])
+ .getAbsolutePath());
+ assertEquals(new File("test/buildlist/E2/build.xml").getAbsolutePath(), new File(files[4])
+ .getAbsolutePath());
+ assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[5])
+ .getAbsolutePath());
+ }
}
//CheckStyle:MagicNumber| ON