Author: brett Date: Thu Sep 8 23:49:59 2005 New Revision: 279720 URL: http://svn.apache.org/viewcvs?rev=279720&view=rev Log: PR: MNG-613 Completion of the version selection from a range.
Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/AntResolutionListener.java maven/components/trunk/maven-artifact-ant/src/main/resources/META-INF/plexus/components.xml maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java maven/components/trunk/maven-core-it/it0034/expected-results.txt maven/components/trunk/maven-core-it/it0034/pom.xml maven/components/trunk/maven-core-it/it0034/prebuild-hook.txt maven/components/trunk/maven-project/pom.xml maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/AntResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/AntResolutionListener.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/AntResolutionListener.java (original) +++ maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/AntResolutionListener.java Thu Sep 8 23:49:59 2005 @@ -69,12 +69,18 @@ public void updateScope( Artifact artifact, String scope ) { - project.log( indent + artifact.getId() + " (settings scope to: " + scope + ")" ); + project.log( indent + artifact.getId() + " (setting scope to: " + scope + ")" ); } public void updateScopeCurrentPom( Artifact artifact, String scope ) { - updateScope( artifact, scope ); + updateScope( artifact, scope ); + } + + public void selectVersionFromRange( Artifact artifact ) + { + project.log( indent + artifact.getId() + " (setting version to: " + artifact.getVersion() + " from range: " + + artifact.getVersionRange() + ")" ); } public void manageArtifact( Artifact artifact, Artifact replacement ) Modified: maven/components/trunk/maven-artifact-ant/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/resources/META-INF/plexus/components.xml?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-ant/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/components/trunk/maven-artifact-ant/src/main/resources/META-INF/plexus/components.xml Thu Sep 8 23:49:59 2005 @@ -441,6 +441,9 @@ <requirement> <role>org.apache.maven.artifact.factory.ArtifactFactory</role> </requirement> + <requirement> + <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role> + </requirement> </requirements> </component> Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java Thu Sep 8 23:49:59 2005 @@ -76,6 +76,12 @@ logger.debug( indent + artifact.getId() + " (setting scope to: " + scope + ")" ); } + public void selectVersionFromRange( Artifact artifact ) + { + logger.debug( indent + artifact.getId() + " (setting version to: " + artifact.getVersion() + " from range: " + + artifact.getVersionRange() + ")" ); + } + public void manageArtifact( Artifact artifact, Artifact replacement ) { String msg = indent + artifact.getId(); Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Thu Sep 8 23:49:59 2005 @@ -198,7 +198,7 @@ ArtifactResolutionResult artifactResolutionResult; artifactResolutionResult = artifactCollector.collect( artifacts, originatingArtifact, managedVersions, localRepository, remoteRepositories, source, filter, - artifactFactory, listeners ); + listeners ); for ( Iterator i = artifactResolutionResult.getArtifactResolutionNodes().iterator(); i.hasNext(); ) { Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java Thu Sep 8 23:49:59 2005 @@ -84,4 +84,8 @@ public void manageArtifact( Artifact artifact, Artifact replacement ) { } + + public void selectVersionFromRange( Artifact artifact ) + { + } } Modified: maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java (original) +++ maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java Thu Sep 8 23:49:59 2005 @@ -104,7 +104,7 @@ { Set dependencies = new HashSet(); - if ( artifact.getArtifactId().equals( "g" ) ) + if ( "g".equals( artifact.getArtifactId() ) ) { try { @@ -118,6 +118,12 @@ return new ResolutionGroup( artifact, dependencies, remoteRepositories ); } + + public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, + List remoteRepositories ) + { + throw new UnsupportedOperationException( "Cannot get available versions in this test case" ); + } }; ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( g ), @@ -152,7 +158,7 @@ { Set dependencies = new HashSet(); - if ( artifact.getArtifactId().equals( "i" ) ) + if ( "i".equals( artifact.getArtifactId() ) ) { try { @@ -165,6 +171,12 @@ } return new ResolutionGroup( artifact, dependencies, remoteRepositories ); + } + + public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, + List remoteRepositories ) + { + throw new UnsupportedOperationException( "Cannot get available versions in this test case" ); } }; Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java Thu Sep 8 23:49:59 2005 @@ -145,4 +145,8 @@ boolean isRelease(); void setRelease( boolean release ); + + List getAvailableVersions(); + + void setAvailableVersions( List versions ); } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java Thu Sep 8 23:49:59 2005 @@ -76,6 +76,8 @@ private boolean release = false; + private List availableVersions; + public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type, String classifier, ArtifactHandler artifactHandler ) { @@ -229,7 +231,8 @@ public String toString() { - return getId(); + return getDependencyConflictId() + ( hasClassifier() ? ":" + getClassifier() : "" ) + ":" + + ( version != null || baseVersion != null ? getBaseVersion() : versionRange.toString() ); } public int hashCode() @@ -431,15 +434,22 @@ public boolean isSnapshot() { - Matcher m = VERSION_FILE_PATTERN.matcher( getBaseVersion() ); - if ( m.matches() ) + if ( version != null || baseVersion != null ) { - setBaseVersion( m.group( 1 ) + "-" + SNAPSHOT_VERSION ); - return true; + Matcher m = VERSION_FILE_PATTERN.matcher( getBaseVersion() ); + if ( m.matches() ) + { + setBaseVersion( m.group( 1 ) + "-" + SNAPSHOT_VERSION ); + return true; + } + else + { + return getBaseVersion().endsWith( SNAPSHOT_VERSION ) || getBaseVersion().equals( LATEST_VERSION ); + } } else { - return getBaseVersion().endsWith( SNAPSHOT_VERSION ) || getBaseVersion().equals( LATEST_VERSION ); + return false; } } @@ -472,5 +482,15 @@ public boolean isRelease() { return release; + } + + public List getAvailableVersions() + { + return availableVersions; + } + + public void setAvailableVersions( List availableVersions ) + { + this.availableVersions = availableVersions; } } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java Thu Sep 8 23:49:59 2005 @@ -31,4 +31,7 @@ ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories ) throws ArtifactMetadataRetrievalException; + + List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories ) + throws ArtifactMetadataRetrievalException; } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java Thu Sep 8 23:49:59 2005 @@ -17,7 +17,6 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; @@ -37,12 +36,11 @@ { ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter, - ArtifactFactory artifactFactory, List listeners ) + List listeners ) throws ArtifactResolutionException; ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Map managedVersions, ArtifactRepository localRepository, List remoteRepositories, - ArtifactMetadataSource source, ArtifactFilter filter, - ArtifactFactory artifactFactory, List listeners ) + ArtifactMetadataSource source, ArtifactFilter filter, List listeners ) throws ArtifactResolutionException; } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java Thu Sep 8 23:49:59 2005 @@ -17,12 +17,12 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.metadata.ResolutionGroup; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.OverConstrainedVersionException; import org.apache.maven.artifact.versioning.VersionRange; @@ -45,18 +45,16 @@ { public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, ArtifactRepository localRepository, List remoteRepositories, - ArtifactMetadataSource source, ArtifactFilter filter, - ArtifactFactory artifactFactory, List listeners ) + ArtifactMetadataSource source, ArtifactFilter filter, List listeners ) throws ArtifactResolutionException { return collect( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository, remoteRepositories, - source, filter, artifactFactory, listeners ); + source, filter, listeners ); } public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Map managedVersions, ArtifactRepository localRepository, List remoteRepositories, - ArtifactMetadataSource source, ArtifactFilter filter, - ArtifactFactory artifactFactory, List listeners ) + ArtifactMetadataSource source, ArtifactFilter filter, List listeners ) throws ArtifactResolutionException { Map resolvedArtifacts = new HashMap(); @@ -68,7 +66,7 @@ root.addDependencies( artifacts, remoteRepositories, filter ); recurse( root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter, - artifactFactory, listeners ); + listeners ); Set set = new HashSet(); @@ -97,7 +95,7 @@ private void recurse( ResolutionNode node, Map resolvedArtifacts, Map managedVersions, ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source, - ArtifactFilter filter, ArtifactFactory artifactFactory, List listeners ) + ArtifactFilter filter, List listeners ) throws CyclicDependencyException, TransitiveArtifactResolutionException, OverConstrainedVersionException { fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node ); @@ -179,8 +177,43 @@ { // set the recommended version VersionRange versionRange = artifact.getVersionRange(); - String version = versionRange.getSelectedVersion().toString(); - artifact.selectVersion( version ); + + // TODO: maybe its better to just pass the range through to retrieval and use a transformation? + ArtifactVersion version; + if ( !versionRange.isSelectedVersionKnown() ) + { + List versions = artifact.getAvailableVersions(); + if ( versions == null ) + { + versions = source.retrieveAvailableVersions( artifact, localRepository, + remoteRepositories ); + artifact.setAvailableVersions( versions ); + } + + version = versionRange.matchVersion( versions ); + + if ( version == null ) + { + if ( versions.isEmpty() ) + { + throw new OverConstrainedVersionException( + "No versions are present in the repository for the artifact with a range " + + versionRange ); + } + else + { + throw new OverConstrainedVersionException( + "Couldn't find a version in " + versions + " to match range " + versionRange ); + } + } + } + else + { + version = versionRange.getSelectedVersion(); + } + + artifact.selectVersion( version.toString() ); + fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child ); } ResolutionGroup rGroup = source.retrieve( artifact, localRepository, remoteRepositories ); @@ -202,7 +235,7 @@ } recurse( child, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter, - artifactFactory, listeners ); + listeners ); } } @@ -288,6 +321,9 @@ break; case ResolutionListener.MANAGE_ARTIFACT: listener.manageArtifact( node.getArtifact(), replacement ); + break; + case ResolutionListener.SELECT_VERSION_FROM_RANGE: + listener.selectVersionFromRange( node.getArtifact() ); break; default: throw new IllegalStateException( "Unknown event: " + event ); Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java Thu Sep 8 23:49:59 2005 @@ -46,6 +46,8 @@ int UPDATE_SCOPE_CURRENT_POM = 9; + int SELECT_VERSION_FROM_RANGE = 10; + void testArtifact( Artifact node ); void startProcessChildren( Artifact artifact ); @@ -63,4 +65,6 @@ void omitForCycle( Artifact artifact ); void updateScopeCurrentPom( Artifact artifact, String scope ); + + void selectVersionFromRange( Artifact artifact ); } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java Thu Sep 8 23:49:59 2005 @@ -407,9 +407,7 @@ else { Restriction restriction = (Restriction) restrictions.get( restrictions.size() - 1 ); - // TODO: how can we find the latest release before something to facilitate ) at the end? - // Also, how can we find the latest release when there no RELEASE metadata? We need to be maintaining - // a version list in the repository + version = restriction.getUpperBound(); if ( version == null ) { @@ -420,6 +418,38 @@ return version; } + public boolean isSelectedVersionKnown() + throws OverConstrainedVersionException + { + boolean value; + if ( recommendedVersion != null ) + { + value = true; + } + else + { + if ( restrictions.size() == 0 ) + { + throw new OverConstrainedVersionException( "The artifact has no valid ranges" ); + } + else + { + Restriction restriction = (Restriction) restrictions.get( restrictions.size() - 1 ); + + if ( restriction.getUpperBound() == null ) + { + // RELEASE version, considered known + value = true; + } + else + { + value = restriction.isUpperBoundInclusive(); + } + } + } + return value; + } + public String toString() { if ( recommendedVersion != null ) @@ -452,5 +482,39 @@ } return buf.toString(); } + } + + public ArtifactVersion matchVersion( List versions ) + { + // TODO: could be more efficient by sorting the list and then moving along the restrictions in order? + + ArtifactVersion matched = null; + for ( Iterator i = versions.iterator(); i.hasNext(); ) + { + ArtifactVersion version = (ArtifactVersion) i.next(); + if ( containsVersion( version ) ) + { + // valid - check if it is greater than the currently matched version + if ( matched == null || version.compareTo( matched ) > 0 ) + { + matched = version; + } + } + } + return matched; + } + + private boolean containsVersion( ArtifactVersion version ) + { + boolean matched = false; + for ( Iterator i = restrictions.iterator(); i.hasNext() && !matched; ) + { + Restriction restriction = (Restriction) i.next(); + if ( restriction.containsVersion( version ) ) + { + matched = true; + } + } + return matched; } } Modified: maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java (original) +++ maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java Thu Sep 8 23:49:59 2005 @@ -336,21 +336,21 @@ throws ArtifactResolutionException { return artifactCollector.collect( artifacts, projectArtifact.artifact, null, null, source, null, - artifactFactory, Collections.EMPTY_LIST ); + Collections.EMPTY_LIST ); } private ArtifactResolutionResult collect( ArtifactSpec a ) throws ArtifactResolutionException { return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, null, null, - source, null, artifactFactory, Collections.EMPTY_LIST ); + source, null, Collections.EMPTY_LIST ); } private ArtifactResolutionResult collect( ArtifactSpec a, ArtifactFilter filter ) throws ArtifactResolutionException { return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, null, null, - source, filter, artifactFactory, Collections.EMPTY_LIST ); + source, filter, Collections.EMPTY_LIST ); } private ArtifactResolutionResult collect( ArtifactSpec a, Artifact managedVersion ) @@ -358,8 +358,7 @@ { Map managedVersions = Collections.singletonMap( managedVersion.getDependencyConflictId(), managedVersion ); return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, - managedVersions, null, null, source, null, artifactFactory, - Collections.EMPTY_LIST ); + managedVersions, null, null, source, null, Collections.EMPTY_LIST ); } private ArtifactSpec createArtifact( String id, String version ) @@ -460,6 +459,13 @@ } return projectArtifacts; + } + + public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, + List remoteRepositories ) + throws ArtifactMetadataRetrievalException + { + throw new UnsupportedOperationException( "Cannot get available versions in this test case" ); } } } Modified: maven/components/trunk/maven-core-it/it0034/expected-results.txt URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0034/expected-results.txt?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-core-it/it0034/expected-results.txt (original) +++ maven/components/trunk/maven-core-it/it0034/expected-results.txt Thu Sep 8 23:49:59 2005 @@ -1 +1,2 @@ +${artifact:junit:junit:3.7:jar} ${artifact:org.apache.maven:maven-core-it-support:1.1:jar} Modified: maven/components/trunk/maven-core-it/it0034/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0034/pom.xml?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-core-it/it0034/pom.xml (original) +++ maven/components/trunk/maven-core-it/it0034/pom.xml Thu Sep 8 23:49:59 2005 @@ -7,8 +7,8 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>3.8.1</version> - <type>jar</type> + <!-- Select 3.7 --> + <version>(,3.8)</version> <scope>test</scope> </dependency> <dependency> Modified: maven/components/trunk/maven-core-it/it0034/prebuild-hook.txt URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0034/prebuild-hook.txt?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-core-it/it0034/prebuild-hook.txt (original) +++ maven/components/trunk/maven-core-it/it0034/prebuild-hook.txt Thu Sep 8 23:49:59 2005 @@ -1 +1,2 @@ rm ${artifact:org.apache.maven:maven-core-it-support:1.1:jar} +rm ${artifact:junit:junit:3.7:jar} Modified: maven/components/trunk/maven-project/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/pom.xml?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-project/pom.xml (original) +++ maven/components/trunk/maven-project/pom.xml Thu Sep 8 23:49:59 2005 @@ -18,6 +18,12 @@ <artifactId>maven-model</artifactId> <version>2.0-beta-1-SNAPSHOT</version> </dependency> + <!-- TODO: temporary - refactor code to avoid this. It is for metadata retrieval in MavenMetadataSource --> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact-manager</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-profile</artifactId> Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java Thu Sep 8 23:49:59 2005 @@ -260,4 +260,14 @@ { artifact.setResolved( release ); } + + public List getAvailableVersions() + { + return artifact.getAvailableVersions(); + } + + public void setAvailableVersions( List versions ) + { + artifact.setAvailableVersions( versions ); + } } Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Thu Sep 8 23:49:59 2005 @@ -18,13 +18,20 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.metadata.ResolutionGroup; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; +import org.apache.maven.artifact.repository.metadata.Metadata; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager; +import org.apache.maven.artifact.repository.metadata.Versioning; +import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.model.Dependency; @@ -36,9 +43,15 @@ import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -48,20 +61,22 @@ import java.util.Set; /** - * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl </a> + * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> * @version $Id$ */ public class MavenMetadataSource extends AbstractLogEnabled implements ArtifactMetadataSource { - public static final String ROLE_HINT = "maven"; private MavenProjectBuilder mavenProjectBuilder; private ArtifactFactory artifactFactory; + private RepositoryMetadataManager repositoryMetadataManager; + /** * Retrieve the metadata for the project from the repository. * Uses the ProjectBuilder, to enable post-processing and inheritance calculation before retrieving the @@ -88,8 +103,8 @@ { try { - project = mavenProjectBuilder - .buildFromRepository( pomArtifact, remoteRepositories, localRepository ); + project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, + localRepository ); } catch ( InvalidModelException e ) { @@ -255,5 +270,108 @@ } return projectArtifacts; + } + + public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, + List remoteRepositories ) + throws ArtifactMetadataRetrievalException + { + ArtifactMetadata metadata = new ArtifactRepositoryMetadata( artifact ); + repositoryMetadataManager.resolve( metadata, remoteRepositories, localRepository ); + + // TODO: this has been ripped from AbstractVersionTransformation - stop duplication + Versioning versioning = null; + for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); ) + { + ArtifactRepository repository = (ArtifactRepository) i.next(); + + versioning = loadVersioningInformation( metadata, repository, localRepository, artifact ); + if ( versioning != null ) + { + artifact.setRepository( repository ); + // TODO: merge instead (see above) + break; + } + } + Versioning v = loadVersioningInformation( metadata, localRepository, localRepository, artifact ); + if ( v != null ) + { + versioning = v; + // TODO: figure out way to avoid duplicated message + if ( getLogger().isDebugEnabled() /*&& !alreadyResolved*/ ) + { + // Locally installed file is newer, don't use the resolved version + getLogger().debug( artifact.getArtifactId() + ": using locally installed snapshot" ); + } + } + + List versions; + if ( versioning != null ) + { + versions = new ArrayList( versioning.getVersions().size() ); + for ( Iterator i = versioning.getVersions().iterator(); i.hasNext(); ) + { + String version = (String) i.next(); + versions.add( new DefaultArtifactVersion( version ) ); + } + } + else + { + versions = Collections.EMPTY_LIST; + } + + return versions; + } + + private Versioning loadVersioningInformation( ArtifactMetadata repoMetadata, ArtifactRepository remoteRepository, + ArtifactRepository localRepository, Artifact artifact ) + throws ArtifactMetadataRetrievalException + { + File metadataFile = new File( localRepository.getBasedir(), + localRepository.pathOfLocalRepositoryMetadata( repoMetadata, remoteRepository ) ); + + Versioning versioning = null; + if ( metadataFile.exists() ) + { + Metadata metadata = readMetadata( metadataFile ); + versioning = metadata.getVersioning(); + } + return versioning; + } + + /** + * @todo share with DefaultPluginMappingManager. + */ + private static Metadata readMetadata( File mappingFile ) + throws ArtifactMetadataRetrievalException + { + Metadata result; + + Reader fileReader = null; + try + { + fileReader = new FileReader( mappingFile ); + + MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); + + result = mappingReader.read( fileReader ); + } + catch ( FileNotFoundException e ) + { + throw new ArtifactMetadataRetrievalException( "Cannot read version information from: " + mappingFile, e ); + } + catch ( IOException e ) + { + throw new ArtifactMetadataRetrievalException( "Cannot read version information from: " + mappingFile, e ); + } + catch ( XmlPullParserException e ) + { + throw new ArtifactMetadataRetrievalException( "Cannot parse version information from: " + mappingFile, e ); + } + finally + { + IOUtil.close( fileReader ); + } + return result; } } Modified: maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml Thu Sep 8 23:49:59 2005 @@ -175,6 +175,9 @@ <requirement> <role>org.apache.maven.artifact.factory.ArtifactFactory</role> </requirement> + <requirement> + <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role> + </requirement> </requirements> </component> </components> Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java?rev=279720&r1=279719&r2=279720&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java (original) +++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java Thu Sep 8 23:49:59 2005 @@ -136,6 +136,12 @@ return new ResolutionGroup( artifact, artifacts, artifactRepositories ); } + public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, + List remoteRepositories ) + { + throw new UnsupportedOperationException( "Cannot get available versions in this test case" ); + } + protected Set createArtifacts( List dependencies, String inheritedScope ) throws InvalidVersionSpecificationException { @@ -146,11 +152,11 @@ Dependency d = (Dependency) i.next(); String scope = d.getScope(); - + if ( StringUtils.isEmpty( scope ) ) { scope = Artifact.SCOPE_COMPILE; - + d.setScope( scope ); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]