You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2023/02/15 13:32:32 UTC

[maven-resolver] branch master updated: [MRESOLVER-316] DF Collector may enter endless loop (#244)

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 88dab9f1 [MRESOLVER-316] DF Collector may enter endless loop (#244)
88dab9f1 is described below

commit 88dab9f1d40f10af3f55e7ae21919f1b5701aff3
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Wed Feb 15 14:32:26 2023 +0100

    [MRESOLVER-316] DF Collector may enter endless loop (#244)
    
    When resolving artifact from issue, the DF collector enters endless loop. But the loop is NOT in collecting, it happens when DF detect unsolvable problem, and tries to report it. To report it, it needs to visit the graph of collected nodes, but that graph contains loops (and it is expected).
    
    But, the problem is that PathRecordingDependencyVisitor used to collect paths chokes on loops.
    
    Fix: just like in RepositorySystem#resolveDependencies, wrap up the graph visitor into TreeDependencyVisitor, that creates tree-like (loopless, tree by def) "view" of graph.
    
    With this fix, DF immediately detects that artifact in issue is unresolvable (just like BF does), as it contains unsolvable (not intersecting) ranges.
    
    ---
    
    https://issues.apache.org/jira/browse/MRESOLVER-316
---
 .../eclipse/aether/util/graph/transformer/NearestVersionSelector.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/NearestVersionSelector.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/NearestVersionSelector.java
index 11e1af0d..824c3262 100644
--- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/NearestVersionSelector.java
+++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/NearestVersionSelector.java
@@ -32,6 +32,7 @@ import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictContex
 import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictItem;
 import org.eclipse.aether.util.graph.transformer.ConflictResolver.VersionSelector;
 import org.eclipse.aether.util.graph.visitor.PathRecordingDependencyVisitor;
+import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
 import org.eclipse.aether.version.Version;
 import org.eclipse.aether.version.VersionConstraint;
 
@@ -155,7 +156,7 @@ public final class NearestVersionSelector
             return context.isIncluded( node );
         };
         PathRecordingDependencyVisitor visitor = new PathRecordingDependencyVisitor( filter );
-        context.getRoot().accept( visitor );
+        context.getRoot().accept( new TreeDependencyVisitor( visitor ) );
         return new UnsolvableVersionConflictException( visitor.getPaths() );
     }