Skip to content

Commit 372378f

Browse files
committed
fix: use repository filtering for library retrieval
There are some repository proxies that we deem less authoritative than others, which can lead to cache bloat. With this change, we can better depend on certain artifacts coming from specific repositories over others and reduce storage duplication of those proxies.
1 parent 2636070 commit 372378f

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

library-manager/src/main/java/org/spongepowered/libs/LibraryManager.java

+19-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.nio.file.Files;
3939
import java.nio.file.Path;
4040
import java.util.Collections;
41+
import java.util.Comparator;
4142
import java.util.HashMap;
4243
import java.util.LinkedHashMap;
4344
import java.util.LinkedHashSet;
@@ -53,8 +54,14 @@
5354
import java.util.concurrent.TimeUnit;
5455

5556
public final class LibraryManager {
56-
public static final String SPONGE_NEXUS_DOWNLOAD_URL = "https://repo.spongepowered.org/service/rest/v1/search/assets?sha512=%s"
57-
+ "&maven.groupId=%s&maven.artifactId=%s&maven.baseVersion=%s&maven.extension=jar";
57+
public static final String SPONGE_NEXUS_DOWNLOAD_URL = "https://repo.spongepowered.org/service/rest/v1/search/assets?sha512=%s&maven.groupId=%s&maven.artifactId=%s&maven.baseVersion=%s&maven.extension=jar";
58+
59+
// This is the list of repositories we sort artifacts by when retrieving them via the library manager.
60+
// The order of which is semi-important as we want to prefer the most authoritative repository for a given
61+
// artifact.
62+
private static final List<String> PREFERRED_REPOSITORY_ORDER = List.of(
63+
"maven-central", "minecraft-proxy", "maven-releases", "maven-snapshots", "google-proxy",
64+
"forge-proxy", "neoforge-releases", "neoforge-snapshots", "fabric-proxy");
5865

5966
private final Logger logger;
6067
private final boolean checkLibraryHashes;
@@ -166,8 +173,16 @@ private Set<Library> scheduleDownloads(
166173
failures.add("No data received from '" + requestUrl + "'!");
167174
return null;
168175
}
169-
170-
final SonatypeResponse.Item item = response.items().get(0);
176+
// Sort the items based on the preferred repository order
177+
final var item = response.items()
178+
.stream()
179+
.min(Comparator.comparingInt(i -> {
180+
if (!PREFERRED_REPOSITORY_ORDER.contains(i.repository())) {
181+
return Integer.MAX_VALUE;
182+
}
183+
return PREFERRED_REPOSITORY_ORDER.indexOf(i.repository());
184+
}))
185+
.get();
171186

172187
if (checkHashes) {
173188
LibraryUtils.downloadAndVerifyDigest(this.logger, item.downloadUrl(), depFile, "SHA-512", item.checksum().sha512());

0 commit comments

Comments
 (0)