You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2016/12/15 17:06:16 UTC

maven-resolver git commit: [MRESOLVER-10] New class 'TransitiveDependencyManager' supporting transitive dependency management.

Repository: maven-resolver
Updated Branches:
  refs/heads/master df4e96331 -> 2a3d91de5


[MRESOLVER-10] New class 'TransitiveDependencyManager' supporting transitive dependency management.

o Updated the 'TransitiveDependencyManager' to correctly detect direct dependencies
  (by applying the same logic as the selectors) correcting POM resolution requests.


Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/2a3d91de
Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/2a3d91de
Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/2a3d91de

Branch: refs/heads/master
Commit: 2a3d91de5d264d1908790029523ac0e2277f006d
Parents: df4e963
Author: Christian Schulte <sc...@apache.org>
Authored: Thu Dec 15 18:00:10 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Thu Dec 15 18:05:17 2016 +0100

----------------------------------------------------------------------
 .../impl/DefaultDependencyCollectorTest.java    | 13 ++++++++
 .../managed/gid_1_managed-by-request.ini        |  4 +++
 .../managed/management-tree.txt                 |  2 +-
 .../managed/pom-management-tree.txt             |  7 ++++
 .../manager/TransitiveDependencyManager.java    | 35 +++++++++++++++-----
 5 files changed, 51 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/2a3d91de/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
index b9d6c7b..b9832fc 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
@@ -534,10 +534,23 @@ public class DefaultDependencyCollectorTest
         session.setDependencyManager( new TransitiveDependencyManager() );
         final Dependency root = newDep( "gid:0:ext:ver" );
         CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+        request.addManagedDependency( newDep( "gid:0:ext:must-retain-model-builder-override" ) );
+        request.addManagedDependency( newDep( "gid:1:ext:managed-by-request" ) );
         CollectResult result = collector.collectDependencies( session, request );
 
         DependencyNode expected = parser.parseResource( "management-tree.txt" );
         assertEqualSubtree( expected, result.getRoot() );
+
+        // Ensure direct dependencies are correctly detected for root artifact (POM) requests.
+        request = new CollectRequest();
+        request.setRootArtifact( new DefaultArtifact( "gid:pom:ext:ver" ) );
+        request.setRepositories( Arrays.asList( repository ) );
+        request.addDependency( root.setScope( "compile" ) );
+        request.addManagedDependency( newDep( "gid:0:ext:must-retain-model-builder-override" ) );
+        request.addManagedDependency( newDep( "gid:1:ext:managed-by-request" ) );
+        result = collector.collectDependencies( session, request );
+        expected = parser.parseResource( "pom-management-tree.txt" );
+        assertEqualArtifactSubtree( expected, result.getRoot() );
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/2a3d91de/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_managed-by-request.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_managed-by-request.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_managed-by-request.ini
new file mode 100644
index 0000000..805fd98
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_managed-by-request.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:2:ext:ver
+[manageddependencies]
+gid:3:ext:managed-by-1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/2a3d91de/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
index 7307a19..626d1a9 100644
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
@@ -1,5 +1,5 @@
 gid:0:ext:ver
-+- gid:1:ext:ver compile
++- gid:1:ext:managed-by-request compile
    +- gid:2:ext:managed-by-0 compile
       +- gid:3:ext:managed-by-1 compile
          +- gid:4:ext:managed-by-2 compile

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/2a3d91de/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/pom-management-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/pom-management-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/pom-management-tree.txt
new file mode 100644
index 0000000..a7ca439
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/pom-management-tree.txt
@@ -0,0 +1,7 @@
+gid:pom:ext:ver
++- gid:0:ext:ver compile
+   +- gid:1:ext:managed-by-request compile
+      +- gid:2:ext:managed-by-0 compile
+         +- gid:3:ext:managed-by-1 compile
+            +- gid:4:ext:managed-by-2 compile
+               +- gid:5:ext:managed-by-3 compile

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/2a3d91de/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java
----------------------------------------------------------------------
diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java
index 4484aa5..aa02d47 100644
--- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java
+++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java
@@ -43,8 +43,6 @@ public final class TransitiveDependencyManager
     implements DependencyManager
 {
 
-    private final int depth;
-
     private final Map<Object, String> managedVersions;
 
     private final Map<Object, String> managedScopes;
@@ -55,6 +53,8 @@ public final class TransitiveDependencyManager
 
     private final Map<Object, Collection<Exclusion>> managedExclusions;
 
+    private final boolean transitive;
+
     private int hashCode;
 
     /**
@@ -62,12 +62,12 @@ public final class TransitiveDependencyManager
      */
     public TransitiveDependencyManager()
     {
-        this( 0, Collections.<Object, String>emptyMap(), Collections.<Object, String>emptyMap(),
+        this( false, Collections.<Object, String>emptyMap(), Collections.<Object, String>emptyMap(),
               Collections.<Object, Boolean>emptyMap(), Collections.<Object, String>emptyMap(),
               Collections.<Object, Collection<Exclusion>>emptyMap() );
     }
 
-    private TransitiveDependencyManager( final int depth,
+    private TransitiveDependencyManager( final boolean transitive,
                                          final Map<Object, String> managedVersions,
                                          final Map<Object, String> managedScopes,
                                          final Map<Object, Boolean> managedOptionals,
@@ -75,7 +75,7 @@ public final class TransitiveDependencyManager
                                          final Map<Object, Collection<Exclusion>> managedExclusions )
     {
         super();
-        this.depth = depth;
+        this.transitive = transitive;
         this.managedVersions = managedVersions;
         this.managedScopes = managedScopes;
         this.managedOptionals = managedOptionals;
@@ -152,7 +152,24 @@ public final class TransitiveDependencyManager
             }
         }
 
-        return new TransitiveDependencyManager( this.depth + 1, versions, scopes, optionals, localPaths, exclusions );
+        TransitiveDependencyManager child = null;
+
+        if ( context.getDependency() != null && !this.transitive )
+        {
+            child = new TransitiveDependencyManager( true, versions, scopes, optionals, localPaths, exclusions );
+        }
+        if ( context.getDependency() == null && this.transitive )
+        {
+            child = new TransitiveDependencyManager( false, versions, scopes, optionals, localPaths, exclusions );
+        }
+        if ( child == null )
+        {
+            child = new TransitiveDependencyManager( this.transitive, versions, scopes, optionals, localPaths,
+                                                     exclusions );
+
+        }
+
+        return child;
     }
 
     public DependencyManagement manageDependency( Dependency dependency )
@@ -161,7 +178,7 @@ public final class TransitiveDependencyManager
 
         Object key = getKey( dependency.getArtifact() );
 
-        if ( depth >= 2 )
+        if ( this.transitive )
         {
             String version = managedVersions.get( key );
             if ( version != null )
@@ -248,7 +265,7 @@ public final class TransitiveDependencyManager
         if ( equal )
         {
             final TransitiveDependencyManager that = (TransitiveDependencyManager) obj;
-            return this.depth == that.depth
+            return this.transitive == that.transitive
                        && this.managedVersions.equals( that.managedVersions )
                        && this.managedScopes.equals( that.managedScopes )
                        && this.managedOptionals.equals( that.managedOptionals )
@@ -265,7 +282,7 @@ public final class TransitiveDependencyManager
         if ( this.hashCode == 0 )
         {
             int hash = 17;
-            hash = hash * 31 + this.depth;
+            hash = hash * 31 + ( (Boolean) this.transitive ).hashCode();
             hash = hash * 31 + this.managedVersions.hashCode();
             hash = hash * 31 + this.managedScopes.hashCode();
             hash = hash * 31 + this.managedOptionals.hashCode();