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");