From 859da37d71d88fbdd7927552e41558dedfd7604b Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 17 Apr 2020 23:46:08 +0800 Subject: [PATCH] fix: not generating modpack.cfg when CurseCompletionTask fail --- .../jackhuang/hmcl/game/HMCLModpackInstallTask.java | 2 +- .../org/jackhuang/hmcl/mod/ModpackInstallTask.java | 3 ++- .../org/jackhuang/hmcl/mod/curse/CurseInstallTask.java | 10 ++++++---- .../hmcl/mod/multimc/MultiMCModpackInstallTask.java | 3 ++- .../hmcl/mod/server/ServerModpackLocalInstallTask.java | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java index 867ff195e..3d7e2167b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java @@ -77,6 +77,7 @@ public final class HMCLModpackInstallTask extends Task { } catch (JsonParseException | IOException ignore) { } dependents.add(new ModpackInstallTask<>(zipFile, run, modpack.getEncoding(), "/minecraft", it -> !"pack.json".equals(it), config)); + dependents.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/minecraft", modpack, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override @@ -104,7 +105,6 @@ public final class HMCLModpackInstallTask extends Task { } dependencies.add(libraryTask.thenComposeAsync(repository::save)); - dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/minecraft", modpack, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java index cd6527484..d7f7f3b29 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java @@ -89,7 +89,8 @@ public class ModpackInstallTask extends Task { // If both old and new modpacks have this entry, but the file is deleted by user, leave it missing. return false; } else { - // If user modified this entry file, we will not replace this file since this modified file is that user expects. + // If both old and new modpacks have this entry, and user has modified this file, + // we will not replace it since this modified file is what user expects. String fileHash = encodeHex(digest("SHA-1", Files.newInputStream(destPath))); String oldHash = files.get(entryPath).getHash(); return Objects.equals(oldHash, fileHash); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java index 14a31ee35..721f25bbf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java @@ -107,7 +107,9 @@ public final class CurseInstallTask extends Task { } this.config = config; dependents.add(new ModpackInstallTask<>(zipFile, run, modpack.getEncoding(), manifest.getOverrides(), any -> true, config).withStage("hmcl.modpack")); - dependents.add(new CurseCompletionTask(dependencyManager, name, manifest).withStage("hmcl.modpack.download")); + dependents.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); + + dependencies.add(new CurseCompletionTask(dependencyManager, name, manifest).withStage("hmcl.modpack.download")); } @Override @@ -122,7 +124,8 @@ public final class CurseInstallTask extends Task { @Override public void execute() throws Exception { - if (config != null) + if (config != null) { + // For update, remove mods not listed in new manifest for (CurseManifestFile oldCurseManifestFile : config.getManifest().getFiles()) { if (StringUtils.isBlank(oldCurseManifestFile.getFileName())) continue; File oldFile = new File(run, "mods/" + oldCurseManifestFile.getFileName()); @@ -131,11 +134,10 @@ public final class CurseInstallTask extends Task { if (!oldFile.delete()) throw new IOException("Unable to delete mod file " + oldFile); } + } File root = repository.getVersionRoot(name); FileUtils.writeText(new File(root, "manifest.json"), JsonUtils.GSON.toJson(manifest)); - - dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java index f99b890fa..ea8249d31 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java @@ -134,6 +134,8 @@ public final class MultiMCModpackInstallTask extends Task { else if (Files.exists(fs.getPath("/" + manifest.getName() + "/minecraft"))) dependents.add(new ModpackInstallTask<>(zipFile, run, modpack.getEncoding(), "/" + manifest.getName() + "/minecraft", any -> true, config).withStage("hmcl.modpack")); } + + dependents.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/" + manifest.getName() + "/minecraft", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override @@ -179,7 +181,6 @@ public final class MultiMCModpackInstallTask extends Task { } dependencies.add(repository.save(version)); - dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/" + manifest.getName() + "/minecraft", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackLocalInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackLocalInstallTask.java index 6b233de67..8eefe29e3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackLocalInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackLocalInstallTask.java @@ -82,6 +82,7 @@ public class ServerModpackLocalInstallTask extends Task { } catch (JsonParseException | IOException ignore) { } dependents.add(new ModpackInstallTask<>(zipFile, run, modpack.getEncoding(), "/overrides", any -> true, config).withStage("hmcl.modpack")); + dependents.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/overrides", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override @@ -96,7 +97,6 @@ public class ServerModpackLocalInstallTask extends Task { @Override public void execute() throws Exception { - dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/overrides", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)).withStage("hmcl.modpack")); } @Override