You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/05/05 18:12:11 UTC

[maven-resolver] branch master updated: [MRESOLVER-256] Dependency tree is different between DF and BF strategies when a dependency package has no indirect dependencies

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

michaelo 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 2ea36519 [MRESOLVER-256] Dependency tree is different between DF and BF strategies when a dependency package has no indirect dependencies
2ea36519 is described below

commit 2ea36519a72079b9efa59c6278b15bfb01a53fb4
Author: hongbo.weihb <ho...@alibaba-inc.com>
AuthorDate: Thu May 5 15:27:18 2022 +0800

    [MRESOLVER-256] Dependency tree is different between DF and BF strategies when a dependency package has no indirect dependencies
    
    Signed-off-by: hongbo.weihb <ho...@alibaba-inc.com>
    
    This closes #172
---
 .../impl/collect/bf/BfDependencyCollector.java     | 10 ++++++++-
 .../impl/collect/bf/BfDependencyCollectorTest.java | 25 ++++++++++++++++++++++
 .../dependencies-empty/gid_a_ver.ini               |  4 ++++
 .../dependencies-empty/gid_b_ver.ini               |  2 ++
 .../dependencies-empty/gid_c_ver.ini               |  2 ++
 .../dependencies-empty/gid_d_1.ini                 |  1 +
 .../dependencies-empty/gid_d_2.ini                 |  2 ++
 .../dependencies-empty/gid_e_ver.ini               |  2 ++
 .../dependencies-empty/gid_f_ver.ini               |  2 ++
 .../dependencies-empty/gid_g_1.ini                 |  2 ++
 .../dependencies-empty/gid_g_2.ini                 |  2 ++
 .../dependencies-empty/gid_h_1.ini                 |  1 +
 .../dependencies-empty/gid_h_2.ini                 |  1 +
 ...xpectedSubtreeOnDescriptorDependenciesEmpty.txt |  8 +++++++
 14 files changed, 63 insertions(+), 1 deletion(-)

diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
index 4beca799..4c41d40c 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
@@ -448,9 +448,17 @@ public class BfDependencyCollector
                     context.getParent().getChildren().add( child );
 
                     boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
+                    DependencyProcessingContext parentContext = context.withDependency( d );
                     if ( recurse )
                     {
-                        doRecurse( args, context.withDependency( d ), descriptorResult, child );
+                        doRecurse( args, parentContext, descriptorResult, child );
+                    }
+                    else if ( !args.skipper.skipResolution( child, parentContext.parents ) )
+                    {
+                        List<DependencyNode> parents = new ArrayList<>( parentContext.parents.size() + 1 );
+                        parents.addAll( parentContext.parents );
+                        parents.add( child );
+                        args.skipper.cache( child, parents );
                     }
                 }
             }
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java
index ea162f94..2a1dbea5 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java
@@ -61,6 +61,11 @@ import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
 import org.eclipse.aether.util.graph.manager.DefaultDependencyManager;
 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
+import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
+import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
 import org.eclipse.aether.util.graph.version.HighestVersionFilter;
 import org.junit.Before;
 import org.junit.Test;
@@ -576,6 +581,26 @@ public class BfDependencyCollectorTest
         assertEquals( 1, result.getRoot().getChildren().size() );
     }
 
+
+    @Test
+    public void testDescriptorDependenciesEmpty()
+            throws Exception
+    {
+        DependencyNode root = parser.parseResource("expectedSubtreeOnDescriptorDependenciesEmpty.txt");
+        Dependency dependency = root.getDependency();
+        CollectRequest request = new CollectRequest(dependency, Arrays.asList(repository));
+
+        collector.setArtifactDescriptorReader(newReader("dependencies-empty/"));
+
+        session.setDependencyGraphTransformer(new ConflictResolver(
+                new NearestVersionSelector(), new JavaScopeSelector(), new SimpleOptionalitySelector(),
+                new JavaScopeDeriver()
+        ));
+
+        CollectResult result = collector.collectDependencies(session, request);
+        assertEqualSubtree(root, result.getRoot());
+    }
+
     static class TestDependencyManager
         implements DependencyManager
     {
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini
new file mode 100644
index 00000000..f5c8d60e
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:b:jar:ver
+gid:c:jar:ver
+gid:e:jar:ver
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini
new file mode 100644
index 00000000..4a016c05
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:d:jar:1
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini
new file mode 100644
index 00000000..33a9d26c
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:d:jar:2
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini
new file mode 100644
index 00000000..05ba453a
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini
@@ -0,0 +1 @@
+[dependencies]
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini
new file mode 100644
index 00000000..39318dad
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:g:jar:1
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini
new file mode 100644
index 00000000..1753baca
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:f:jar:ver
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini
new file mode 100644
index 00000000..a456e712
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:g:jar:2
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini
new file mode 100644
index 00000000..ce535a50
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:h:jar:1
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini
new file mode 100644
index 00000000..41cd235f
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:h:jar:2
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini
new file mode 100644
index 00000000..05ba453a
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini
@@ -0,0 +1 @@
+[dependencies]
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini
new file mode 100644
index 00000000..05ba453a
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini
@@ -0,0 +1 @@
+[dependencies]
\ No newline at end of file
diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt
new file mode 100644
index 00000000..889b64f8
--- /dev/null
+++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt
@@ -0,0 +1,8 @@
+gid:a:jar:ver
++- gid:b:jar:ver compile
+|  \- gid:d:jar:1 compile
++- gid:c:jar:ver compile
+\- gid:e:jar:ver compile
+|  +- gid:f:jar:ver compile
+|  |  +- gid:g:jar:2 compile
+|  |  |  \- gid:h:jar:2 compile
\ No newline at end of file