You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2009/05/01 06:48:03 UTC
svn commit: r770534 - in /maven/mercury/trunk: mercury-core/
mercury-core/src/main/java/org/apache/maven/mercury/artifact/
mercury-core/src/main/java/org/apache/maven/mercury/metadata/
mercury-core/src/main/java/org/apache/maven/mercury/repository/api/...
Author: ogusakov
Date: Fri May 1 04:48:02 2009
New Revision: 770534
URL: http://svn.apache.org/viewvc?rev=770534&view=rev
Log:
added jetty server to core compile dependencies as authentication requires PathMap class that in the server jar
Modified:
maven/mercury/trunk/mercury-core/pom.xml
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java
Modified: maven/mercury/trunk/mercury-core/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/pom.xml?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/pom.xml (original)
+++ maven/mercury/trunk/mercury-core/pom.xml Fri May 1 04:48:02 2009
@@ -42,10 +42,12 @@
<artifactId>jetty-client</artifactId>
<classifier>assembly</classifier>
<exclusions>
+<!-- Oleg 2009.04.30 - have to add jetty back because authentication needs org.mortbay.jetty.servlet.PathMap
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</exclusion>
+ -->
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-sslengine</artifactId>
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java Fri May 1 04:48:02 2009
@@ -72,7 +72,7 @@
protected ArtifactScopeEnum artifactScope;
- protected String scope;
+// protected String scope;
protected boolean optional;
@@ -228,7 +228,7 @@
if ( count > 5 )
{
- this.scope = nullify( tokens[5] );
+ this.artifactScope = ArtifactScopeEnum.valueOf( nullify( tokens[5] ) );
}
if ( count > 6 )
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java Fri May 1 04:48:02 2009
@@ -107,7 +107,7 @@
}
}
- this.scope = desiredScope;
+ this.artifactScope = ArtifactScopeEnum.valueOf( desiredScope );
validateIdentity();
}
@@ -230,10 +230,10 @@
sb.append( getVersion() );
}
- if ( scope != null )
+ if ( artifactScope != null )
{
sb.append( ":" );
- sb.append( scope );
+ sb.append( artifactScope.toString() );
}
return sb.toString();
}
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Fri May 1 04:48:02 2009
@@ -18,8 +18,10 @@
*/
package org.apache.maven.mercury.metadata;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -87,7 +89,7 @@
private EventManager _eventManager;
- private boolean _buildIndividualTrees = true;
+ private boolean _buildIndividualTrees = false;
private boolean _allowCircularDependencies =
Boolean.parseBoolean( System.getProperty( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, "false" ) );
@@ -179,6 +181,15 @@
treeBuildEvent = new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_BUILD_EVENT, startMD.getGAV() );
MetadataTreeNode root = createNode( startMD, null, startMD, treeScope );
+//
+//try
+//{
+// MetadataTreeNode.showNode( root, 0 );
+//}
+//catch ( IOException e )
+//{
+// e.printStackTrace();
+//}
if ( _eventManager != null )
treeBuildEvent.stop();
@@ -254,32 +265,30 @@
return tl;
}
- DUMMY_ROOT.setDependencies( startMDs );
- DUMMY_ROOT.setInclusions( inclusions == null ? null : inclusions.getMetadataList() );
- DUMMY_ROOT.setExclusions( exclusions == null ? null : exclusions.getMetadataList() );
+ DUMMY_ROOT.setInclusions( Util.isEmpty(inclusions) ? null : inclusions.getMetadataList() );
+ DUMMY_ROOT.setExclusions( Util.isEmpty(exclusions) ? null : exclusions.getMetadataList() );
MetadataTreeNode root = null;
+ // dependencyManagement
+ applyVersionManagement( startMDs, _versionMap );
+
+ // apply scoping & inclusions/exclusions
+ List<ArtifactMetadata> filteredMDs = filterScopeAndLusions( startMDs, scope, new MetadataTreeNode( DUMMY_ROOT, null, null ));
+
+ if( Util.isEmpty( filteredMDs ) )
+ return null;
+
+ nodeCount = filteredMDs.size();
+
if ( _buildIndividualTrees )
{
List<MetadataTreeNode> deps = new ArrayList<MetadataTreeNode>( nodeCount );
-
- for ( ArtifactMetadata bmd : startMDs )
+
+ for ( ArtifactMetadata bmd : filteredMDs )
{
- if ( scope != null && !scope.encloses( bmd.getArtifactScope() ) )
- continue;
-
- try
- {
- if ( !DUMMY_ROOT.allowDependency( bmd ) )
- continue;
- }
- catch ( VersionException e )
- {
- throw new MetadataTreeException( e );
- }
-
- if ( inclusions != null )
+ // inject global into local
+ if ( ! Util.isEmpty( inclusions ) )
{
List<ArtifactMetadata> inc = inclusions.getMetadataList();
@@ -289,7 +298,8 @@
bmd.setInclusions( inc );
}
- if ( exclusions != null )
+ // inject global into local
+ if ( ! Util.isEmpty( exclusions ) )
{
List<ArtifactMetadata> excl = exclusions.getMetadataList();
@@ -316,7 +326,7 @@
}
else
{
- DUMMY_ROOT.setDependencies( startMDs );
+ DUMMY_ROOT.setDependencies( filteredMDs );
root = buildTree( DUMMY_ROOT, scope );
}
@@ -344,6 +354,88 @@
return tl;
}
+ /**
+ * @param startMDs
+ * @param scope
+ * @param dummyRoot
+ * @return
+ * @throws MetadataTreeException
+ */
+ private List<ArtifactMetadata> filterScopeAndLusions( List<ArtifactMetadata> startMDs
+ , ArtifactScopeEnum scope
+ , MetadataTreeNode node
+ )
+ throws MetadataTreeException
+ {
+ List<ArtifactMetadata> res = new ArrayList<ArtifactMetadata>( startMDs.size() );
+
+ int depth = node.getDepth() + 1;
+
+ ArtifactMetadata [] parents = new ArtifactMetadata[ depth ];
+
+ int i=0;
+
+ for( MetadataTreeNode n = node; n != null; n = n.getParent() )
+ parents[i++] = n.getMd();
+
+ for( ArtifactMetadata md : startMDs )
+ {
+ // scoping
+ if ( scope != null && !scope.encloses( md.getArtifactScope() ) )
+ continue;
+
+ try
+ {
+ // inclusions / exclusions to the top
+ for( ArtifactMetadata nMd : parents)
+ if ( !nMd.allowDependency( md ) )
+ continue;
+ }
+ catch ( VersionException e )
+ {
+ throw new MetadataTreeException( e );
+ }
+
+ res.add( md );
+ }
+ return res;
+ }
+
+ /**
+ * @param startMDs
+ * @param map
+ */
+ private void applyVersionManagement( List<ArtifactMetadata> dependencies, Map<String, ArtifactMetadata> versionMap )
+ {
+ if ( Util.isEmpty( versionMap ) || Util.isEmpty( dependencies ) )
+ return;
+
+ for ( ArtifactMetadata am : dependencies )
+ {
+ String key = am.toManagementString();
+ ArtifactMetadata ver = versionMap.get( key );
+ if ( ver != null )
+ {
+ if ( LOG.isDebugEnabled() )
+ LOG.debug( "managed replacement: " + am + " -> " + ver );
+
+ if ( _eventManager != null )
+ {
+ GenericEvent replaceEvent =
+ new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_NODE_VERSION_REPLACE_EVENT,
+ "managed replacement: " + am + " -> " + ver );
+ replaceEvent.stop();
+ _eventManager.fireEvent( replaceEvent );
+ }
+
+ am.setVersion( ver.getVersion() );
+ am.setInclusions( ver.getInclusions() );
+ am.setExclusions( ver.getExclusions() );
+ am.setOptional( ver.isOptional() );
+ }
+ }
+ }
+
// -----------------------------------------------------
private MetadataTreeNode createNode( ArtifactMetadata nodeMD, MetadataTreeNode parent, ArtifactMetadata nodeQuery,
ArtifactScopeEnum globalScope )
@@ -394,42 +486,23 @@
if ( allDependencies == null || allDependencies.size() < 1 )
return node;
- if ( !Util.isEmpty( _versionMap ) )
- for ( ArtifactMetadata am : allDependencies )
- {
- String key = am.toManagementString();
- ArtifactMetadata ver = _versionMap.get( key );
- if ( ver != null )
- {
- if ( LOG.isDebugEnabled() )
- LOG.debug( "managed replacement: " + am + " -> " + ver );
-
- if ( _eventManager != null )
- {
- GenericEvent replaceEvent =
- new GenericEvent( EventTypeEnum.dependencyBuilder, TREE_NODE_VERSION_REPLACE_EVENT,
- "managed replacement: " + am + " -> " + ver );
- replaceEvent.stop();
- _eventManager.fireEvent( replaceEvent );
- }
-
- am.setVersion( ver.getVersion() );
- am.setInclusions( ver.getInclusions() );
- am.setExclusions( ver.getExclusions() );
- am.setOptional( ver.isOptional() );
- }
- }
-
- List<ArtifactMetadata> dependencies = new ArrayList<ArtifactMetadata>( allDependencies.size() );
- if ( globalScope != null )
- for ( ArtifactMetadata md : allDependencies )
- {
- ArtifactScopeEnum mdScope = md.getArtifactScope();
- if ( globalScope.encloses( mdScope ) )
- dependencies.add( md );
- }
- else
- dependencies.addAll( allDependencies );
+ // first time filtering, ranges will pass
+ // through here, unless map is a GA entry
+ applyVersionManagement( allDependencies, _versionMap );
+
+ List<ArtifactMetadata> dependencies = filterScopeAndLusions( allDependencies, globalScope, node );
+
+// new ArrayList<ArtifactMetadata>( allDependencies.size() );
+//
+// if ( globalScope != null )
+// for ( ArtifactMetadata md : allDependencies )
+// {
+// ArtifactScopeEnum mdScope = md.getArtifactScope();
+// if ( globalScope.encloses( mdScope ) )
+// dependencies.add( md );
+// }
+// else
+// dependencies.addAll( allDependencies );
if ( Util.isEmpty( dependencies ) )
return node;
@@ -439,6 +512,8 @@
if ( res == null )
throw new MetadataTreeException( LANG.getMessage( "no.versions", dependencies.toString() ) );
+ // all virtuals/ranges are gone at this point
+
Map<ArtifactMetadata, List<ArtifactMetadata>> expandedDeps = res.getResults();
for ( ArtifactMetadata md : dependencies )
@@ -448,6 +523,11 @@
LOG.debug( "node " + nodeQuery + ", dep " + md );
List<ArtifactMetadata> versions = expandedDeps.get( md );
+
+ // filter actual versions now
+ if( ! Util.isEmpty( versions ) )
+ versions = filterScopeAndLusions( versions, globalScope, node );
+
if ( versions == null || versions.size() < 1 )
{
if ( md.isOptional() || checkOptional( node ) )
@@ -468,6 +548,8 @@
noGoodVersions = false;
continue;
}
+
+ ver.setArtifactScope( md.getArtifactScope() );
MetadataTreeNode kid = createNode( ver, node, md, globalScope );
if ( kid != null )
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java Fri May 1 04:48:02 2009
@@ -19,7 +19,9 @@
package org.apache.maven.mercury.repository.api;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -33,7 +35,7 @@
public class ArtifactResults
extends AbstractRepOpResult
{
- Map<ArtifactMetadata, List<Artifact>> _result = new HashMap<ArtifactMetadata, List<Artifact>>( 8 );
+ Map<ArtifactMetadata, List<Artifact>> _result = new LinkedHashMap<ArtifactMetadata, List<Artifact>>( 8 );
public ArtifactResults()
{
@@ -77,6 +79,25 @@
{
return _result.get( query );
}
+
+ public void reOrderResults( Collection<? extends ArtifactMetadata> query )
+ {
+ if ( _result.isEmpty() )
+ return;
+
+ LinkedHashMap<ArtifactMetadata, List<Artifact>> resMap
+ = new LinkedHashMap<ArtifactMetadata, List<Artifact>>( _result.size() );
+
+ for( ArtifactMetadata md : query )
+ {
+ List<Artifact> qRes = _result.get( md );
+
+ resMap.put( md, qRes );
+ }
+
+ _result = resMap;
+
+ }
@Override
public boolean hasResults()
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Fri May 1 04:48:02 2009
@@ -31,6 +31,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TreeSet;
import org.apache.maven.mercury.artifact.Artifact;
@@ -83,7 +84,7 @@
/**
* implementation of M2 remote repository reader. Actual Transport (protocol, URL) [should] come from RemoteRepository
* Server URL Current implementation does not do the check and uses jetty-client directly. TODO - re-implements after
- * jetty-client implements ReaderTransport
+ * Retriever implements ReaderTransport
*
* @author Oleg Gusakov
* @version $Id$
@@ -99,7 +100,7 @@
// TODO - replace with known Transport's protocols. Should be similar to RepositoryReader/Writer registration
private static final String[] _protocols = new String[] { "http", "https", "dav", "webdav" };
- private HashSet<Server> _servers;
+ private Set<Server> _servers;
// ---------------------------------------------------------------------------------------------------------------
RemoteRepository _repo;
@@ -159,7 +160,7 @@
else
_localRepos = localRepos;
- // TODO 2008-07-29 og: here I should analyze Server protocol
+ // TODO 2008-07-29 Oleg: here I should analyze Server protocol
// and come with appropriate Transport implementation
_servers = new HashSet<Server>( 1 );
_servers.add( repo.getServer() );
@@ -414,18 +415,23 @@
drr.addBinding( pomBinding );
}
- DefaultRetriever transport;
+ DefaultRetriever transport = null ;
+ RetrievalResponse resp;
try
{
transport = new DefaultRetriever();
+ transport.setServers( _servers );
+ resp = transport.retrieve( drr );
}
catch ( HttpClientException e )
{
throw new RepositoryException( e );
}
- transport.setServers( _servers );
- RetrievalResponse resp = transport.retrieve( drr );
- transport.stop();
+ finally
+ {
+ if( transport != null )
+ transport.stop();
+ }
if ( resp.hasExceptions() )
{
@@ -522,21 +528,23 @@
servers.add( ( (RemoteRepositoryReaderM2) tracker ).getRepository().getServer() );
}
- DefaultRetriever retriever;
+ DefaultRetriever transport = null;
+ RetrievalResponse response;
try
{
- retriever = new DefaultRetriever();
+ transport = new DefaultRetriever();
+ transport.setServers( servers );
+ response = transport.retrieve( request );
}
catch ( HttpClientException e )
{
throw new RepositoryException( e );
}
-
- retriever.setServers( servers );
-
- RetrievalResponse response = retriever.retrieve( request );
-
- retriever.stop();
+ finally
+ {
+ if( transport != null )
+ transport.stop();
+ }
if ( response.hasExceptions() )
{
@@ -1069,6 +1077,7 @@
return null;
FileInputStream fis = null;
+ DefaultRetriever transport = null;
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream( 10240 );
@@ -1083,10 +1092,9 @@
DefaultRetrievalRequest request = new DefaultRetrievalRequest();
request.addBinding( binding );
- DefaultRetriever transport = new DefaultRetriever();
+ transport = new DefaultRetriever();
transport.setServers( _servers );
RetrievalResponse response = transport.retrieve( request );
- transport.stop();
if ( response.hasExceptions() )
{
@@ -1119,6 +1127,9 @@
catch ( Exception any )
{
}
+
+ if ( transport != null )
+ transport.stop();
}
}
Modified: maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (original)
+++ maven/mercury/trunk/mercury-core/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Fri May 1 04:48:02 2009
@@ -1154,6 +1154,8 @@
}
}
}
+
+ res.reOrderResults( query );
return res;
}
@@ -1166,6 +1168,7 @@
}
}
}
+
// ----------------------------------------------------------------------------------------------------------------------------
// MetadataReader implementation
Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java?rev=770534&r1=770533&r2=770534&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java Fri May 1 04:48:02 2009
@@ -418,8 +418,20 @@
// "asm:asm-tree:3.0" ) ) );
// assertTrue( res.getChildren().get( 0 ).getChildren().get( 0 ).getChildren().get( 0 ).getMd().equals( new
// ArtifactMetadata( "asm:asm:3.0" ) ) );
+
List<ArtifactMetadata> res2 =
pm.resolve( repos, ArtifactScopeEnum.test, new ArtifactQueryList( artifactId, artifactId2 ), null, null );
+
+ assertTrue( res2.contains( new ArtifactMetadata( "asm:asm-xml:3.0" ) ) );
+
+ assertTrue( res2.contains( new ArtifactMetadata( "asm:asm-util:3.0" ) ) );
+
+ // 2.2.1 wins over 3.0 because it's closer to the root
+ assertTrue( res2.contains( new ArtifactMetadata( "asm:asm:2.2.1" ) ) );
+
+ assertTrue( res2.contains( new ArtifactMetadata( "oro:oro:2.0.8" ) ) );
+
+ assertTrue( res2.contains( new ArtifactMetadata( "cobertura:cobertura:1.8" ) ) );
System.out.println( "\n============== as List =========" );
if ( res2 != null )