Author: maartenc
Date: Sun Mar 18 16:38:23 2007
New Revision: 519738

URL: http://svn.apache.org/viewvc?view=rev&rev=519738
Log:
Dynamic revision not calculated properly when using multiple directories 
(IVY-427)

Added:
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/ivy-1.0.xml
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/ivy-1.1.xml
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivyconf.xml
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.0.jar
    incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.1.jar
Modified:
    incubator/ivy/core/trunk/CHANGES.txt
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
    
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java

Modified: incubator/ivy/core/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/CHANGES.txt?view=diff&rev=519738&r1=519737&r2=519738
==============================================================================
--- incubator/ivy/core/trunk/CHANGES.txt (original)
+++ incubator/ivy/core/trunk/CHANGES.txt Sun Mar 18 16:38:23 2007
@@ -17,6 +17,7 @@
 - IMPROVE: New "modules in use" section in console report at the end of 
resolve (IVY-373) (thanks to John Wiliams)
 - IMPROVE: Generated XML reports now contains more information about the 
resolved module (IVY-408)
 
+- FIX: Dynamic revision not calculated properly when using multiple 
directories (IVY-427)
 - FIX: LatestRevisionStrategy.sort() doesn't sort as specified (IVY-435)
 - FIX: setting m2compatible on ibiblio resolver overwrite root and pattern 
settings (IVY-437)
 - FIX: ivy.revision property not set correctly for second resolve (IVY-429)

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java?view=diff&rev=519738&r1=519737&r2=519738
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
 Sun Mar 18 16:38:23 2007
@@ -32,11 +32,15 @@
 import org.apache.ivy.core.module.descriptor.Artifact;
 import org.apache.ivy.core.module.descriptor.DefaultArtifact;
 import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
+import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.resolve.ResolveData;
 import org.apache.ivy.core.settings.IvyPattern;
+import org.apache.ivy.plugins.latest.LatestStrategy;
+import org.apache.ivy.plugins.resolver.util.MDResolvedResource;
 import org.apache.ivy.plugins.resolver.util.ResolvedResource;
 import org.apache.ivy.plugins.resolver.util.ResourceMDParser;
+import org.apache.ivy.plugins.version.VersionMatcher;
 import org.apache.ivy.util.Message;
 
 
@@ -79,14 +83,77 @@
 
        protected ResolvedResource findResourceUsingPatterns(ModuleRevisionId 
moduleRevision, List patternList, Artifact artifact, ResourceMDParser 
rmdparser, Date date) {
         ResolvedResource rres = null;
-        for (Iterator iter = patternList.iterator(); iter.hasNext() && rres == 
null;) {
+        
+        List resolvedResources = new ArrayList();
+        boolean dynamic = 
getSettings().getVersionMatcher().isDynamic(moduleRevision);
+        boolean stop = false;
+        for (Iterator iter = patternList.iterator(); iter.hasNext() && !stop;) 
{
             String pattern = (String)iter.next();
             rres = findResourceUsingPattern(moduleRevision, pattern, artifact, 
rmdparser, date);
+            if (rres != null) {
+               resolvedResources.add(rres);
+               stop = !dynamic; // stop iterating if we are not searching a 
dynamic revision
+            }
         }
+        
+        if (resolvedResources.size() > 1) {
+               ResolvedResource[] rress = (ResolvedResource[]) 
resolvedResources.toArray(new ResolvedResource[resolvedResources.size()]);
+               rres = findResource(rress, getName(), getLatestStrategy(), 
getSettings().getVersionMatcher(), rmdparser, moduleRevision, date);
+        }
+        
         return rres;
     }
     
     protected abstract ResolvedResource 
findResourceUsingPattern(ModuleRevisionId mrid, String pattern, Artifact 
artifact, ResourceMDParser rmdparser, Date date);
+
+    public static ResolvedResource findResource(
+               ResolvedResource[] rress, 
+               String name,
+               LatestStrategy strategy, 
+               VersionMatcher versionMatcher, 
+               ResourceMDParser rmdparser,
+               ModuleRevisionId mrid, 
+               Date date) {
+       ResolvedResource found = null;
+       List sorted = strategy.sort(rress);
+       for (ListIterator iter = sorted.listIterator(sorted.size()); 
iter.hasPrevious();) {
+                       ResolvedResource rres = (ResolvedResource) 
iter.previous();
+                       if ((date != null && rres.getLastModified() > 
date.getTime())) {
+                Message.debug("\t"+name+": too young: "+rres);
+                               continue;
+                       }
+                       ModuleRevisionId foundMrid = 
ModuleRevisionId.newInstance(mrid, rres.getRevision());
+                       if (!versionMatcher.accept(mrid, foundMrid)) {
+                Message.debug("\t"+name+": rejected by version matcher: 
"+rres);
+                               continue;
+                       }
+                       if (versionMatcher.needModuleDescriptor(mrid, 
foundMrid)) {
+                       ResolvedResource r = 
rmdparser.parse(rres.getResource(), rres.getRevision());
+                       ModuleDescriptor md = 
((MDResolvedResource)r).getResolvedModuleRevision().getDescriptor();
+                       if (md.isDefault()) {
+                       Message.debug("\t"+name+": default md rejected by 
version matcher requiring module descriptor: "+rres);
+                               continue;
+                       } else if (!versionMatcher.accept(mrid, md)) {
+                       Message.debug("\t"+name+": md rejected by version 
matcher: "+rres);
+                               continue;
+                       } else {
+                               found = r;
+                       }
+                       } else {
+                               found = rres;
+                       }
+               
+               if (found != null) {
+                       if (!found.getResource().exists()) {
+                               Message.debug("\t"+name+": resource not 
reachable for "+mrid+": res="+found.getResource());
+                               continue; 
+                       }
+                       break;
+               }
+               }
+       
+       return found;
+    }
 
     /**
      * Output message to log indicating what have been done to look for an 
artifact which

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java?view=diff&rev=519738&r1=519737&r2=519738
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
 Sun Mar 18 16:38:23 2007
@@ -122,46 +122,14 @@
             Message.debug("\t"+name+": unable to list resources for "+mrid+": 
pattern="+pattern);
             return null;
         } else {
-               ResolvedResource found = null;
-               List sorted = strategy.sort(rress);
-               for (Iterator iter = sorted.iterator(); iter.hasNext();) {
-                               ResolvedResource rres = (ResolvedResource) 
iter.next();
-                               if ((date != null && rres.getLastModified() > 
date.getTime())) {
-                       Message.debug("\t"+name+": too young: "+rres);
-                                       continue;
-                               }
-                               ModuleRevisionId foundMrid = 
ModuleRevisionId.newInstance(mrid, rres.getRevision());
-                               if (!versionMatcher.accept(mrid, foundMrid)) {
-                       Message.debug("\t"+name+": rejected by version matcher: 
"+rres);
-                                       continue;
-                               }
-                               if (versionMatcher.needModuleDescriptor(mrid, 
foundMrid)) {
-                       ResolvedResource r = 
rmdparser.parse(rres.getResource(), rres.getRevision());
-                       ModuleDescriptor md = 
((MDResolvedResource)r).getResolvedModuleRevision().getDescriptor();
-                       if (md.isDefault()) {
-                       Message.debug("\t"+name+": default md rejected by 
version matcher requiring module descriptor: "+rres);
-                               continue;
-                       } else if (!versionMatcher.accept(mrid, md)) {
-                       Message.debug("\t"+name+": md rejected by version 
matcher: "+rres);
-                               continue;
-                       } else {
-                               found = r;
-                       }
-                                       
-                               } else {
-                                       found = rres;
-                               }
-                       }
+               ResolvedResource found = findResource(rress, name, strategy, 
versionMatcher, rmdparser, mrid, date);
                if (found == null) {
                        Message.debug("\t"+name+": no resource found for 
"+mrid+": pattern="+pattern);                    
-               } else if (!found.getResource().exists()) {
-                       Message.debug("\t"+name+": resource not reachable for 
"+mrid+": res="+found.getResource());
-                       return null; 
                }
                return found;
         }
     }
-
+    
     protected long get(Resource resource, File dest) throws IOException {
         Message.verbose("\t"+getName()+": downloading "+resource.getName());
         Message.debug("\t\tto "+dest);

Modified: 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java?view=diff&rev=519738&r1=519737&r2=519738
==============================================================================
--- 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java 
(original)
+++ 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java 
Sun Mar 18 16:38:23 2007
@@ -22,6 +22,7 @@
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import javax.xml.parsers.SAXParser;
@@ -47,7 +48,6 @@
 import org.apache.ivy.plugins.circular.ErrorCircularDependencyStrategy;
 import org.apache.ivy.plugins.circular.IgnoreCircularDependencyStrategy;
 import org.apache.ivy.plugins.circular.WarnCircularDependencyStrategy;
-import org.apache.ivy.plugins.report.XmlReportOutputter;
 import org.apache.ivy.plugins.resolver.BasicResolver;
 import org.apache.ivy.plugins.resolver.DependencyResolver;
 import org.apache.ivy.plugins.resolver.DualResolver;
@@ -2739,6 +2739,26 @@
                // delete the non-default cache
                        cache2.delete();
        }
+    }
+    
+    public void testResolveWithMultipleIvyPatterns() throws Exception {
+        Ivy ivy = new Ivy();
+        ivy.configure(new 
File("test/repositories/multi-ivypattern/ivyconf.xml"));
+        
+       ModuleRevisionId module = ModuleRevisionId.newInstance("org1", 
"mod1.1", "1.+");
+       
+       // use a non-default cache
+       ResolveOptions options = getResolveOptions(ivy.getSettings(), new 
String[] {"*"});
+       options.setTransitive(false);
+       options.setUseOrigin(true);
+       options.setDownload(false);
+       ResolveReport report = ivy.getResolveEngine().resolve(module, options, 
false);
+       
+       List dependencies = report.getDependencies();
+       assertNotNull(dependencies);
+       assertEquals(1, dependencies.size());
+       IvyNode dependency = (IvyNode) dependencies.get(0);
+       assertEquals("1.1", dependency.getResolvedId().getRevision());
     }
 
     ////////////////////////////////////////////////////////////

Added: 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/ivy-1.0.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/ivy-1.0.xml?view=auto&rev=519738
==============================================================================
--- 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/ivy-1.0.xml 
(added)
+++ 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy1/ivy-1.0.xml 
Sun Mar 18 16:38:23 2007
@@ -0,0 +1,9 @@
+<ivy-module version="1.0">
+       <info organisation="org1"
+              module="mod1.1"
+              revision="1.0"
+              status="integration"
+              publication="20041101110000"
+       />
+       <dependencies />
+</ivy-module>

Added: 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/ivy-1.1.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/ivy-1.1.xml?view=auto&rev=519738
==============================================================================
--- 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/ivy-1.1.xml 
(added)
+++ 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivy2/ivy-1.1.xml 
Sun Mar 18 16:38:23 2007
@@ -0,0 +1,11 @@
+<ivy-module version="1.0">
+       <info organisation="org1"
+              module="mod1.1"
+              revision="1.1"
+              status="integration"
+              publication="20050102110000"
+       /> 
+       <dependencies>
+               <dependency name="mod1.2" rev="2.1"/>
+       </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivyconf.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivyconf.xml?view=auto&rev=519738
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivyconf.xml 
(added)
+++ incubator/ivy/core/trunk/test/repositories/multi-ivypattern/ivyconf.xml Sun 
Mar 18 16:38:23 2007
@@ -0,0 +1,10 @@
+<ivyconf>
+  <conf defaultCache="build/cache" defaultResolver="multi-ivy"/>
+  <resolvers>
+       <filesystem name="multi-ivy">
+               <ivy 
pattern="test/repositories/multi-ivypattern/ivy1/ivy-[revision].xml" />
+               <ivy 
pattern="test/repositories/multi-ivypattern/ivy2/ivy-[revision].xml" />
+               <artifact 
pattern="test/repositories/multi-ivypattern/jars/mod-[revision].jar" />
+       </filesystem>
+  </resolvers>
+</ivyconf>

Added: 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.0.jar
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.0.jar?view=auto&rev=519738
==============================================================================
--- 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.0.jar 
(added)
+++ 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.0.jar 
Sun Mar 18 16:38:23 2007
@@ -0,0 +1 @@
+ 

Added: 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.1.jar
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.1.jar?view=auto&rev=519738
==============================================================================
--- 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.1.jar 
(added)
+++ 
incubator/ivy/core/trunk/test/repositories/multi-ivypattern/jars/mod-1.1.jar 
Sun Mar 18 16:38:23 2007
@@ -0,0 +1 @@
+ 


Reply via email to