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/04/08 06:11:13 UTC

svn commit: r762820 - in /maven/mercury/trunk: mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ mercury-md/mercury-md-sat/src/main/java/org/apache/maven/merc...

Author: ogusakov
Date: Tue Apr  7 15:29:44 2009
New Revision: 762820

URL: http://svn.apache.org/viewvc?rev=762820&view=rev
Log:
[MERCURY-109] - allowed optional circular dependencies

Added:
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java   (with props)
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java   (with props)
Modified:
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties
    maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
    maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java

Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java Tue Apr  7 15:29:44 2009
@@ -18,9 +18,11 @@
  */
 package org.apache.maven.mercury.artifact.api;
 
+import java.util.Map;
+
 /**
  * provides a way to configure an object instance, if that object supports the idea
- *
+ * 
  * @author Oleg Gusakov
  * @version $Id$
  */
@@ -29,9 +31,10 @@
 
     /**
      * configure this instance
-     *
+     * 
      * @param name of the configurable property
      * @param val configuration value
      */
-    public void setOption( String name, String val );
+    public void setOption( String name, String val )
+        throws ConfigurationException;
 }

Added: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java?rev=762820&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java (added)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java Tue Apr  7 15:29:44 2009
@@ -0,0 +1,26 @@
+package org.apache.maven.mercury.artifact.api;
+
+public class ConfigurationException
+    extends Exception
+{
+
+    public ConfigurationException()
+    {
+    }
+
+    public ConfigurationException( String message )
+    {
+        super( message );
+    }
+
+    public ConfigurationException( Throwable cause )
+    {
+        super( cause );
+    }
+
+    public ConfigurationException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+}

Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java?rev=762820&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java (added)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java Tue Apr  7 15:29:44 2009
@@ -0,0 +1,42 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+package org.apache.maven.mercury.artifact.api;
+
+import java.util.Map;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class ConfigurationUtil
+{
+    public static void configure( Configurable impl, Map<String,String> config )
+    throws ConfigurationException
+    {
+        if( impl == null || config == null )
+            return;
+        
+        for( Map.Entry<String, String> e : config.entrySet() )
+            impl.setOption( e.getKey(), e.getValue() );
+    }
+}

Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java Tue Apr  7 15:29:44 2009
@@ -266,7 +266,7 @@
             _osgiVersion = Boolean.parseBoolean( System.getProperty( val, SYSTEM_PARAMETER_OSGI_VERSION_DEFAULT ) );
         }
     }
-
+    
     public boolean isSingleton()
     {
         return _singleton;

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java Tue Apr  7 15:29:44 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.mercury.artifact.ArtifactQueryList;
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.artifact.MetadataTreeNode;
+import org.apache.maven.mercury.artifact.api.Configurable;
 import org.apache.maven.mercury.event.MercuryEventListener;
 
 /**
@@ -36,9 +37,12 @@
  *
  */
 public interface DependencyBuilder
+extends Configurable
 {
   public static final String TREE_BUILD_EVENT = "tree.build";
   public static final String TREE_NODE_BUILD_EVENT = "tree.node.build";
+
+  public static final String SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES = "mercury.circular.allow";
   //------------------------------------------------------------------------
   /**
    * build the tree, using the repositories specified in the

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java Tue Apr  7 15:29:44 2009
@@ -25,6 +25,9 @@
 
 import org.apache.maven.mercury.artifact.MetadataTreeNode;
 import org.apache.maven.mercury.artifact.api.ArtifactListProcessor;
+import org.apache.maven.mercury.artifact.api.Configurable;
+import org.apache.maven.mercury.artifact.api.ConfigurationException;
+import org.apache.maven.mercury.artifact.api.ConfigurationUtil;
 import org.apache.maven.mercury.repository.api.Repository;
 import org.apache.maven.mercury.repository.api.RepositoryException;
 import org.codehaus.plexus.lang.DefaultLanguage;
@@ -62,8 +65,34 @@
                      )
   throws RepositoryException
   {
+      return create( dependencyModel, repositories, null, null, null, null );
+  }
+  
+  public static final DependencyBuilder create(
+        String dependencyModel
+      , Collection<Repository> repositories
+      , Collection<MetadataTreeArtifactFilter> filters
+      , List<Comparator<MetadataTreeNode>> comparators
+      , Map<String,ArtifactListProcessor> processors
+      , Map<String,String> config 
+                     )
+  throws RepositoryException
+  {
     if( JAVA_DEPENDENCY_MODEL.equals( dependencyModel ) )
-      return new DependencyTreeBuilder( repositories,  filters, comparators, processors );
+    {
+        DependencyBuilder db = new DependencyTreeBuilder( repositories,  filters, comparators, processors );
+        
+        try
+        {
+            ConfigurationUtil.configure( db, config );
+        }
+        catch ( ConfigurationException e )
+        {
+            throw new RepositoryException( e );
+        }
+        
+        return db;
+    }
     
     throw new IllegalArgumentException( LANG.getMessage( "dependency.model.not.implemented", dependencyModel ) );
   }

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Tue Apr  7 15:29:44 2009
@@ -32,6 +32,7 @@
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.artifact.MetadataTreeNode;
 import org.apache.maven.mercury.artifact.api.ArtifactListProcessor;
+import org.apache.maven.mercury.artifact.api.ConfigurationException;
 import org.apache.maven.mercury.artifact.version.VersionException;
 import org.apache.maven.mercury.event.EventGenerator;
 import org.apache.maven.mercury.event.EventManager;
@@ -70,7 +71,7 @@
     private static final boolean _dumpDepTree = _depTreeDumpFileName != null;
     
     private static final DependencyTreeDumper _dumper = _dumpDepTree ? new DependencyTreeDumper(_depTreeDumpFileName ) : null;
-
+    
     private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( DependencyTreeBuilder.class );
 
     private Collection<MetadataTreeArtifactFilter> _filters;
@@ -87,6 +88,8 @@
     
     private boolean _buildIndividualTrees = true;
     
+    private boolean _allowCircularDependencies = Boolean.parseBoolean( System.getProperty( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, "false" ) );
+    
     class TruckLoad
     {
         List<ArtifactMetadata> cp;
@@ -358,7 +361,21 @@
 
         try
         {
-            checkForCircularDependency( nodeMD, parent );
+            try
+            {
+                checkForCircularDependency( nodeMD, parent );
+            }
+            catch ( MetadataTreeCircularDependencyException e )
+            {
+                if( _allowCircularDependencies )
+                {
+                    String line = LANG.getMessage( "attention.line" );
+                    LOG.info( line + e.getMessage() + line );
+                    return null;
+                }
+                else
+                    throw e;
+            }
 
             ArtifactMetadata mr;
 
@@ -431,7 +448,8 @@
                     }
 
                     MetadataTreeNode kid = createNode( ver, node, md, globalScope );
-                    node.addChild( kid );
+                    if( kid != null )
+                        node.addChild( kid );
 
                     noVersions = false;
 
@@ -658,4 +676,11 @@
         if( _reader != null )
             _reader.close();
     }
+
+    public void setOption( String name, String val )
+        throws ConfigurationException
+    {
+        if( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES.equals( name ) )
+            _allowCircularDependencies = Boolean.parseBoolean( val );
+    }
 }

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties Tue Apr  7 15:29:44 2009
@@ -24,4 +24,6 @@
 
 no.versions=cannot find any versions for {0} - exit
 
-not.optional.missing="did not find non-optional artifact for "
\ No newline at end of file
+not.optional.missing="did not find non-optional artifact for "
+
+attention.line=\n\n*************************************************************************************\n\n
\ No newline at end of file

Modified: maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java (original)
+++ maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java Tue Apr  7 15:29:44 2009
@@ -83,6 +83,9 @@
     @Configuration( name = "defaultDependencyProcessorHint", value = "maven" )
     String _defaultDpHint = "maven";
 
+    @Configuration( name = "allowCircularDependencies", value = "true" )
+    boolean _allowCircularDependencies = true;
+
     @Requirement
     private Map<String, DependencyProcessor> _dependencyProcessors;
 
@@ -113,6 +116,11 @@
         _defaultDpHint = hint;
     }
     // ---------------------------------------------------------------
+    public void setAllowCircularDependencies( boolean allow )
+    {
+        _allowCircularDependencies = allow;
+    }
+    // ---------------------------------------------------------------
     public RemoteRepositoryM2 constructRemoteRepositoryM2( String id, URL serverUrl, String serverUser,
                                                            String serverPass, URL proxyUrl, String proxyUser,
                                                            String proxyPass,
@@ -274,7 +282,9 @@
         try
         {
             DependencyBuilder depBuilder =
-                DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+                DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
+                    , Util.mapOf( new String [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } ) 
+                                                );
 
             List<ArtifactMetadata> res = depBuilder.resolveConflicts( scope, artifacts, inclusions, exclusions );
             
@@ -303,7 +313,9 @@
         try
         {
             DependencyBuilder depBuilder =
-                DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+                DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
+                       , Util.mapOf( new String [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } ) 
+                );
 
             MetadataTreeNode res = depBuilder.resolveConflictsAsTree( scope, artifacts, inclusions, exclusions );
             

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Tue Apr  7 15:29:44 2009
@@ -142,8 +142,8 @@
             _defaultRoot.mkdirs();
             _defaultRoot.deleteOnExit();
             
-            if( LOG.isWarnEnabled() )
-                LOG.warn( LANG.getMessage( "default.root", _defaultRoot.getCanonicalPath() ) );
+            if( LOG.isDebugEnabled() )
+                LOG.debug( LANG.getMessage( "default.root", _defaultRoot.getCanonicalPath() ) );
         }
         catch ( IOException e )
         {
@@ -1115,6 +1115,10 @@
     {
 //        if( _transport != null )
 //            _transport.stop();
+        
+        if( _defaultRoot != null )
+            FileUtil.delete( _defaultRoot );
+        _defaultRoot = null;
     }
 
     public String[] getProtocols()

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java Tue Apr  7 15:29:44 2009
@@ -20,8 +20,11 @@
 
 import java.io.File;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Configurable;
+
 /**
  * general utility helpers
  *
@@ -87,4 +90,17 @@
        
        return (int)(Math.round( sz / 1024.))+" kb";
    }
+   
+   public static Map<String,String> mapOf( String [][] entries )
+   {
+       if( entries == null )
+           return null;
+       
+       Map<String,String> map = new HashMap<String, String>( entries.length );
+       
+       for( String [] kv : entries )
+           map.put( kv[0], kv[1] );
+       
+       return map;
+   }
 }