From c033246a9fa4223cfa0da95822d65e3787b64fde Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 18 Mar 2021 14:38:29 +0000 Subject: [PATCH] Add a strict mode when download files, will be a bit slower but should help solve some issues. --- .../assets/MinecraftAssetsProvider.java | 2 +- .../loom/util/HashedDownloadUtil.java | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java index ad005817..dfb52b3c 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java @@ -124,7 +124,7 @@ public class MinecraftAssetsProvider { progressLogger.progress(String.format("%-30.30s", assetName) + " - " + sha1); try { - HashedDownloadUtil.downloadIfInvalid(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, sha1, project.getLogger(), true); + HashedDownloadUtil.downloadIfInvalid(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, sha1, project.getLogger(), true, false); } catch (IOException e) { throw new RuntimeException("Failed to download: " + assetName, e); } diff --git a/src/main/java/net/fabricmc/loom/util/HashedDownloadUtil.java b/src/main/java/net/fabricmc/loom/util/HashedDownloadUtil.java index da294b8e..374c2bf1 100644 --- a/src/main/java/net/fabricmc/loom/util/HashedDownloadUtil.java +++ b/src/main/java/net/fabricmc/loom/util/HashedDownloadUtil.java @@ -41,16 +41,27 @@ import net.fabricmc.loom.LoomGradlePlugin; public class HashedDownloadUtil { public static void downloadIfInvalid(URL from, File to, String expectedHash, Logger logger, boolean quiet) throws IOException { + downloadIfInvalid(from, to, expectedHash, logger, quiet, true); + } + + public static void downloadIfInvalid(URL from, File to, String expectedHash, Logger logger, boolean quiet, boolean strict) throws IOException { if (LoomGradlePlugin.refreshDeps) { delete(to); } if (to.exists()) { - String sha1 = getSha1(to, logger); + if (strict) { + if (Checksum.equals(to, expectedHash)) { + // The hash matches the target file + return; + } + } else { + String sha1 = getSha1(to, logger); - if (expectedHash.equals(sha1)) { - // The hash in the sha1 file matches - return; + if (expectedHash.equals(sha1)) { + // The hash in the sha1 file matches + return; + } } } @@ -62,6 +73,7 @@ public class HashedDownloadUtil { if ((code < 200 || code > 299) && code != HttpURLConnection.HTTP_NOT_MODIFIED) { //Didn't get what we expected + delete(to); throw new IOException(connection.getResponseMessage() + " for " + from); }