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]