This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


The following commit(s) were added to refs/heads/master by this push:
     new bcb81f42 [MRESOLVER-462] Classic Transitive depMgr (#403)
bcb81f42 is described below

commit bcb81f4286448e60fbc6ceb109adffafb21bd359
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Dec 20 13:40:11 2023 +0100

    [MRESOLVER-462] Classic Transitive depMgr (#403)
    
    Open up transitive mode for Classic.
    
    ---
    
    https://issues.apache.org/jira/browse/MRESOLVER-462
---
 .../graph/manager/ClassicDependencyManager.java    | 15 +++-
 .../util/graph/manager/DependencyManagerTest.java  | 82 ++++++++++++++++++++--
 2 files changed, 89 insertions(+), 8 deletions(-)

diff --git 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java
 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java
index afde36ed..d850fe80 100644
--- 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java
+++ 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java
@@ -35,7 +35,20 @@ public final class ClassicDependencyManager extends 
AbstractDependencyManager {
      * Creates a new dependency manager without any management information.
      */
     public ClassicDependencyManager() {
-        super(2, 2);
+        this(false);
+    }
+
+    /**
+     * Creates a new dependency manager without any management information.
+     *
+     * @param transitive If true, this manager will collect (derive) until 
last node on graph. If false,
+     *                   it will work as original Maven 3 "classic" dependency 
manager, collect only up to
+     *                   depth of 2.
+     *
+     * @since 2.0.0
+     */
+    public ClassicDependencyManager(boolean transitive) {
+        super(transitive ? Integer.MAX_VALUE : 2, 2);
     }
 
     @SuppressWarnings("checkstyle:ParameterNumber")
diff --git 
a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java
 
b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java
index f2aab830..b715a7d0 100644
--- 
a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java
+++ 
b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java
@@ -44,8 +44,12 @@ public class DependencyManagerTest {
 
     private final Artifact A2 = new DefaultArtifact("test", "a", "", "2");
 
+    private final Artifact B = new DefaultArtifact("test", "b", "", "");
+
     private final Artifact B1 = new DefaultArtifact("test", "b", "", "1");
 
+    private final Artifact B2 = new DefaultArtifact("test", "b", "", "2");
+
     private final Artifact C1 = new DefaultArtifact("test", "c", "", "1");
 
     private final Artifact D1 = new DefaultArtifact("test", "d", "", "1");
@@ -75,7 +79,7 @@ public class DependencyManagerTest {
         // depth=1: only exclusion applied, nothing more
         manager = manager.deriveChildManager(newContext(
                 new Dependency(A2, null, null),
-                new Dependency(B1, null, true),
+                new Dependency(B, null, true),
                 new Dependency(C1, "newscope", null),
                 new Dependency(D1, null, null, 
Collections.singleton(EXCLUSION))));
         mngt = manager.manageDependency(new Dependency(A1, null));
@@ -90,14 +94,15 @@ public class DependencyManagerTest {
         mngt = manager.manageDependency(new Dependency(E1, null));
         assertNull(mngt);
 
-        // depth=2: all applied
-        manager = manager.deriveChildManager(newContext());
+        // depth=2: all applied (new ones ignored)
+        manager = manager.deriveChildManager(newContext(new Dependency(B2, 
null, null)));
         mngt = manager.manageDependency(new Dependency(A1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getVersion(), A2.getVersion());
         mngt = manager.manageDependency(new Dependency(B1, null));
         assertNotNull(mngt);
         assertEquals(Boolean.TRUE, mngt.getOptional());
+        assertNull(mngt.getVersion());
         mngt = manager.manageDependency(new Dependency(C1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getScope(), "newscope");
@@ -125,6 +130,66 @@ public class DependencyManagerTest {
         assertNull(mngt);
     }
 
+    @Test
+    void testClassicTransitive() {
+        DependencyManager manager = new ClassicDependencyManager(true);
+        DependencyManagement mngt;
+
+        // depth=1: only exclusion applied, nothing more
+        manager = manager.deriveChildManager(newContext(
+                new Dependency(A2, null, null),
+                new Dependency(B, null, true),
+                new Dependency(C1, "newscope", null),
+                new Dependency(D1, null, null, 
Collections.singleton(EXCLUSION))));
+        mngt = manager.manageDependency(new Dependency(A1, null));
+        assertNull(mngt);
+        mngt = manager.manageDependency(new Dependency(B1, null));
+        assertNull(mngt);
+        mngt = manager.manageDependency(new Dependency(C1, null));
+        assertNull(mngt);
+        mngt = manager.manageDependency(new Dependency(D1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
+        mngt = manager.manageDependency(new Dependency(E1, null));
+        assertNull(mngt);
+
+        // depth=2: all applied (new ones ignored)
+        manager = manager.deriveChildManager(newContext(new Dependency(B2, 
null, null)));
+        mngt = manager.manageDependency(new Dependency(A1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getVersion(), A2.getVersion());
+        mngt = manager.manageDependency(new Dependency(B1, null));
+        assertNotNull(mngt);
+        assertEquals(Boolean.TRUE, mngt.getOptional());
+        assertNull(mngt.getVersion());
+        mngt = manager.manageDependency(new Dependency(C1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getScope(), "newscope");
+        mngt = manager.manageDependency(new Dependency(D1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
+        mngt = manager.manageDependency(new Dependency(E1, null));
+        assertNull(mngt);
+
+        // depth=3: all existing applied, new depMgt processed, carried on
+        manager = manager.deriveChildManager(newContext(new Dependency(E2, 
null, null)));
+        mngt = manager.manageDependency(new Dependency(A1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getVersion(), A2.getVersion());
+        mngt = manager.manageDependency(new Dependency(B1, null));
+        assertNotNull(mngt);
+        assertEquals(Boolean.TRUE, mngt.getOptional());
+        mngt = manager.manageDependency(new Dependency(C1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getScope(), "newscope");
+        mngt = manager.manageDependency(new Dependency(D1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
+        mngt = manager.manageDependency(new Dependency(E1, null));
+        assertNotNull(mngt);
+        assertEquals(mngt.getVersion(), E2.getVersion());
+    }
+
     @Test
     void testTransitive() {
         DependencyManager manager = new TransitiveDependencyManager();
@@ -133,7 +198,7 @@ public class DependencyManagerTest {
         // depth=1: only exclusion applied, nothing more
         manager = manager.deriveChildManager(newContext(
                 new Dependency(A2, null, null),
-                new Dependency(B1, null, true),
+                new Dependency(B, null, true),
                 new Dependency(C1, "newscope", null),
                 new Dependency(D1, null, null, 
Collections.singleton(EXCLUSION))));
         mngt = manager.manageDependency(new Dependency(A1, null));
@@ -149,13 +214,14 @@ public class DependencyManagerTest {
         assertNull(mngt);
 
         // depth=2: all applied
-        manager = manager.deriveChildManager(newContext());
+        manager = manager.deriveChildManager(newContext(new Dependency(B2, 
null, null)));
         mngt = manager.manageDependency(new Dependency(A1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getVersion(), A2.getVersion());
         mngt = manager.manageDependency(new Dependency(B1, null));
         assertNotNull(mngt);
         assertEquals(Boolean.TRUE, mngt.getOptional());
+        assertEquals(B2.getVersion(), mngt.getVersion());
         mngt = manager.manageDependency(new Dependency(C1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getScope(), "newscope");
@@ -192,7 +258,7 @@ public class DependencyManagerTest {
         // depth=1: all applied
         manager = manager.deriveChildManager(newContext(
                 new Dependency(A2, null, null),
-                new Dependency(B1, null, true),
+                new Dependency(B, null, true),
                 new Dependency(C1, "newscope", null),
                 new Dependency(D1, null, null, 
Collections.singleton(EXCLUSION))));
         mngt = manager.manageDependency(new Dependency(A1, null));
@@ -201,6 +267,7 @@ public class DependencyManagerTest {
         mngt = manager.manageDependency(new Dependency(B1, null));
         assertNotNull(mngt);
         assertEquals(Boolean.TRUE, mngt.getOptional());
+        assertNull(mngt.getVersion());
         mngt = manager.manageDependency(new Dependency(C1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getScope(), "newscope");
@@ -211,13 +278,14 @@ public class DependencyManagerTest {
         assertNull(mngt);
 
         // depth=2: all applied
-        manager = manager.deriveChildManager(newContext());
+        manager = manager.deriveChildManager(newContext(new Dependency(B2, 
null, null)));
         mngt = manager.manageDependency(new Dependency(A1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getVersion(), A2.getVersion());
         mngt = manager.manageDependency(new Dependency(B1, null));
         assertNotNull(mngt);
         assertEquals(Boolean.TRUE, mngt.getOptional());
+        assertEquals(B2.getVersion(), mngt.getVersion());
         mngt = manager.manageDependency(new Dependency(C1, null));
         assertNotNull(mngt);
         assertEquals(mngt.getScope(), "newscope");

Reply via email to