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 )