Bug 424826 - Ant tasks do not resolve version ranges from project output

Made ProjectWorkspaceReader implement findVersions()


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/2d33eb21
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/2d33eb21
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/2d33eb21

Branch: refs/heads/ant-tasks
Commit: 2d33eb2126687742650f51862ad6129047e62f92
Parents: 6734757
Author: Benjamin Bentmann <bentm...@sonatype.com>
Authored: Thu Jan 2 23:34:45 2014 +0100
Committer: Benjamin Bentmann <bentm...@sonatype.com>
Committed: Thu Jan 2 23:34:45 2014 +0100

----------------------------------------------------------------------
 .../aether/ant/ProjectWorkspaceReader.java      | 35 +++++++++++++-------
 .../aether/ant/ProjectWorkspaceReaderTest.java  | 30 +++++++++++++++++
 .../org/eclipse/aether/ant/ReactorTest.java     |  9 +++++
 src/test/resources/ant/Reactor/ant.xml          | 12 +++++++
 4 files changed, 74 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/2d33eb21/src/main/java/org/eclipse/aether/ant/ProjectWorkspaceReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/eclipse/aether/ant/ProjectWorkspaceReader.java 
b/src/main/java/org/eclipse/aether/ant/ProjectWorkspaceReader.java
index 9372493..64cc7f5 100644
--- a/src/main/java/org/eclipse/aether/ant/ProjectWorkspaceReader.java
+++ b/src/main/java/org/eclipse/aether/ant/ProjectWorkspaceReader.java
@@ -11,7 +11,7 @@
 package org.eclipse.aether.ant;
 
 import java.io.File;
-import java.util.Collections;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -39,16 +39,18 @@ public class ProjectWorkspaceReader
 
     private static final Object LOCK = new Object();
 
-    private Map<String, File> artifacts = new ConcurrentHashMap<String, 
File>();
+    private Map<String, Artifact> artifacts = new ConcurrentHashMap<String, 
Artifact>();
 
     public void addPom( Pom pom )
     {
         if ( pom.getFile() != null )
         {
             Model model = pom.getModel( pom );
-            String coords =
-                coords( new DefaultArtifact( model.getGroupId(), 
model.getArtifactId(), null, "pom", model.getVersion() ) );
-            artifacts.put( coords, pom.getFile() );
+            Artifact aetherArtifact =
+                new DefaultArtifact( model.getGroupId(), 
model.getArtifactId(), null, "pom", model.getVersion() );
+            aetherArtifact = aetherArtifact.setFile( pom.getFile() );
+            String coords = coords( aetherArtifact );
+            artifacts.put( coords, aetherArtifact );
         }
     }
 
@@ -56,10 +58,8 @@ public class ProjectWorkspaceReader
     {
         if ( artifact.getPom() != null )
         {
-            String coords;
-
             Pom pom = artifact.getPom();
-            DefaultArtifact aetherArtifact;
+            Artifact aetherArtifact;
             if ( pom.getFile() != null )
             {
                 Model model = pom.getModel( pom );
@@ -73,9 +73,10 @@ public class ProjectWorkspaceReader
                     new DefaultArtifact( pom.getGroupId(), 
pom.getArtifactId(), artifact.getClassifier(),
                                          artifact.getType(), pom.getVersion() 
);
             }
+            aetherArtifact = aetherArtifact.setFile( artifact.getFile() );
 
-            coords = coords( aetherArtifact );
-            artifacts.put( coords, artifact.getFile() );
+            String coords = coords( aetherArtifact );
+            artifacts.put( coords, aetherArtifact );
         }
     }
 
@@ -91,12 +92,22 @@ public class ProjectWorkspaceReader
 
     public File findArtifact( Artifact artifact )
     {
-        return artifacts.get( coords( artifact ) );
+        artifact = artifacts.get( coords( artifact ) );
+        return ( artifact != null ) ? artifact.getFile() : null;
     }
 
     public List<String> findVersions( Artifact artifact )
     {
-        return Collections.emptyList();
+        List<String> versions = new ArrayList<String>();
+        String key = ArtifactIdUtils.toVersionlessId( artifact );
+        for ( Artifact art : artifacts.values() )
+        {
+            if ( key.equals( ArtifactIdUtils.toVersionlessId( art ) ) )
+            {
+                versions.add( art.getVersion() );
+            }
+        }
+        return versions;
     }
 
     ProjectWorkspaceReader()

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/2d33eb21/src/test/java/org/eclipse/aether/ant/ProjectWorkspaceReaderTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/eclipse/aether/ant/ProjectWorkspaceReaderTest.java 
b/src/test/java/org/eclipse/aether/ant/ProjectWorkspaceReaderTest.java
index e5a6bc7..1ad937a 100644
--- a/src/test/java/org/eclipse/aether/ant/ProjectWorkspaceReaderTest.java
+++ b/src/test/java/org/eclipse/aether/ant/ProjectWorkspaceReaderTest.java
@@ -10,6 +10,7 @@
  
*******************************************************************************/
 package org.eclipse.aether.ant;
 
+import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.*;
 
 import java.io.File;
@@ -82,4 +83,33 @@ public class ProjectWorkspaceReaderTest
         assertNull( reader.findArtifact( artifact( 
"unavailable:test:jar:0.1-SNAPSHOT" ) ) );
     }
 
+    @Test
+    public void testFindVersions()
+    {
+        Pom pom1 = new Pom();
+        pom1.setProject( project );
+        pom1.setCoords( "test:dummy:1-SNAPSHOT" );
+
+        org.eclipse.aether.ant.types.Artifact artifact1 = new 
org.eclipse.aether.ant.types.Artifact();
+        artifact1.setProject( project );
+        artifact1.addPom( pom1 );
+        artifact1.setFile( getFile( "dummy-file.txt" ) );
+
+        reader.addArtifact( artifact1 );
+
+        Pom pom2 = new Pom();
+        pom2.setProject( project );
+        pom2.setCoords( "test:dummy:2-SNAPSHOT" );
+
+        org.eclipse.aether.ant.types.Artifact artifact2 = new 
org.eclipse.aether.ant.types.Artifact();
+        artifact2.setProject( project );
+        artifact2.addPom( pom2 );
+        artifact2.setFile( getFile( "dummy-file.txt" ) );
+
+        reader.addArtifact( artifact2 );
+
+        assertThat( reader.findVersions( artifact( "test:dummy:txt:[0,)" ) ),
+                    containsInAnyOrder( "1-SNAPSHOT", "2-SNAPSHOT" ) );
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/2d33eb21/src/test/java/org/eclipse/aether/ant/ReactorTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/eclipse/aether/ant/ReactorTest.java 
b/src/test/java/org/eclipse/aether/ant/ReactorTest.java
index ea56fae..12a724d 100644
--- a/src/test/java/org/eclipse/aether/ant/ReactorTest.java
+++ b/src/test/java/org/eclipse/aether/ant/ReactorTest.java
@@ -79,4 +79,13 @@ public class ReactorTest
         assertEquals( new File( projectDir, "pom1.xml" ).getAbsolutePath(), 
prop );
         assertLogContaining( "The POM for test:test:jar:0.1-SNAPSHOT is 
missing, no dependency information available" );
     }
+
+    public void testResolveVersionRange()
+        throws IOException
+    {
+        executeTarget( "testResolveVersionRange" );
+        String prop = project.getProperty( "resolve.test:test:jar" );
+        assertEquals( new File( projectDir, "pom1.xml" ).getAbsolutePath(), 
prop );
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/2d33eb21/src/test/resources/ant/Reactor/ant.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/ant/Reactor/ant.xml 
b/src/test/resources/ant/Reactor/ant.xml
index 81b5a4e..c2d30de 100644
--- a/src/test/resources/ant/Reactor/ant.xml
+++ b/src/test/resources/ant/Reactor/ant.xml
@@ -55,4 +55,16 @@
     </repo:resolve>
   </target>
 
+  <target name="testResolveVersionRange">
+    <repo:pom file="${project.dir}/pom1.xml" id="pom"/>
+    <repo:artifact pomref="pom" file="${project.dir}/pom1.xml" type="jar"/>
+
+    <repo:resolve>
+      <dependencies>
+        <dependency groupId="test" artifactId="test" version="[0,)"/>
+      </dependencies>
+      <properties prefix="resolve"/>
+    </repo:resolve>
+  </target>
+
 </project>

Reply via email to