From b7c80133ce9e6f13ced8ee2634f2f62690eff2e9 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:44:31 -0400 Subject: [PATCH] Use hash of cache value as the JAR name for processed Minecraft JARs (#944) * Use hash of cache value as the JAR name for processed Minecraft JARs In basic testing, this cuts down the number of JARs to just one provided the same AWs are used on all subprojects * Fix checkstyle * Remove redundant code * Fix mod javadoc caching, and fixup tests. * Hopefully fix ModJavadocTest on windows. --------- Co-authored-by: modmuss --- .../MinecraftJarProcessorManager.java | 44 +++++-------------- .../processors/ModJavadocProcessor.java | 21 ++++++++- .../ProcessedNamedMinecraftProvider.java | 15 ++----- .../java/net/fabricmc/loom/util/Checksum.java | 10 +++++ .../MinecraftJarProcessorManagerTest.groovy | 31 +++++-------- .../test/util/GradleProjectTestTrait.groovy | 16 ++++++- 6 files changed, 68 insertions(+), 69 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftJarProcessorManager.java b/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftJarProcessorManager.java index e0d114df..39b63559 100644 --- a/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftJarProcessorManager.java +++ b/src/main/java/net/fabricmc/loom/configuration/processors/MinecraftJarProcessorManager.java @@ -1,7 +1,7 @@ /* * This file is part of fabric-loom, licensed under the MIT License (MIT). * - * Copyright (c) 2022 FabricMC + * Copyright (c) 2022-2023 FabricMC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,7 +25,6 @@ package net.fabricmc.loom.configuration.processors; import java.io.IOException; -import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -47,11 +46,10 @@ import net.fabricmc.loom.api.processor.MappingProcessorContext; import net.fabricmc.loom.api.processor.MinecraftJarProcessor; import net.fabricmc.loom.api.processor.ProcessorContext; import net.fabricmc.loom.api.processor.SpecContext; -import net.fabricmc.loom.util.ZipUtils; +import net.fabricmc.loom.util.Checksum; import net.fabricmc.mappingio.tree.MemoryMappingTree; public final class MinecraftJarProcessorManager { - private static final String CACHE_VALUE_FILE_PATH = "META-INF/Loom-Jar-Processor-Cache"; private static final Logger LOGGER = LoggerFactory.getLogger(MinecraftJarProcessorManager.class); private final List> jarProcessors; @@ -102,17 +100,22 @@ public final class MinecraftJarProcessorManager { } private String getDebugString() { - final StringJoiner sj = new StringJoiner("\n"); + final var sj = new StringJoiner("\n"); for (ProcessorEntry jarProcessor : jarProcessors) { sj.add(jarProcessor.name() + ":"); sj.add("\tHash: " + jarProcessor.hashCode()); - sj.add("\tStr: " + jarProcessor.toString()); + sj.add("\tStr: " + jarProcessor.cacheValue()); } return sj.toString(); } + public String getJarHash() { + //fabric-loom:mod-javadoc:-1289977000 + return Checksum.sha1Hex(getCacheValue().getBytes(StandardCharsets.UTF_8)).substring(0, 10); + } + public boolean requiresProcessingJar(Path jar) { Objects.requireNonNull(jar); @@ -121,32 +124,7 @@ public final class MinecraftJarProcessorManager { return true; } - byte[] existingCache; - - try { - existingCache = ZipUtils.unpackNullable(jar, CACHE_VALUE_FILE_PATH); - } catch (IOException e) { - throw new UncheckedIOException("Failed to unpack jar: " + jar, e); - } - - if (existingCache == null) { - LOGGER.info("{} does not contain a processor cache value, regenerating", jar); - return true; - } - - final String existingCacheValue = new String(existingCache, StandardCharsets.UTF_8); - final String expectedCacheValue = getCacheValue(); - final boolean matches = existingCacheValue.equals(expectedCacheValue); - - if (!matches) { - LOGGER.info("{} has an invalid cache, got {} expected {}", jar, existingCacheValue, expectedCacheValue); - - if (LOGGER.isInfoEnabled()) { - LOGGER.info("Expected state: {}", getDebugString()); - } - } - - return !matches; + return false; } public void processJar(Path jar, ProcessorContext context) throws IOException { @@ -157,8 +135,6 @@ public final class MinecraftJarProcessorManager { throw new IOException("Failed to process jar when running jar processor: %s".formatted(entry.name()), e); } } - - ZipUtils.add(jar, CACHE_VALUE_FILE_PATH, getCacheValue()); } public boolean processMappings(MemoryMappingTree mappings, MappingProcessorContext context) { diff --git a/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java b/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java index 7a773e78..781ca37f 100644 --- a/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java @@ -32,7 +32,9 @@ import java.io.UncheckedIOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.Objects; import javax.inject.Inject; @@ -45,6 +47,7 @@ import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.api.processor.MinecraftJarProcessor; import net.fabricmc.loom.api.processor.ProcessorContext; import net.fabricmc.loom.api.processor.SpecContext; +import net.fabricmc.loom.util.Checksum; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.fmj.FabricModJson; import net.fabricmc.mappingio.MappingReader; @@ -82,6 +85,7 @@ public abstract class ModJavadocProcessor implements MinecraftJarProcessor