Author: rfscholte
Date: Tue May  8 20:56:27 2012
New Revision: 1335761

URL: http://svn.apache.org/viewvc?rev=1335761&view=rev
Log:
Fix MENFORCER-118: DependencyConvergence gets better if it doesn't fail on 
snapshots of same baseVersion

Modified:
    
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
    
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java

Modified: 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
URL: 
http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java?rev=1335761&r1=1335760&r2=1335761&view=diff
==============================================================================
--- 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
 (original)
+++ 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
 Tue May  8 20:56:27 2012
@@ -51,7 +51,14 @@ public class DependencyConvergence
     private static Log log;
 
     private static I18N i18n;
+    
+    private boolean uniqueVersions; 
 
+    public void setUniqueVersions( boolean uniqueVersions )
+    {
+        this.uniqueVersions = uniqueVersions;
+    }
+    
     /**
      * Uses the {@link EnforcerRuleHelper} to populate the values of the
      * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, 
ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, 
ArtifactCollector)}
@@ -109,8 +116,8 @@ public class DependencyConvergence
                 i18n = (I18N) helper.getComponent( I18N.class );
             }
             DependencyNode node = getNode( helper );
-            MavenProject project = (MavenProject) helper.evaluate( 
"${project}" );
-            DependencyVersionMap visitor = new DependencyVersionMap( 
project.getArtifact().isRelease(), log );
+            DependencyVersionMap visitor = new DependencyVersionMap( log );
+            visitor.setUniqueVersions( uniqueVersions );
             node.accept( visitor );
             List<CharSequence> errorMsgs = new ArrayList<CharSequence>();
             errorMsgs.addAll( getConvergenceErrorMsgs( 
visitor.getConflictedVersionNumbers() ) );
@@ -123,10 +130,6 @@ public class DependencyConvergence
                 throw new EnforcerRuleException( "Failed while enforcing 
releasability the error(s) are " + errorMsgs );
             }
         }
-        catch ( ExpressionEvaluationException e )
-        {
-            throw new EnforcerRuleException( "Unable to lookup an expression " 
+ e.getLocalizedMessage(), e );
-        }
         catch ( ComponentLookupException e )
         {
             throw new EnforcerRuleException( "Unable to lookup a component " + 
e.getLocalizedMessage(), e );

Modified: 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
URL: 
http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java?rev=1335761&r1=1335760&r2=1335761&view=diff
==============================================================================
--- 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
 (original)
+++ 
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
 Tue May  8 20:56:27 2012
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.shared.dependency.tree.DependencyNode;
 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
@@ -31,41 +32,27 @@ import org.apache.maven.shared.dependenc
 public class DependencyVersionMap
     implements DependencyNodeVisitor
 {
-
-    private boolean demandReleasedVersions = false;
+    private Log log;
+    
+    private boolean uniqueVersions;
 
     private Map<String, List<DependencyNode>> idsToNode;
 
-    private List<DependencyNode> snapshots;
-
     public DependencyVersionMap( Log log )
     {
+        this.log = log;
         idsToNode = new HashMap<String, List<DependencyNode>>();
-        snapshots = new ArrayList<DependencyNode>();
     }
-
-    public DependencyVersionMap( boolean demandReleasedVersions, Log log )
+    
+    public void setUniqueVersions( boolean uniqueVersions )
     {
-        this( log );
-        this.demandReleasedVersions = demandReleasedVersions;
+        this.uniqueVersions = uniqueVersions;
     }
 
     public boolean visit( DependencyNode node )
     {
         addDependency( node );
-        if ( containsConflicts( node ) )
-        {
-            return false;
-        }
-        if ( demandReleasedVersions )
-        {
-            if ( node.getArtifact().isSnapshot() )
-            {
-                snapshots.add( node );
-                return false;
-            }
-        }
-        return true;
+        return !containsConflicts( node );
     }
 
     public boolean endVisit( DependencyNode node )
@@ -86,10 +73,6 @@ public class DependencyVersionMap
     public void addDependency( DependencyNode node )
     {
         String key = constructKey( node );
-        if ( node.getArtifact().isSnapshot() )
-        {
-            snapshots.add( node );
-        }
         List<DependencyNode> nodes = idsToNode.get( key );
         if ( nodes == null )
         {
@@ -98,10 +81,11 @@ public class DependencyVersionMap
         }
         nodes.add( node );
     }
-
-    public List<DependencyNode> getSnapshots()
+    
+    private String getVersion( Artifact artifact )
     {
-        return snapshots;
+        log.info( ArtifactUtils.versionlessKey( artifact ) + " " + 
artifact.getVersion() + " " + artifact.getBaseVersion() );
+        return uniqueVersions ? artifact.getVersion() : 
artifact.getBaseVersion(); 
     }
 
     private boolean containsConflicts( DependencyNode node )
@@ -121,11 +105,11 @@ public class DependencyVersionMap
         {
             if ( version == null )
             {
-                version = node.getArtifact().getVersion();
+                version = getVersion( node.getArtifact() );
             }
             else
             {
-                if ( version.compareTo( node.getArtifact().getVersion() ) != 0 
)
+                if ( version.compareTo( getVersion( node.getArtifact() ) ) != 
0 )
                 {
                     return true;
                 }


Reply via email to