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 @@
+