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/21 04:09:21 UTC

[1/3] maven-resolver git commit: [MRESOLVER-12] Addition of unit tests for the various DependencySelector implementations to test things are working as documented.

Repository: maven-resolver
Updated Branches:
  refs/heads/master 792768882 -> 1a3831df5


[MRESOLVER-12] Addition of unit tests for the various DependencySelector implementations to test things are working as documented.


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

Branch: refs/heads/master
Commit: 65e1e5f46e9e47953aead20a9636d1378f1d6400
Parents: 7927688
Author: Christian Schulte <sc...@apache.org>
Authored: Wed Dec 21 03:12:28 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Wed Dec 21 03:12:28 2016 +0100

----------------------------------------------------------------------
 .../impl/DefaultDependencyCollectorTest.java    | 219 +++++++++----------
 .../artifact-descriptions/managed/gid_0_ver.ini |   4 -
 .../managed/gid_1_managed-by-request.ini        |   4 -
 .../artifact-descriptions/managed/gid_1_ver.ini |   4 -
 .../managed/gid_2_managed-by-0.ini              |   4 -
 .../managed/gid_3_managed-by-1.ini              |   4 -
 .../managed/gid_4_managed-by-2.ini              |   2 -
 .../managed/gid_5_managed-by-3.ini              |   1 -
 .../managed/gid_direct_ver.ini                  |   5 +
 .../managed/gid_root_ver.ini                    |   5 +
 .../gid_transitive-1_managed-by-root.ini        |   5 +
 .../gid_transitive-2_managed-by-direct.ini      |   5 +
 ...gid_transitive-3_managed-by-transitive-1.ini |   4 +
 ...gid_transitive-4_managed-by-transitive-2.ini |   1 +
 .../managed/management-tree.txt                 |  12 +-
 .../managed/pom-management-tree.txt             |   7 -
 .../selection/optional/all-nodes.txt            |   7 +-
 .../selection/optional/gid_direct_ver.ini       |   2 +-
 .../selection/optional/gid_root_ver.ini         |   2 +
 .../selection/optional/gid_transitive-1_ver.ini |   2 +
 .../selection/optional/gid_transitive-2_ver.ini |   1 +
 .../optional/gid_transitive-of-direct_ver.ini   |   2 -
 ...d_transitive-of-transitive-of-direct_ver.ini |   1 -
 .../optional-transitive-exclusion-tree.txt      |   2 +
 ...al-transitive-nodes-of-direct-dependency.txt |   1 -
 ...without-optional-transitive-nodes-of-pom.txt |   2 -
 .../selection/scope/all-nodes-of-pom.txt        |   5 -
 .../selection/scope/all-nodes.txt               |   8 +-
 .../selection/scope/gid_direct_ver.ini          |   2 +-
 .../selection/scope/gid_root_ver.ini            |   2 +
 .../selection/scope/gid_transitive-1_ver.ini    |   2 +
 .../selection/scope/gid_transitive-2_ver.ini    |   1 +
 .../scope/gid_transitive-of-direct_ver.ini      |   2 -
 ...d_transitive-of-transitive-of-direct_ver.ini |   2 -
 ...f-transitive-of-transitive-of-direct_ver.ini |   1 -
 .../scope/transitive-1-exclusion-tree.txt       |   2 +
 .../scope/transitive-2-exclusion-tree.txt       |   3 +
 ...ransitive-of-direct-scope-exclusion-tree.txt |   1 -
 ...ransitive-of-direct-scope-exclusion-tree.txt |   2 -
 ...ransitive-of-direct-scope-exclusion-tree.txt |   3 -
 40 files changed, 164 insertions(+), 180 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/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 b9832fc..d0ddc6a 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
@@ -44,6 +44,7 @@ import org.eclipse.aether.collection.DependencyCollectionException;
 import org.eclipse.aether.collection.DependencyManagement;
 import org.eclipse.aether.collection.DependencyManager;
 import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DefaultDependencyNode;
 import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyCycle;
 import org.eclipse.aether.graph.DependencyNode;
@@ -116,11 +117,6 @@ public class DefaultDependencyCollectorTest
         assertEqualSubtree( expected, actual, new LinkedList<DependencyNode>() );
     }
 
-    private static void assertEqualArtifactSubtree( DependencyNode expected, DependencyNode actual )
-    {
-        assertEqualArtifactSubtree( expected, actual, new LinkedList<DependencyNode>() );
-    }
-
     private static void assertEqualSubtree( DependencyNode expected, DependencyNode actual,
                                             LinkedList<DependencyNode> parents )
     {
@@ -154,39 +150,6 @@ public class DefaultDependencyCollectorTest
         parents.removeLast();
     }
 
-    private static void assertEqualArtifactSubtree( DependencyNode expected, DependencyNode actual,
-                                                    LinkedList<DependencyNode> parents )
-    {
-        assertEquals( "path: " + parents, expected.getArtifact(), actual.getArtifact() );
-
-        if ( actual.getArtifact() != null )
-        {
-            Artifact artifact = actual.getArtifact();
-            for ( DependencyNode parent : parents )
-            {
-                if ( parent.getArtifact() != null && artifact.equals( parent.getArtifact() ) )
-                {
-                    return;
-                }
-            }
-        }
-
-        parents.addLast( expected );
-
-        assertEquals( "path: " + parents + ", expected: " + expected.getChildren() + ", actual: "
-                          + actual.getChildren(), expected.getChildren().size(), actual.getChildren().size() );
-
-        Iterator<DependencyNode> iterator1 = expected.getChildren().iterator();
-        Iterator<DependencyNode> iterator2 = actual.getChildren().iterator();
-
-        while ( iterator1.hasNext() )
-        {
-            assertEqualArtifactSubtree( iterator1.next(), iterator2.next(), parents );
-        }
-
-        parents.removeLast();
-    }
-
     private Dependency dep( DependencyNode root, int... coords )
     {
         return path( root, coords ).getDependency();
@@ -532,25 +495,24 @@ public class DefaultDependencyCollectorTest
         collector.setArtifactDescriptorReader( newReader( "managed/" ) );
         parser = new DependencyGraphParser( "artifact-descriptions/managed/" );
         session.setDependencyManager( new TransitiveDependencyManager() );
-        final Dependency root = newDep( "gid:0:ext:ver" );
+        final Dependency root = newDep( "gid:root:ext:ver", "compile" );
         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" ) );
+        request.addManagedDependency( newDep( "gid:root:ext:must-retain-core-management" ) );
         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() );
+        final DependencyNode expectedTree = parser.parseResource( "management-tree.txt" );
+        assertEqualSubtree( expectedTree, result.getRoot() );
+
+        // Same test for root artifact (POM) request.
+        final CollectRequest rootArtifactRequest = new CollectRequest();
+        rootArtifactRequest.setRepositories( Arrays.asList( repository ) );
+        rootArtifactRequest.setRootArtifact( new DefaultArtifact( "gid:root:ext:ver" ) );
+        rootArtifactRequest.addDependency( newDep( "gid:direct:ext:ver", "compile" ) );
+        rootArtifactRequest.addManagedDependency( newDep( "gid:root:ext:must-retain-core-management" ) );
+        rootArtifactRequest.addManagedDependency( newDep( "git:direct:ext:must-retain-core-management" ) );
+        rootArtifactRequest.addManagedDependency( newDep( "gid:transitive-1:ext:managed-by-root" ) );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertEqualSubtree( expectedTree, this.toDependencyResult( result.getRoot(), "compile", null ) );
     }
 
     @Test
@@ -705,13 +667,15 @@ public class DefaultDependencyCollectorTest
     {
         collector.setArtifactDescriptorReader( newReader( "selection/scope/" ) );
         parser = new DependencyGraphParser( "artifact-descriptions/selection/scope/" );
+        session.setDependencySelector( null );
 
-        final Dependency root = newDep( "gid:direct:ext:ver", "direct-scope" );
-        CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+        final DependencyNode allNodes = parser.parseResource( "all-nodes.txt" );
+        final DependencyNode transitive1ExclusionTree = parser.parseResource( "transitive-1-exclusion-tree.txt" );
+        final DependencyNode transitive2ExclusionTree = parser.parseResource( "transitive-2-exclusion-tree.txt" );
+        final Dependency root = newDep( "gid:root:ext:ver", "root-scope" );
+        final CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
         CollectResult result = collector.collectDependencies( session, request );
-
-        DependencyNode expected = parser.parseResource( "all-nodes.txt" );
-        assertEqualSubtree( expected, result.getRoot() );
+        assertEqualSubtree( allNodes, result.getRoot() );
 
         /*
          A dependency selector that filters transitive dependencies based on their scope. Direct dependencies are always
@@ -719,60 +683,67 @@ public class DefaultDependencyCollectorTest
          */
         // Include all.
         this.session.setDependencySelector( new ScopeDependencySelector() );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
         result = collector.collectDependencies( session, request );
+        assertEqualSubtree( allNodes, result.getRoot() );
 
-        assertEqualSubtree( expected, result.getRoot() );
+        // Exclude root scope equals include all as the root is always included.
+        this.session.setDependencySelector( new ScopeDependencySelector( "root-scope" ) );
+        result = collector.collectDependencies( session, request );
+        assertEqualSubtree( allNodes, result.getRoot() );
 
         // Exclude direct scope equals include all as direct dependencies are always included.
         this.session.setDependencySelector( new ScopeDependencySelector( "direct-scope" ) );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
         result = collector.collectDependencies( session, request );
-
-        assertEqualSubtree( expected, result.getRoot() );
+        assertEqualSubtree( allNodes, result.getRoot() );
 
         // Exclude scope of transitive of direct.
-        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-of-direct-scope" ) );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
+        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-1-scope" ) );
         result = collector.collectDependencies( session, request );
-
-        expected = parser.parseResource( "transitive-of-direct-scope-exclusion-tree.txt" );
-        assertEqualSubtree( expected, result.getRoot() );
+        assertEqualSubtree( transitive1ExclusionTree, result.getRoot() );
 
         // Exclude scope of transitive of transitive of direct dependency.
-        expected = parser.parseResource( "transitive-of-transitive-of-direct-scope-exclusion-tree.txt" );
-        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-of-transitive-of-direct-scope" ) );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
+        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-2-scope" ) );
         result = collector.collectDependencies( session, request );
+        assertEqualSubtree( transitive2ExclusionTree, result.getRoot() );
 
-        assertEqualSubtree( expected, result.getRoot() );
+        // Same test as above but with root artifact instead of root dependency.
+        this.session.setDependencySelector( null );
+        final CollectRequest rootArtifactRequest = new CollectRequest();
+        rootArtifactRequest.setRootArtifact( new DefaultArtifact( "gid:root:ext:ver" ) );
+        rootArtifactRequest.addDependency( newDep( "gid:direct:ext:ver", "direct-scope" ) );
+        rootArtifactRequest.setRepositories( Arrays.asList( repository ) );
 
-        // Exclude scope of transitive of transitive of direct dependency.
-        expected = parser.parseResource( "transitive-of-transitive-of-transitive-of-direct-scope-exclusion-tree.txt" );
-        this.session.setDependencySelector(
-            new ScopeDependencySelector( "transitive-of-transitive-of-transitive-of-direct-scope" ) );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
-        result = collector.collectDependencies( session, request );
-
-        assertEqualSubtree( expected, result.getRoot() );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( allNodes, this.toDependencyResult( result.getRoot(), "root-scope", null ) );
 
-        // Ensure direct dependencies are correctly detected for root artifact (POM) requests.
-        expected = parser.parseResource( "all-nodes-of-pom.txt" );
+        /*
+         A dependency selector that filters transitive dependencies based on their scope. Direct dependencies are always
+         included regardless of their scope.
+         */
+        // Include all.
+        this.session.setDependencySelector( new ScopeDependencySelector() );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( allNodes, this.toDependencyResult( result.getRoot(), "root-scope", null ) );
 
+        // Exclude direct scope equals include all as direct dependencies are always included.
         this.session.setDependencySelector( new ScopeDependencySelector( "direct-scope" ) );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( allNodes, this.toDependencyResult( result.getRoot(), "root-scope", null ) );
 
-        request = new CollectRequest();
-        request.addDependency( root );
-        request.setRootArtifact( new DefaultArtifact( "gid:pom:ext:ver" ) );
-        request.setRepositories( Arrays.asList( repository ) );
-        result = collector.collectDependencies( session, request );
+        // Exclude scope of transitive of direct.
+        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-1-scope" ) );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( transitive1ExclusionTree, this.toDependencyResult( result.getRoot(), "root-scope", null ) );
 
-        assertEqualArtifactSubtree( expected, result.getRoot() );
+        // Exclude scope of transitive of transitive of direct dependency.
+        this.session.setDependencySelector( new ScopeDependencySelector( "transitive-2-scope" ) );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( transitive2ExclusionTree, this.toDependencyResult( result.getRoot(), "root-scope", null ) );
     }
 
     @Test
@@ -781,36 +752,58 @@ public class DefaultDependencyCollectorTest
     {
         collector.setArtifactDescriptorReader( newReader( "selection/optional/" ) );
         parser = new DependencyGraphParser( "artifact-descriptions/selection/optional/" );
+        session.setDependencySelector( null );
 
-        final Dependency root = newDep( "gid:direct:ext:ver", "direct-scope" ).setOptional( true );
+        final DependencyNode allNodes = parser.parseResource( "all-nodes.txt" );
+        final DependencyNode optionalTransitiveExclusionTree =
+            parser.parseResource( "optional-transitive-exclusion-tree.txt" );
 
-        CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+        final Dependency root = newDep( "gid:root:ext:ver", "root-scope" ).setOptional( true );
+        // No selector. Include all.
+        final CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
         CollectResult result = collector.collectDependencies( session, request );
+        assertEqualSubtree( allNodes, result.getRoot() );
 
-        DependencyNode expected = parser.parseResource( "all-nodes.txt" );
-        assertEqualSubtree( expected, result.getRoot() );
-
-        // Exclude optional transitive dependencies.
-        expected = parser.parseResource( "without-optional-transitive-nodes-of-direct-dependency.txt" );
+        // A dependency selector that excludes transitive optional dependencies.
         this.session.setDependencySelector( new OptionalDependencySelector() );
-
-        request = new CollectRequest( root, Arrays.asList( repository ) );
         result = collector.collectDependencies( session, request );
+        assertEqualSubtree( optionalTransitiveExclusionTree, result.getRoot() );
+
+        // Same test as above but with root artifact instead of root dependency.
+        this.session.setDependencySelector( null );
+        final Artifact rootArtifact = new DefaultArtifact( "gid:root:ext:ver" );
+        final CollectRequest rootArtifactRequest = new CollectRequest();
+        rootArtifactRequest.setRootArtifact( rootArtifact );
+        rootArtifactRequest.addDependency( newDep( "gid:direct:ext:ver", "direct-scope" ).setOptional( true ) );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( allNodes, this.toDependencyResult( result.getRoot(), "root-scope", true ) );
+
+        // A dependency selector that excludes transitive optional dependencies.
+        this.session.setDependencySelector( new OptionalDependencySelector() );
+        result = collector.collectDependencies( session, rootArtifactRequest );
+        assertNull( result.getRoot().getDependency() );
+        assertEqualSubtree( optionalTransitiveExclusionTree, this.toDependencyResult( result.getRoot(), "root-scope",
+                                                                                      true ) );
 
-        assertEqualSubtree( expected, result.getRoot() );
+    }
 
-        // Ensure direct dependencies are correctly detected for root artifact (POM) requests.
-        expected = parser.parseResource( "without-optional-transitive-nodes-of-pom.txt" );
+    private DependencyNode toDependencyResult( final DependencyNode root, final String rootScope,
+                                               final Boolean optional )
+    {
+        // Make the root artifact resultion result a dependency resolution result for the subtree check.
+        assertNull( "Expected root artifact resolution result.", root.getDependency() );
+        final DefaultDependencyNode defaultNode =
+            new DefaultDependencyNode( new Dependency( root.getArtifact(), rootScope ) );
 
-        this.session.setDependencySelector( new OptionalDependencySelector() );
+        defaultNode.setChildren( root.getChildren() );
 
-        request = new CollectRequest();
-        request.addDependency( root );
-        request.setRootArtifact( new DefaultArtifact( "gid:pom:ext:ver" ) );
-        request.setRepositories( Arrays.asList( repository ) );
-        result = collector.collectDependencies( session, request );
+        if ( optional != null )
+        {
+            defaultNode.setOptional( optional );
+        }
 
-        assertEqualArtifactSubtree( expected, result.getRoot() );
+        return defaultNode;
     }
 
     static class TestDependencyManager

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

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/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
deleted file mode 100644
index 805fd98..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_managed-by-request.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[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/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
deleted file mode 100644
index 805fd98..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[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/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
deleted file mode 100644
index e6cc9a6..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[dependencies]
-gid:3:ext:ver
-[manageddependencies]
-gid:4:ext:managed-by-2
\ No newline at end of file

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

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
deleted file mode 100644
index 990c928..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dependencies]
-gid:5:ext:ver

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
deleted file mode 100644
index 05ba453..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
+++ /dev/null
@@ -1 +0,0 @@
-[dependencies]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_direct_ver.ini
new file mode 100644
index 0000000..94ba9fb
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_direct_ver.ini
@@ -0,0 +1,5 @@
+[dependencies]
+gid:transitive-1:ext:ver
+[manageddependencies]
+gid:transitive-1:ext:must-retain-core-management
+gid:transitive-2:ext:managed-by-direct
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_root_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_root_ver.ini
new file mode 100644
index 0000000..9557bd8
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_root_ver.ini
@@ -0,0 +1,5 @@
+[dependencies]
+gid:direct:ext:ver
+[manageddependencies]
+git:direct:ext:must-retain-core-management
+gid:transitive-1:ext:managed-by-root
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-1_managed-by-root.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-1_managed-by-root.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-1_managed-by-root.ini
new file mode 100644
index 0000000..8fd9f0d
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-1_managed-by-root.ini
@@ -0,0 +1,5 @@
+[dependencies]
+gid:transitive-2:ext:ver
+[manageddependencies]
+gid:transitive-2:ext:must-retain-core-management
+gid:transitive-3:ext:managed-by-transitive-1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-2_managed-by-direct.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-2_managed-by-direct.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-2_managed-by-direct.ini
new file mode 100644
index 0000000..96cc8f5
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-2_managed-by-direct.ini
@@ -0,0 +1,5 @@
+[dependencies]
+gid:transitive-3:ext:ver
+[manageddependencies]
+gid:transitive-3:ext:must-retain-core-management
+gid:transitive-4:ext:managed-by-transitive-2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-3_managed-by-transitive-1.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-3_managed-by-transitive-1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-3_managed-by-transitive-1.ini
new file mode 100644
index 0000000..2b8f3cf
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-3_managed-by-transitive-1.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:transitive-4:ext:ver
+[manageddependencies]
+gid:transitive-4:ext:must-retain-core-management

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-4_managed-by-transitive-2.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-4_managed-by-transitive-2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-4_managed-by-transitive-2.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/gid_transitive-4_managed-by-transitive-2.ini
@@ -0,0 +1 @@
+[dependencies]

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/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 626d1a9..1371426 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,6 +1,6 @@
-gid:0:ext:ver
-+- 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
+gid:root:ext:ver compile
++- gid:direct:ext:ver compile
+   +- gid:transitive-1:ext:managed-by-root compile
+      +- gid:transitive-2:ext:managed-by-direct compile
+         +- gid:transitive-3:ext:managed-by-transitive-1 compile
+            +- gid:transitive-4:ext:managed-by-transitive-2 compile

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/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
deleted file mode 100644
index a7ca439..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/managed/pom-management-tree.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-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/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/all-nodes.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/all-nodes.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/all-nodes.txt
index 09369ce..89de14f 100644
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/all-nodes.txt
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/all-nodes.txt
@@ -1,3 +1,4 @@
-gid:direct:ext:ver direct-scope optional
-+- gid:transitive-of-direct:ext:ver transitive-of-direct-scope optional
-   +- gid:transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-direct-scope optional
+gid:root:ext:ver root-scope optional
++- gid:direct:ext:ver direct-scope optional
+   +- gid:transitive-1:ext:ver transitive-1-scope optional
+      +- gid:transitive-2:ext:ver transitive-2-scope optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct_ver.ini
index e1d9820..0bcf1f8 100644
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct_ver.ini
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct_ver.ini
@@ -1,2 +1,2 @@
 [dependencies]
-gid:transitive-of-direct:ext:ver:transitive-of-direct-scope:optional
+gid:transitive-1:ext:ver:transitive-1-scope:optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
new file mode 100644
index 0000000..a7e6ac1
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:direct:ext:ver:direct-scope:optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-1_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-1_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-1_ver.ini
new file mode 100644
index 0000000..7428741
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-1_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-2:ext:ver:transitive-2-scope:optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-2_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-2_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-2_ver.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-2_ver.ini
@@ -0,0 +1 @@
+[dependencies]

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-direct_ver.ini
deleted file mode 100644
index f6f95da..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-direct_ver.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dependencies]
-gid:transitive-of-transitive-of-direct:ext:ver:transitive-of-transitive-of-direct-scope:optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-transitive-of-direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-transitive-of-direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-transitive-of-direct_ver.ini
deleted file mode 100644
index 61a252c..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-transitive-of-direct_ver.ini
+++ /dev/null
@@ -1 +0,0 @@
-[dependencies]

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/optional-transitive-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/optional-transitive-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/optional-transitive-exclusion-tree.txt
new file mode 100644
index 0000000..34fa909
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/optional-transitive-exclusion-tree.txt
@@ -0,0 +1,2 @@
+gid:root:ext:ver root-scope optional
++- gid:direct:ext:ver direct-scope optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-direct-dependency.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-direct-dependency.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-direct-dependency.txt
deleted file mode 100644
index a3fde85..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-direct-dependency.txt
+++ /dev/null
@@ -1 +0,0 @@
-gid:direct:ext:ver direct-scope optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-pom.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-pom.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-pom.txt
deleted file mode 100644
index 8980da4..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/optional/without-optional-transitive-nodes-of-pom.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gid:pom:ext:ver
-+- gid:direct:ext:ver direct-scope optional

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes-of-pom.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes-of-pom.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes-of-pom.txt
deleted file mode 100644
index 8736318..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes-of-pom.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-gid:pom:ext:ver
-+- gid:direct:ext:ver direct-scope
-   +- gid:transitive-of-direct:ext:ver transitive-of-direct-scope
-      +- gid:transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-direct-scope
-         +- gid:transitive-of-transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-transitive-of-direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
index 670b4a4..8bec12e 100644
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
@@ -1,4 +1,4 @@
-gid:direct:ext:ver direct-scope
-+- gid:transitive-of-direct:ext:ver transitive-of-direct-scope
-   +- gid:transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-direct-scope
-      +- gid:transitive-of-transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-transitive-of-direct-scope
+gid:root:ext:ver root-scope
++- gid:direct:ext:ver direct-scope
+   +- gid:transitive-1:ext:ver transitive-1-scope
+      +- gid:transitive-2:ext:ver transitive-2-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct_ver.ini
index 8854230..aad5f7a 100644
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct_ver.ini
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct_ver.ini
@@ -1,2 +1,2 @@
 [dependencies]
-gid:transitive-of-direct:ext:ver:transitive-of-direct-scope
+gid:transitive-1:ext:ver:transitive-1-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
new file mode 100644
index 0000000..175e571
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:direct:ext:ver:direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-1_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-1_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-1_ver.ini
new file mode 100644
index 0000000..56b4533
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-1_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-2:ext:ver:transitive-2-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-2_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-2_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-2_ver.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-2_ver.ini
@@ -0,0 +1 @@
+[dependencies]

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-direct_ver.ini
deleted file mode 100644
index 179b9ec..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-direct_ver.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dependencies]
-gid:transitive-of-transitive-of-direct:ext:ver:transitive-of-transitive-of-direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-direct_ver.ini
deleted file mode 100644
index 0ce2903..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-direct_ver.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dependencies]
-gid:transitive-of-transitive-of-transitive-of-direct:ext:ver:transitive-of-transitive-of-transitive-of-direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-transitive-of-direct_ver.ini
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-transitive-of-direct_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-transitive-of-direct_ver.ini
deleted file mode 100644
index 61a252c..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-transitive-of-direct_ver.ini
+++ /dev/null
@@ -1 +0,0 @@
-[dependencies]

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-1-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-1-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-1-exclusion-tree.txt
new file mode 100644
index 0000000..509afac
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-1-exclusion-tree.txt
@@ -0,0 +1,2 @@
+gid:root:ext:ver root-scope
++- gid:direct:ext:ver direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-2-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-2-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-2-exclusion-tree.txt
new file mode 100644
index 0000000..b3b0563
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-2-exclusion-tree.txt
@@ -0,0 +1,3 @@
+gid:root:ext:ver root-scope
++- gid:direct:ext:ver direct-scope
+   +- gid:transitive-1:ext:ver transitive-1-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-direct-scope-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-direct-scope-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-direct-scope-exclusion-tree.txt
deleted file mode 100644
index d6bb90c..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-direct-scope-exclusion-tree.txt
+++ /dev/null
@@ -1 +0,0 @@
-gid:direct:ext:ver direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-direct-scope-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-direct-scope-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-direct-scope-exclusion-tree.txt
deleted file mode 100644
index 6c42274..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-direct-scope-exclusion-tree.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gid:direct:ext:ver direct-scope
-+- gid:transitive-of-direct:ext:ver transitive-of-direct-scope

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/65e1e5f4/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-transitive-of-direct-scope-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-transitive-of-direct-scope-exclusion-tree.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-transitive-of-direct-scope-exclusion-tree.txt
deleted file mode 100644
index ee70297..0000000
--- a/maven-resolver-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-transitive-of-direct-scope-exclusion-tree.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gid:direct:ext:ver direct-scope
-+- gid:transitive-of-direct:ext:ver transitive-of-direct-scope
-   +- gid:transitive-of-transitive-of-direct:ext:ver transitive-of-transitive-of-direct-scope


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

Posted by sc...@apache.org.
[MRESOLVER-10] New class 'TransitiveDependencyManager' supporting transitive dependency management.

o Updated to correctly decide a node is direct or transitive.


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

Branch: refs/heads/master
Commit: 1a3831df53cdbecc01caa39a792c3a94fd99d803
Parents: 9855af4
Author: Christian Schulte <sc...@apache.org>
Authored: Wed Dec 21 03:38:12 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Wed Dec 21 03:43:23 2016 +0100

----------------------------------------------------------------------
 .../manager/TransitiveDependencyManager.java    | 35 ++++++--------------
 1 file changed, 10 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/1a3831df/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 aa02d47..485f1d7 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
@@ -34,7 +34,7 @@ import org.eclipse.aether.graph.Exclusion;
 import org.eclipse.aether.util.artifact.JavaScopes;
 
 /**
- * A dependency manager supporting transitive dependency management.
+ * A dependency manager managing transitive dependencies supporting transitive dependency management.
  *
  * @author Christian Schulte
  * @since 1.2.0
@@ -53,7 +53,7 @@ public final class TransitiveDependencyManager
 
     private final Map<Object, Collection<Exclusion>> managedExclusions;
 
-    private final boolean transitive;
+    private final int depth;
 
     private int hashCode;
 
@@ -62,12 +62,12 @@ public final class TransitiveDependencyManager
      */
     public TransitiveDependencyManager()
     {
-        this( false, Collections.<Object, String>emptyMap(), Collections.<Object, String>emptyMap(),
+        this( 0, Collections.<Object, String>emptyMap(), Collections.<Object, String>emptyMap(),
               Collections.<Object, Boolean>emptyMap(), Collections.<Object, String>emptyMap(),
               Collections.<Object, Collection<Exclusion>>emptyMap() );
     }
 
-    private TransitiveDependencyManager( final boolean transitive,
+    private TransitiveDependencyManager( final int depth,
                                          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.transitive = transitive;
+        this.depth = depth;
         this.managedVersions = managedVersions;
         this.managedScopes = managedScopes;
         this.managedOptionals = managedOptionals;
@@ -152,24 +152,9 @@ public final class TransitiveDependencyManager
             }
         }
 
-        TransitiveDependencyManager child = null;
+        return new TransitiveDependencyManager( this.depth + 1, versions, scopes, optionals, localPaths,
+                                                exclusions );
 
-        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 )
@@ -178,7 +163,7 @@ public final class TransitiveDependencyManager
 
         Object key = getKey( dependency.getArtifact() );
 
-        if ( this.transitive )
+        if ( this.depth >= 2 )
         {
             String version = managedVersions.get( key );
             if ( version != null )
@@ -265,7 +250,7 @@ public final class TransitiveDependencyManager
         if ( equal )
         {
             final TransitiveDependencyManager that = (TransitiveDependencyManager) obj;
-            return this.transitive == that.transitive
+            return this.depth == that.depth
                        && this.managedVersions.equals( that.managedVersions )
                        && this.managedScopes.equals( that.managedScopes )
                        && this.managedOptionals.equals( that.managedOptionals )
@@ -282,7 +267,7 @@ public final class TransitiveDependencyManager
         if ( this.hashCode == 0 )
         {
             int hash = 17;
-            hash = hash * 31 + ( (Boolean) this.transitive ).hashCode();
+            hash = hash * 31 + this.depth;
             hash = hash * 31 + this.managedVersions.hashCode();
             hash = hash * 31 + this.managedScopes.hashCode();
             hash = hash * 31 + this.managedOptionals.hashCode();


[2/3] maven-resolver git commit: [MRESOLVER-8] ScopeDependencySelector incorrectly de-selects direct dependencies.

Posted by sc...@apache.org.
[MRESOLVER-8] ScopeDependencySelector incorrectly de-selects direct dependencies.

o Reverted any changes to the 'OptionalDependencySelector' to match release 1.0.2.v20150114.
o Updated class 'ScopeDependencySelector' to correctly decide a node is direct vs. transitive.


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

Branch: refs/heads/master
Commit: 9855af4fbd6bb0f64750d27b2eee2e03b25b58ba
Parents: 65e1e5f
Author: Christian Schulte <sc...@apache.org>
Authored: Wed Dec 21 03:36:03 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Wed Dec 21 03:43:08 2016 +0100

----------------------------------------------------------------------
 .../selector/OptionalDependencySelector.java    | 31 ++++++----------
 .../graph/selector/ScopeDependencySelector.java | 39 ++++++++------------
 2 files changed, 27 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/9855af4f/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/OptionalDependencySelector.java
----------------------------------------------------------------------
diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/OptionalDependencySelector.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/OptionalDependencySelector.java
index d1a98dc..c377f24 100644
--- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/OptionalDependencySelector.java
+++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/OptionalDependencySelector.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.util.graph.selector;
  * 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
@@ -32,41 +32,34 @@ public final class OptionalDependencySelector
     implements DependencySelector
 {
 
-    private final boolean transitive;
+    private final int depth;
 
     /**
      * Creates a new selector to exclude optional transitive dependencies.
      */
     public OptionalDependencySelector()
     {
-        this( false );
+        depth = 0;
     }
 
-    private OptionalDependencySelector( final boolean transitive )
+    private OptionalDependencySelector( int depth )
     {
-        super();
-        this.transitive = transitive;
+        this.depth = depth;
     }
 
     public boolean selectDependency( Dependency dependency )
     {
-        return !this.transitive || !dependency.isOptional();
+        return depth < 2 || !dependency.isOptional();
     }
 
     public DependencySelector deriveChildSelector( DependencyCollectionContext context )
     {
-        OptionalDependencySelector child = this;
-
-        if ( context.getDependency() != null && !child.transitive )
-        {
-            child = new OptionalDependencySelector( true );
-        }
-        if ( context.getDependency() == null && child.transitive )
+        if ( depth >= 2 )
         {
-            child = new OptionalDependencySelector( false );
+            return this;
         }
 
-        return child;
+        return new OptionalDependencySelector( depth + 1 );
     }
 
     @Override
@@ -82,14 +75,14 @@ public final class OptionalDependencySelector
         }
 
         OptionalDependencySelector that = (OptionalDependencySelector) obj;
-        return this.transitive == that.transitive;
+        return depth == that.depth;
     }
 
     @Override
     public int hashCode()
     {
         int hash = getClass().hashCode();
-        hash = hash * 31 + ( ( (Boolean) this.transitive ).hashCode() );
+        hash = hash * 31 + depth;
         return hash;
     }
 

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/9855af4f/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
----------------------------------------------------------------------
diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
index b2ce23a..92db141 100644
--- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
+++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.util.graph.selector;
  * 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
@@ -24,7 +24,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.TreeSet;
-
 import org.eclipse.aether.collection.DependencyCollectionContext;
 import org.eclipse.aether.collection.DependencySelector;
 import org.eclipse.aether.graph.Dependency;
@@ -33,14 +32,14 @@ import org.eclipse.aether.graph.Dependency;
  * A dependency selector that filters transitive dependencies based on their scope. Direct dependencies are always
  * included regardless of their scope. <em>Note:</em> This filter does not assume any relationships between the scopes.
  * In particular, the filter is not aware of scopes that logically include other scopes.
- * 
+ *
  * @see Dependency#getScope()
  */
 public final class ScopeDependencySelector
     implements DependencySelector
 {
 
-    private final boolean transitive;
+    private final int depth;
 
     private final Collection<String> included;
 
@@ -48,14 +47,14 @@ public final class ScopeDependencySelector
 
     /**
      * Creates a new selector using the specified includes and excludes.
-     * 
+     *
      * @param included The set of scopes to include, may be {@code null} or empty to include any scope.
      * @param excluded The set of scopes to exclude, may be {@code null} or empty to exclude no scope.
      */
     public ScopeDependencySelector( Collection<String> included, Collection<String> excluded )
     {
         super();
-        this.transitive = false;
+        this.depth = 0;
         this.included = clone( included );
         this.excluded = clone( excluded );
     }
@@ -82,7 +81,7 @@ public final class ScopeDependencySelector
 
     /**
      * Creates a new selector using the specified excludes.
-     * 
+     *
      * @param excluded The set of scopes to exclude, may be {@code null} or empty to exclude no scope.
      */
     public ScopeDependencySelector( String... excluded )
@@ -90,17 +89,17 @@ public final class ScopeDependencySelector
         this( null, ( excluded != null ) ? Arrays.asList( excluded ) : null );
     }
 
-    private ScopeDependencySelector( boolean transitive, Collection<String> included, Collection<String> excluded )
+    private ScopeDependencySelector( int depth, Collection<String> included, Collection<String> excluded )
     {
         super();
-        this.transitive = transitive;
+        this.depth = depth;
         this.included = included;
         this.excluded = excluded;
     }
 
     public boolean selectDependency( Dependency dependency )
     {
-        return !this.transitive
+        return this.depth < 2
                    || ( ( included == null || included.contains( dependency.getScope() ) )
                         && ( excluded == null || !excluded.contains( dependency.getScope() ) ) );
 
@@ -108,18 +107,10 @@ public final class ScopeDependencySelector
 
     public DependencySelector deriveChildSelector( DependencyCollectionContext context )
     {
-        ScopeDependencySelector child = this;
-
-        if ( context.getDependency() != null && !child.transitive )
-        {
-            child = new ScopeDependencySelector( true, this.included, this.excluded );
-        }
-        if ( context.getDependency() == null && child.transitive )
-        {
-            child = new ScopeDependencySelector( false, this.included, this.excluded );
-        }
+        return this.depth >= 2
+                   ? this
+                   : new ScopeDependencySelector( this.depth + 1, this.included, this.excluded );
 
-        return child;
     }
 
     @Override
@@ -135,7 +126,7 @@ public final class ScopeDependencySelector
         }
 
         ScopeDependencySelector that = (ScopeDependencySelector) obj;
-        return this.transitive == that.transitive && eq( included, that.included ) && eq( excluded, that.excluded );
+        return this.depth == that.depth && eq( included, that.included ) && eq( excluded, that.excluded );
     }
 
     private static <T> boolean eq( T o1, T o2 )
@@ -147,7 +138,7 @@ public final class ScopeDependencySelector
     public int hashCode()
     {
         int hash = 17;
-        hash = hash * 31 + ( ( (Boolean) this.transitive ).hashCode() );
+        hash = hash * 31 + this.depth;
         hash = hash * 31 + ( included != null ? included.hashCode() : 0 );
         hash = hash * 31 + ( excluded != null ? excluded.hashCode() : 0 );
         return hash;