From 2ba633badf4f6019c3361192b0caa7a84588dc87 Mon Sep 17 00:00:00 2001 From: modmuss Date: Mon, 23 Dec 2024 14:24:39 +0000 Subject: [PATCH] Download source artifacts in parallel (#1232) --- .../mods/ModConfigurationRemapper.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/ModConfigurationRemapper.java b/src/main/java/net/fabricmc/loom/configuration/mods/ModConfigurationRemapper.java index 4de303cb..e5cfca02 100644 --- a/src/main/java/net/fabricmc/loom/configuration/mods/ModConfigurationRemapper.java +++ b/src/main/java/net/fabricmc/loom/configuration/mods/ModConfigurationRemapper.java @@ -35,6 +35,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Supplier; import com.google.common.collect.ImmutableMap; @@ -43,6 +44,8 @@ import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.FileCollectionDependency; import org.gradle.api.artifacts.MutableVersionConstraint; import org.gradle.api.artifacts.ResolvedArtifact; +import org.gradle.api.artifacts.component.ComponentArtifactIdentifier; +import org.gradle.api.artifacts.component.ComponentIdentifier; import org.gradle.api.artifacts.dsl.DependencyHandler; import org.gradle.api.artifacts.query.ArtifactResolutionQuery; import org.gradle.api.artifacts.result.ArtifactResult; @@ -243,7 +246,10 @@ public class ModConfigurationRemapper { private static List resolveArtifacts(Project project, Configuration configuration) { final List artifacts = new ArrayList<>(); - for (ResolvedArtifact artifact : configuration.getResolvedConfiguration().getResolvedArtifacts()) { + final Set resolvedArtifacts = configuration.getResolvedConfiguration().getResolvedArtifacts(); + downloadAllSources(project, resolvedArtifacts); + + for (ResolvedArtifact artifact : resolvedArtifacts) { final Path sources = findSources(project, artifact); artifacts.add(new ArtifactRef.ResolvedArtifactRef(artifact, sources)); } @@ -270,6 +276,27 @@ public class ModConfigurationRemapper { return (dotIndex == -1) ? fileName : fileName.substring(0, dotIndex); } + private static void downloadAllSources(Project project, Set resolvedArtifacts) { + if (isCIBuild()) { + return; + } + + final DependencyHandler dependencies = project.getDependencies(); + + List componentIdentifiers = resolvedArtifacts.stream() + .map(ResolvedArtifact::getId) + .map(ComponentArtifactIdentifier::getComponentIdentifier) + .toList(); + + //noinspection unchecked + ArtifactResolutionQuery query = dependencies.createArtifactResolutionQuery() + .forComponents(componentIdentifiers) + .withArtifacts(JvmLibrary.class, SourcesArtifact.class); + + // Run a single query for all of the artifacts, this will allow them to be resolved in parallel before they are queried individually + query.execute(); + } + @Nullable public static Path findSources(Project project, ResolvedArtifact artifact) { if (isCIBuild()) {