Author: markh Date: Tue Sep 18 09:08:23 2007 New Revision: 576964 URL: http://svn.apache.org/viewvc?rev=576964&view=rev Log: Fixed dependency management information for nodes that are also omitted for conflicts.
Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java?rev=576964&r1=576963&r2=576964&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java Tue Sep 18 09:08:23 2007 @@ -166,23 +166,7 @@ * Add the dependency management information cached in any prior manageArtifact calls, since includeArtifact * is always called after manageArtifact. */ - String premanagedVersion = (String) managedVersions.get( artifact.getId() ); - String premanagedScope = (String) managedScopes.get( artifact.getId() ); - if ( premanagedVersion != null || premanagedScope != null ) - { - if ( premanagedVersion != null ) - { - node.setPremanagedVersion( premanagedVersion ); - } - - if ( premanagedScope != null ) - { - node.setPremanagedScope( premanagedScope ); - } - - premanagedVersion = null; - premanagedScope = null; - } + flushDependencyManagement( node ); } } @@ -218,7 +202,11 @@ omittedNode.omitForConflict( kept ); - + /* + * Add the dependency management information cached in any prior manageArtifact calls, since omitForNearer + * is always called after manageArtifact. + */ + flushDependencyManagement( omittedNode ); DependencyNode keptNode = getNode( kept ); @@ -520,5 +508,35 @@ } return included; + } + + /** + * Updates the specified node with any dependency management information cached in prior <code>manageArtifact</code> + * calls. + * + * @param node + * the node to update + */ + private void flushDependencyManagement( DependencyNode node ) + { + Artifact artifact = node.getArtifact(); + String premanagedVersion = (String) managedVersions.get( artifact.getId() ); + String premanagedScope = (String) managedScopes.get( artifact.getId() ); + + if ( premanagedVersion != null || premanagedScope != null ) + { + if ( premanagedVersion != null ) + { + node.setPremanagedVersion( premanagedVersion ); + } + + if ( premanagedScope != null ) + { + node.setPremanagedScope( premanagedScope ); + } + + premanagedVersion = null; + premanagedScope = null; + } } } Modified: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java?rev=576964&r1=576963&r2=576964&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java Tue Sep 18 09:08:23 2007 @@ -463,6 +463,44 @@ assertDependencyTree( expectedRootNode, project ); } + + /** + * Tests building a tree for a project with a dependency that has conflicting versions and the version is also fixed + * in dependency management: + * + * <pre> + * g:p:t:1 + * +- g:a:t:1 + * \- g:b:t:1 + * \- (g:a:t:3 - version managed from 2; omitted for conflict with 1) + * </pre> + * + * @throws DependencyTreeBuilderException + * @throws ArtifactResolutionException + */ + public void testProjectWithManagedTransitiveDependencyVersionAndConflictDependencyVersion() throws DependencyTreeBuilderException, ArtifactResolutionException + { + Artifact projectArtifact = createArtifact( "g:p:t:1" ); + Artifact nearestArtifact = createArtifact( "g:a:t:1" ); + Artifact childArtifact = createArtifact( "g:b:t:1" ); + Artifact farthestArtifact = createArtifact( "g:a:t:2" ); + Artifact managedTransitiveArtifact = createArtifact( "g:a:t:3" ); + addArtifactMetadata( childArtifact, farthestArtifact ); + + MavenProject project = createProject( projectArtifact, new Artifact[] { nearestArtifact, childArtifact } ); + setManagedVersionMap( project, Collections.singleton( managedTransitiveArtifact ) ); + + DependencyNode expectedRootNode = createNode( "g:p:t:1" ); + DependencyNode nearestArtifactNode = createNode( "g:a:t:1" ); + expectedRootNode.addChild( nearestArtifactNode ); + DependencyNode childArtifactNode = createNode( "g:b:t:1" ); + expectedRootNode.addChild( childArtifactNode ); + DependencyNode managedTransitiveArtifactNode = createNode( "g:a:t:3", DependencyNode.OMITTED_FOR_CONFLICT, nearestArtifactNode.getArtifact() ); + managedTransitiveArtifactNode.setPremanagedVersion( "2" ); + childArtifactNode.addChild( managedTransitiveArtifactNode ); + + assertDependencyTree( expectedRootNode, project ); + } // TODO: reinstate when MNG-3089 fixed /*