Author: xavier
Date: Fri Jan 12 09:32:45 2007
New Revision: 495653

URL: http://svn.apache.org/viewvc?view=rev&rev=495653
Log:
FIX in IVY-340: preserve roots and leaves order

Modified:
    incubator/ivy/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java

Modified: incubator/ivy/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java?view=diff&rev=495653&r1=495652&r2=495653
==============================================================================
--- incubator/ivy/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java (original)
+++ incubator/ivy/trunk/src/java/org/apache/ivy/ant/IvyBuildList.java Fri Jan 
12 09:32:45 2007
@@ -24,6 +24,8 @@
 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;
 import java.util.Map;
@@ -128,10 +130,10 @@
         Path path = new Path(getProject());
 
         Map buildFiles = new HashMap(); // Map (ModuleDescriptor -> File 
buildFile)
-        Collection mds = new ArrayList();
+        Map mdsMap = new LinkedHashMap(); // Map (String moduleName -> 
ModuleDescriptor)
         List independent = new ArrayList();
 
-        Set rootModuleNames = new HashSet();
+        Set rootModuleNames = new LinkedHashSet();
         if (!"*".equals(_root)) {
                StringTokenizer st = new StringTokenizer(_root, _delimiter);
                while (st.hasMoreTokens()) {
@@ -139,7 +141,7 @@
                }
         }
         
-        Set leafModuleNames = new HashSet();
+        Set leafModuleNames = new LinkedHashSet();
         if (! "*".equals(_leaf)) {
                StringTokenizer st = new StringTokenizer(_leaf, _delimiter);
                while (st.hasMoreTokens()) {
@@ -147,10 +149,6 @@
                }
         }
         
-        List leafModuleDescriptors = new ArrayList();
-        List rootModuleDescriptors = new ArrayList();
-
-        
         for (ListIterator iter = _buildFiles.listIterator(); iter.hasNext();) {
             FileSet fs = (FileSet)iter.next();
             DirectoryScanner ds = fs.getDirectoryScanner(getProject());
@@ -170,16 +168,7 @@
                     try {
                         ModuleDescriptor md = 
ModuleDescriptorParserRegistry.getInstance().parseDescriptor(ivy, 
ivyFile.toURL(), doValidate(ivy));
                         buildFiles.put(md, buildFile);
-                        mds.add(md);
-
-                        if 
(rootModuleNames.contains(md.getModuleRevisionId().getModuleId().getName())) {
-                               rootModuleDescriptors.add(md);
-                        }
-
-                        if 
(leafModuleNames.contains(md.getModuleRevisionId().getModuleId().getName())) {
-                               leafModuleDescriptors.add(md);
-                        }
-
+                        
mdsMap.put(md.getModuleRevisionId().getModuleId().getName(), md);
                     } catch (Exception ex) {
                         if (_haltOnError) {
                             throw new BuildException("impossible to parse ivy 
file for "+buildFile+": ivyfile="+ivyFile+" exception="+ex, ex);
@@ -193,14 +182,10 @@
             }
         }
         
-        if (!"*".equals(_root) && rootModuleDescriptors.size() != 
rootModuleNames.size()) {
-            throw new BuildException("unable to find one or more root modules 
" +  rootModuleNames + " in build fileset");
-        }
+        List leafModuleDescriptors = 
convertModuleNamesToModuleDescriptors(mdsMap, leafModuleNames, "leaf");
+        List rootModuleDescriptors = 
convertModuleNamesToModuleDescriptors(mdsMap, rootModuleNames, "root");
         
-        if (!"*".equals(_leaf) && leafModuleDescriptors.size() != 
leafModuleNames.size()) {
-            throw new BuildException("unable to find one or more leaf modules 
" + leafModuleNames + " in build fileset");
-        }
-
+        Collection mds = new ArrayList(mdsMap.values());
         if (! rootModuleDescriptors.isEmpty()) {
             Message.info("Filtering modules based on roots " + 
rootModuleNames);
             mds = filterModulesFromRoot(mds, rootModuleDescriptors);
@@ -234,6 +219,19 @@
         getProject().setProperty("ivy.sorted.modules", order.toString());
     }
 
+       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");
+            }
+                       mds.add(md);
+               }
+               return mds;
+       }
+
     /**
      * Returns a collection of ModuleDescriptors that are conatined in the 
input
      * collection of ModuleDescriptors and upon which the root module depends
@@ -251,7 +249,7 @@
         }
 
         // recursively process the nodes
-        Set toKeep = new HashSet();
+        Set toKeep = new LinkedHashSet();
         
         Iterator it = rootmds.iterator();
         while (it.hasNext()) {
@@ -311,7 +309,7 @@
         }
 
         // recursively process the nodes
-        Set toKeep = new HashSet();
+        Set toKeep = new LinkedHashSet();
         Iterator it = leafmds.iterator();
         while (it.hasNext()) {
                ModuleDescriptor leafmd = (ModuleDescriptor) it.next();


Reply via email to