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/04/01 00:15:53 UTC

svn commit: r643180 - in /ant/ivy/core/trunk: CHANGES.txt src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java test/java/org/apache/ivy/ant/IvyResolveTest.java test/repositories/norev/ivy.xml

Author: maartenc
Date: Mon Mar 31 15:15:41 2008
New Revision: 643180

URL: http://svn.apache.org/viewvc?rev=643180&view=rev
Log:
FIX: resolve fails to put metadata in cache (IVY-779)

Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyResolveTest.java
    ant/ivy/core/trunk/test/repositories/norev/ivy.xml

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=643180&r1=643179&r2=643180&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Mon Mar 31 15:15:41 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: resolve fails to put metadata in cache (IVY-779)
 - FIX: multiple cleancache and inline retrieve error (IVY-778)
 - 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)

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java?rev=643180&r1=643179&r2=643180&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java Mon Mar 31 15:15:41 2008
@@ -20,6 +20,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -32,9 +33,12 @@
 import org.apache.ivy.core.event.EventManager;
 import org.apache.ivy.core.module.descriptor.Artifact;
 import org.apache.ivy.core.module.descriptor.DefaultArtifact;
+import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.DownloadReport;
 import org.apache.ivy.core.resolve.DownloadOptions;
+import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
+import org.apache.ivy.plugins.parser.ModuleDescriptorParserRegistry;
 import org.apache.ivy.plugins.repository.AbstractRepository;
 import org.apache.ivy.plugins.repository.Repository;
 import org.apache.ivy.plugins.repository.Resource;
@@ -85,8 +89,26 @@
                 Resource res = repository.getResource(resourceName);
                 boolean reachable = res.exists();
                 if (reachable) {
-                    String revision = pattern.indexOf(IvyPatternHelper.REVISION_KEY) == -1 
-                        ? "working@" + name : mrid.getRevision();
+                    String revision;
+                    if (pattern.indexOf(IvyPatternHelper.REVISION_KEY) == -1) {
+                        if ("ivy".equals(artifact.getType()) || "pom".equals(artifact.getType())) {
+                            // we can't determine the revision from the pattern, get it
+                            // from the moduledescriptor itself
+                            File temp = File.createTempFile("ivy", artifact.getExt());
+                            temp.deleteOnExit();
+                            repository.get(res.getName(), temp);
+                            ModuleDescriptorParser parser = ModuleDescriptorParserRegistry.getInstance().getParser(res);
+                            ModuleDescriptor md = parser.parseDescriptor(getSettings(), temp.toURL(), res, false);
+                            revision = md.getRevision();
+                            if ((revision == null) || (revision.length() == 0)) {
+                                revision = "working@" + name;
+                            }
+                        } else {
+                            revision = "working@" + name;
+                        }
+                    } else {
+                        revision = mrid.getRevision();
+                    }
                     return new ResolvedResource(res, revision);
                 } else if (versionMatcher.isDynamic(mrid)) {
                     return findDynamicResourceUsingPattern(
@@ -100,6 +122,9 @@
                 return findDynamicResourceUsingPattern(rmdparser, mrid, pattern, artifact, date);
             }
         } catch (IOException ex) {
+            throw new RuntimeException(name + ": unable to get resource for " + mrid + ": res="
+                    + IvyPatternHelper.substitute(pattern, mrid, artifact) + ": " + ex, ex);
+        } catch (ParseException ex) {
             throw new RuntimeException(name + ": unable to get resource for " + mrid + ": res="
                     + IvyPatternHelper.substitute(pattern, mrid, artifact) + ": " + ex, ex);
         }

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyResolveTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyResolveTest.java?rev=643180&r1=643179&r2=643180&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyResolveTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyResolveTest.java Mon Mar 31 15:15:41 2008
@@ -24,6 +24,9 @@
 import org.apache.ivy.Ivy;
 import org.apache.ivy.TestHelper;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ResolveReport;
+import org.apache.ivy.util.DefaultMessageLogger;
+import org.apache.ivy.util.Message;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Delete;
@@ -57,6 +60,24 @@
         del.setProject(new Project());
         del.setDir(cache);
         del.execute();
+    }
+    
+    public void testIVY779() throws Exception {
+        Project project = new Project();
+        project.setProperty("ivy.local.default.root", "test/repositories/norev");
+        project.setProperty("ivy.local.default.ivy.pattern", "[module]/[artifact].[ext]");
+        project.setProperty("ivy.local.default.artifact.pattern", "[module]/[artifact].[ext]");
+
+        resolve.setProject(project);
+        project.setProperty("ivy.cache.dir", cache.getAbsolutePath());
+        resolve.setFile(new File("test/repositories/norev/ivy.xml"));
+        resolve.setKeep(true);
+        resolve.execute();
+        
+        ResolveReport report = (ResolveReport) project.getReference("ivy.resolved.report");
+        assertNotNull(report);
+        assertFalse(report.hasError());
+        assertEquals(1, report.getArtifacts().size());
     }
 
     public void testSimple() throws Exception {

Modified: ant/ivy/core/trunk/test/repositories/norev/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/norev/ivy.xml?rev=643180&r1=643179&r2=643180&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/repositories/norev/ivy.xml (original)
+++ ant/ivy/core/trunk/test/repositories/norev/ivy.xml Mon Mar 31 15:15:41 2008
@@ -22,6 +22,6 @@
     	<conf name="myconf"/>
     </configurations>
     <dependencies>
-        <dependency conf="myconf -> *" org="myorg" name="module2" rev="latest.integration" />
+        <dependency conf="myconf -> *" org="myorg" name="module2" rev="2.0" />
 	</dependencies>
 </ivy-module>