Skip to content

Commit 17cb491

Browse files
authored
neoforge: skip lookup if exact request matches installed version (#669)
1 parent fcb5689 commit 17cb491

13 files changed

+74
-19
lines changed

src/main/java/me/itzg/helpers/curseforge/CurseForgeInstaller.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
import me.itzg.helpers.files.Manifests;
5353
import me.itzg.helpers.files.ReactiveFileUtils;
5454
import me.itzg.helpers.files.ResultsFileWriter;
55-
import me.itzg.helpers.forge.ForgeInstaller;
55+
import me.itzg.helpers.forge.ForgeLikeInstaller;
5656
import me.itzg.helpers.forge.ForgeInstallerResolver;
5757
import me.itzg.helpers.forge.ForgeUrlArgs;
5858
import me.itzg.helpers.forge.NeoForgeInstallerResolver;
@@ -1006,7 +1006,7 @@ private void prepareFabric(String minecraftVersion, String loaderVersion) {
10061006
}
10071007

10081008
private void prepareForge(SharedFetch sharedFetch, String minecraftVersion, String loaderVersion) {
1009-
new ForgeInstaller(
1009+
new ForgeLikeInstaller(
10101010
new ForgeInstallerResolver(sharedFetch,
10111011
minecraftVersion, loaderVersion,
10121012
forgeUrlArgs.getPromotionsUrl(), forgeUrlArgs.getMavenRepoUrl()
@@ -1016,7 +1016,7 @@ private void prepareForge(SharedFetch sharedFetch, String minecraftVersion, Stri
10161016
}
10171017

10181018
private void prepareNeoForge(SharedFetch sharedFetch, String minecraftVersion, String loaderVersion) {
1019-
new ForgeInstaller(
1019+
new ForgeLikeInstaller(
10201020
new NeoForgeInstallerResolver(sharedFetch,
10211021
minecraftVersion, loaderVersion
10221022
)

src/main/java/me/itzg/helpers/forge/ForgeInstallerResolver.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,17 @@ public ForgeInstallerResolver(SharedFetch sharedFetch,
4343
}
4444

4545
@Override
46-
public VersionPair resolve() {
46+
public VersionPair resolve(ForgeManifest prevManifest) {
47+
if (prevManifest != null) {
48+
final String prevMinecraftVersion = prevManifest.getMinecraftVersion();
49+
final String prevForgeVersion = prevManifest.getForgeVersion();
50+
if (prevMinecraftVersion.equals(requestedMinecraftVersion)
51+
&& prevForgeVersion.equals(requestedForgeVersion)) {
52+
log.debug("Resolved Minecraft {} Forge {} from previous manifest", prevMinecraftVersion, prevForgeVersion);
53+
return new VersionPair(requestedMinecraftVersion, requestedForgeVersion);
54+
}
55+
}
56+
4757
final PromotionsSlim promotionsSlim = loadPromotions();
4858
if (promotionsSlim.getPromos().isEmpty()) {
4959
throw new GenericException("No versions were available in Forge promotions");

src/main/java/me/itzg/helpers/forge/ForgeInstaller.java renamed to src/main/java/me/itzg/helpers/forge/ForgeLikeInstaller.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
import org.jetbrains.annotations.Nullable;
2626

2727
@Slf4j
28-
public class ForgeInstaller {
28+
public class ForgeLikeInstaller {
2929

3030
private static final Pattern RESULT_INFO = Pattern.compile(
3131
"Exec:\\s+(?<exec>.+)"
3232
+ "|The server installed successfully, you should now be able to run the file (?<universalJar>.+)");
3333

3434
private final InstallerResolver installerResolver;
3535

36-
public ForgeInstaller(InstallerResolver installerResolver) {
36+
public ForgeLikeInstaller(InstallerResolver installerResolver) {
3737
this.installerResolver = installerResolver;
3838
}
3939

@@ -51,7 +51,7 @@ public void install(
5151
throw new GenericException("Failed to load existing forge manifest", e);
5252
}
5353

54-
final VersionPair resolved = installerResolver.resolve();
54+
final VersionPair resolved = installerResolver.resolve(prevManifest);
5555
if (resolved == null) {
5656
throw new InvalidParameterException("Unable to find suitable version for " +
5757
installerResolver.getDescription());

src/main/java/me/itzg/helpers/forge/InstallForgeCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class InstallForgeCommand implements Callable<Integer> {
2222
@Spec
2323
CommandLine.Model.CommandSpec spec;
2424

25+
@SuppressWarnings("unused")
2526
@Option(names = {"--help", "-h"}, usageHelp = true)
2627
boolean help;
2728

@@ -96,7 +97,7 @@ public void setVersion(String version) {
9697
public Integer call() throws Exception {
9798
try (SharedFetch sharedFetch = Fetch.sharedFetch("install-forge", sharedFetchArgs.options())) {
9899

99-
final ForgeInstaller installer = new ForgeInstaller(
100+
final ForgeLikeInstaller installer = new ForgeLikeInstaller(
100101
versionOrInstaller.installer != null ?
101102
new ProvidedInstallerResolver(versionOrInstaller.installer)
102103
: new ForgeInstallerResolver(

src/main/java/me/itzg/helpers/forge/InstallNeoForgeCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class InstallNeoForgeCommand implements Callable<Integer> {
2222
@Spec
2323
CommandLine.Model.CommandSpec spec;
2424

25+
@SuppressWarnings("unused")
2526
@Option(names = {"--help", "-h"}, usageHelp = true)
2627
boolean help;
2728

@@ -81,7 +82,7 @@ public void setVersion(String version) {
8182
public Integer call() throws Exception {
8283
try (SharedFetch sharedFetch = Fetch.sharedFetch("install-neoforge", sharedFetchArgs.options())) {
8384

84-
new ForgeInstaller(
85+
new ForgeLikeInstaller(
8586
new NeoForgeInstallerResolver(sharedFetch, minecraftVersion, neoForgeVersion)
8687
)
8788
.install(outputDirectory, resultsFile, forceReinstall, "NeoForge");

src/main/java/me/itzg/helpers/forge/InstallerResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public interface InstallerResolver {
66

7-
VersionPair resolve();
7+
VersionPair resolve(ForgeManifest prevManifest);
88

99
Path download(String minecraftVersion, String forgeVersion, Path outputDir);
1010

src/main/java/me/itzg/helpers/forge/NeoForgeInstallerResolver.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class NeoForgeInstallerResolver implements InstallerResolver {
2525
public static final String ARTIFACT_ID_FORGE_LIKE = "forge";
2626
public static final String ARTIFACT_ID = "neoforge";
2727
public static final String FORGE_LIKE_VERSION = "1.20.1";
28+
public static final String DEFAULT_MVN_URL = "https://maven.neoforged.net/releases";
2829

2930
private final MavenRepoApi mavenRepoApi;
3031
private final String requestedMinecraftVersion;
@@ -36,7 +37,7 @@ public NeoForgeInstallerResolver(SharedFetch sharedFetch,
3637
@Nullable
3738
String requestedNeoForgeVersion
3839
) {
39-
this(sharedFetch, requestedMinecraftVersion, requestedNeoForgeVersion, "https://maven.neoforged.net/releases");
40+
this(sharedFetch, requestedMinecraftVersion, requestedNeoForgeVersion, DEFAULT_MVN_URL);
4041
}
4142

4243
NeoForgeInstallerResolver(SharedFetch sharedFetch,
@@ -60,7 +61,7 @@ enum NeoForgeVersionType {
6061
}
6162

6263
@Override
63-
public VersionPair resolve() {
64+
public VersionPair resolve(ForgeManifest prevManifest) {
6465
if (useForgeArtifactId(requestedMinecraftVersion)) {
6566
return resolveForgeLike();
6667
}
@@ -84,6 +85,14 @@ else if (requestedNeoForgeVersion == null || requestedNeoForgeVersion.equalsIgno
8485
if (neoforgeVersion.length < 3) {
8586
throw new InvalidParameterException("Malformed NeoForge version: " + requestedNeoForgeVersion);
8687
}
88+
89+
if (prevManifest != null) {
90+
if (prevManifest.getMinecraftVersion().equals(requestedMinecraftVersion)
91+
&& prevManifest.getForgeVersion().equals(requestedNeoForgeVersion)) {
92+
return new VersionPair(requestedMinecraftVersion, requestedNeoForgeVersion);
93+
}
94+
95+
}
8796
}
8897

8998
final MavenMetadata metadata = mavenRepoApi.fetchMetadata(GROUP_ID, ARTIFACT_ID)

src/main/java/me/itzg/helpers/forge/ProvidedInstallerResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ProvidedInstallerResolver(Path forgeInstaller) {
2626
}
2727

2828
@Override
29-
public VersionPair resolve() {
29+
public VersionPair resolve(ForgeManifest prevManifest) {
3030
final VersionPair versions;
3131
try {
3232
versions = extractVersion(forgeInstaller);

src/main/java/me/itzg/helpers/modrinth/ModrinthPackInstaller.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import me.itzg.helpers.fabric.FabricLauncherInstaller;
2222
import me.itzg.helpers.files.AntPathMatcher;
2323
import me.itzg.helpers.files.IoStreams;
24-
import me.itzg.helpers.forge.ForgeInstaller;
24+
import me.itzg.helpers.forge.ForgeLikeInstaller;
2525
import me.itzg.helpers.forge.ForgeInstallerResolver;
2626
import me.itzg.helpers.forge.ForgeUrlArgs;
2727
import me.itzg.helpers.forge.NeoForgeInstallerResolver;
@@ -269,7 +269,7 @@ private void prepareFabric(SharedFetch sharedFetch, String minecraftVersion, Str
269269
}
270270

271271
private void prepareForge(SharedFetch sharedFetch, String minecraftVersion, String version) {
272-
new ForgeInstaller(
272+
new ForgeLikeInstaller(
273273
new ForgeInstallerResolver(sharedFetch, minecraftVersion, version,
274274
forgeUrlArgs.getPromotionsUrl(), forgeUrlArgs.getMavenRepoUrl()
275275
)
@@ -283,7 +283,7 @@ private void prepareForge(SharedFetch sharedFetch, String minecraftVersion, Stri
283283
}
284284

285285
private void prepareNeoForge(SharedFetch sharedFetch, String minecraftVersion, String version) {
286-
new ForgeInstaller(
286+
new ForgeLikeInstaller(
287287
new NeoForgeInstallerResolver(sharedFetch, minecraftVersion, version)
288288
)
289289
.install(

src/main/java/me/itzg/helpers/mvn/MavenRepoApi.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ private Mono<MavenMetadata> retrieveMetadata(String groupId, String artifactId)
7171
)
7272
.toObject(MavenMetadata.class, xmlMapper)
7373
.assemble()
74+
.doOnSubscribe(s ->
75+
log.debug("Fetching maven metadata for {}:{} from {}",
76+
groupId, artifactId, uriBuilder.getBaseUrl())
77+
)
7478
.checkpoint(String.format("fetching metadata for %s:%s", groupId, artifactId));
7579
}
7680

0 commit comments

Comments
 (0)