This is an automated email from the ASF dual-hosted git repository. bodewig pushed a commit to branch ivy-1642 in repository https://gitbox.apache.org/repos/asf/ant-ivy.git
commit 226f7c26a54da56a72eca708ef18939e3ac1f1f2 Author: Stefan Bodewig <[email protected]> AuthorDate: Tue Apr 25 21:12:58 2023 +0200 ensure artifacts are only resolved once --- src/java/org/apache/ivy/core/resolve/IvyNode.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/java/org/apache/ivy/core/resolve/IvyNode.java b/src/java/org/apache/ivy/core/resolve/IvyNode.java index 273488ef..c7872c89 100644 --- a/src/java/org/apache/ivy/core/resolve/IvyNode.java +++ b/src/java/org/apache/ivy/core/resolve/IvyNode.java @@ -49,6 +49,7 @@ import org.apache.ivy.core.module.descriptor.IncludeRule; import org.apache.ivy.core.module.descriptor.MDArtifact; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.module.id.ArtifactId; +import org.apache.ivy.core.module.id.ArtifactRevisionId; import org.apache.ivy.core.module.id.ModuleId; import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.core.resolve.IvyNodeCallers.Caller; @@ -873,6 +874,7 @@ public class IvyNode implements Comparable<IvyNode> { // now exclude artifacts that aren't accepted by any caller Iterator<Artifact> iter = artifacts.iterator(); + Set<ArtifactRevisionId> artifactRevisionsSeen = new HashSet<ArtifactRevisionId>(); while (iter.hasNext()) { Artifact artifact = iter.next(); boolean excluded = callers.doesCallersExclude(rootModuleConf, artifact); @@ -880,6 +882,10 @@ public class IvyNode implements Comparable<IvyNode> { Message.debug(this + " in " + rootModuleConf + ": excluding " + artifact); iter.remove(); } + if (!artifactRevisionsSeen.add(artifact.getId())) { + Message.debug(this + " in " + rootModuleConf + ": skipping duplicate " + artifact); + iter.remove(); + } } return artifacts.toArray(new Artifact[artifacts.size()]); }
