From e1413ff942a055b71623e363c28799e7d171925d Mon Sep 17 00:00:00 2001 From: Minecraftschurli Date: Mon, 18 Mar 2024 05:49:02 +0100 Subject: [PATCH] Fix config cache errors (#132) * Fix config cache errors * Fix failing functional tests --- .../common/runtime/tasks/DefaultRuntime.java | 12 ++++------- .../gradle/common/util/ToolUtilities.java | 5 ----- .../extensions/NeoFormRuntimeExtension.java | 12 +++++------ .../runtime/tasks/AbstractInjectSource.java | 3 ++- .../tasks/InjectFromDirectorySource.java | 21 ++----------------- .../runtime/tasks/InjectFromZipSource.java | 2 +- .../gradle/userdev/FunctionalTests.groovy | 6 +++--- .../vanilla/runtime/steps/ParchmentStep.java | 12 +++++------ 8 files changed, 24 insertions(+), 49 deletions(-) diff --git a/common/src/main/java/net/neoforged/gradle/common/runtime/tasks/DefaultRuntime.java b/common/src/main/java/net/neoforged/gradle/common/runtime/tasks/DefaultRuntime.java index 06d0927a5..c692c0f01 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runtime/tasks/DefaultRuntime.java +++ b/common/src/main/java/net/neoforged/gradle/common/runtime/tasks/DefaultRuntime.java @@ -5,7 +5,6 @@ import net.neoforged.gradle.dsl.common.runtime.tasks.RuntimeArguments; import net.neoforged.gradle.dsl.common.runtime.tasks.RuntimeMultiArguments; import net.neoforged.gradle.dsl.common.util.DistributionType; -import org.gradle.api.file.Directory; import org.gradle.api.file.RegularFile; import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Provider; @@ -47,13 +46,10 @@ public DefaultRuntime() { buildRuntimeArguments(result); return result; })); - getRuntimeData().convention(getSymbolicDataSources().map(dataSources -> { - final Directory unpackedMcpDirectory = getUnpackedMcpZipDirectory().get(); - return dataSources.entrySet().stream().collect(Collectors.toMap( - Map.Entry::getKey, - entry -> getProject().provider(() -> unpackedMcpDirectory.file(entry.getValue()).getAsFile()) - )); - })); + getRuntimeData().convention(getSymbolicDataSources().map(dataSources -> dataSources.entrySet().stream().collect(Collectors.toMap( + Map.Entry::getKey, + entry -> getUnpackedMcpZipDirectory().map(unpackedMcpDirectory -> unpackedMcpDirectory.file(entry.getValue()).getAsFile()) + )))); getOutputDirectory().finalizeValueOnRead(); } diff --git a/common/src/main/java/net/neoforged/gradle/common/util/ToolUtilities.java b/common/src/main/java/net/neoforged/gradle/common/util/ToolUtilities.java index b7b2d82a7..488dabc8c 100644 --- a/common/src/main/java/net/neoforged/gradle/common/util/ToolUtilities.java +++ b/common/src/main/java/net/neoforged/gradle/common/util/ToolUtilities.java @@ -4,7 +4,6 @@ import org.gradle.api.Project; import org.gradle.api.artifacts.Dependency; import org.gradle.api.artifacts.ResolvedArtifact; -import org.gradle.api.provider.Provider; import java.io.File; @@ -34,8 +33,4 @@ public static ResolvedArtifact resolveToolArtifact(final Project project, final tool ).getResolvedConfiguration().getResolvedArtifacts().iterator().next(); } - - public static Provider resolveTool(final Project project, final Provider tool) { - return tool.map(toolArtifactId -> resolveTool(project, toolArtifactId)); - } } diff --git a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/extensions/NeoFormRuntimeExtension.java b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/extensions/NeoFormRuntimeExtension.java index 9db08e6bc..2095a6337 100644 --- a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/extensions/NeoFormRuntimeExtension.java +++ b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/extensions/NeoFormRuntimeExtension.java @@ -478,18 +478,18 @@ private static Provider maybeApplyParchment(NeoFormRuntimeSpecifica return recompileInput; } - // Provide the mappings via artifact - Provider mappingFile = ToolUtilities.resolveTool(project, parchment.getParchmentArtifact()); - Provider toolExecutable = ToolUtilities.resolveTool(project, parchment.getToolArtifact()); - TaskProvider applyParchmentTask = project.getTasks().register(CommonRuntimeUtils.buildTaskName(spec, "applyParchment"), Execute.class, task -> { + // Provide the mappings via artifact + File mappingFile = ToolUtilities.resolveTool(project, parchment.getParchmentArtifact().get()); + File toolExecutable = ToolUtilities.resolveTool(project, parchment.getToolArtifact().get()); + task.getInputs().file(mappingFile); task.getInputs().file(recompileInput); task.getInputs().file(listLibrariesOutput); - task.getExecutingJar().fileProvider(toolExecutable); + task.getExecutingJar().set(toolExecutable); task.getProgramArguments().add(listLibrariesOutput.map(f -> "--libraries-list=" + f.getAsFile().getAbsolutePath())); task.getProgramArguments().add("--enable-parchment"); - task.getProgramArguments().add(mappingFile.map(f -> "--parchment-mappings=" + f.getAbsolutePath())); + task.getProgramArguments().add("--parchment-mappings=" + mappingFile.getAbsolutePath()); task.getProgramArguments().add("--in-format=archive"); task.getProgramArguments().add("--out-format=archive"); task.getProgramArguments().add(recompileInput.map(f -> f.getAsFile().getAbsolutePath())); diff --git a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/AbstractInjectSource.java b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/AbstractInjectSource.java index 7f23593fd..e2550f9ad 100644 --- a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/AbstractInjectSource.java +++ b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/AbstractInjectSource.java @@ -1,6 +1,7 @@ package net.neoforged.gradle.neoform.runtime.tasks; import org.gradle.api.Project; +import org.gradle.api.logging.Logger; import org.gradle.api.provider.ListProperty; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; @@ -50,7 +51,7 @@ public abstract class AbstractInjectSource { public abstract void copyTo(ZipOutputStream out) throws IOException; @Inject - protected abstract Project getProject(); + protected abstract Logger getLogger(); protected final PatternSet createFilter() { PatternSet filter = new PatternSet(); diff --git a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromDirectorySource.java b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromDirectorySource.java index eae707f2f..f2efacd11 100644 --- a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromDirectorySource.java +++ b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromDirectorySource.java @@ -1,20 +1,13 @@ package net.neoforged.gradle.neoform.runtime.tasks; import net.neoforged.gradle.util.ZipBuildingFileTreeVisitor; -import org.gradle.api.file.ArchiveOperations; -import org.gradle.api.file.ConfigurableFileCollection; -import org.gradle.api.file.ConfigurableFileTree; import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.FileSystemOperations; import org.gradle.api.file.FileTree; -import org.gradle.api.file.ProjectLayout; -import org.gradle.api.model.ObjectFactory; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.PathSensitive; import org.gradle.api.tasks.PathSensitivity; import org.jetbrains.annotations.Nullable; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -29,15 +22,6 @@ public abstract class InjectFromDirectorySource extends AbstractInjectSource { @PathSensitive(PathSensitivity.NONE) public abstract DirectoryProperty getDirectory(); - /** - * The object factory that can be used to manage the internal subsystems of a gradle model. - * Allows for the creation of for example file collections, trees and other components. - * - * @return The object factory. - */ - @Inject - public abstract ObjectFactory getObjectFactory(); - @Override public byte @Nullable [] tryReadFile(String path) throws IOException { File packageInfoTemplateFile = getDirectory().file("package-info-template.java").get().getAsFile(); @@ -48,9 +32,8 @@ public abstract class InjectFromDirectorySource extends AbstractInjectSource { } @Override - public void copyTo(ZipOutputStream out) throws IOException { - final ConfigurableFileTree outputTree = getObjectFactory().fileTree(); - FileTree source = outputTree.from(getDirectory()).matching(createFilter()); + public void copyTo(ZipOutputStream out) { + FileTree source = getDirectory().getAsFileTree().matching(createFilter()); source.visit(new ZipBuildingFileTreeVisitor(out)); } } diff --git a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromZipSource.java b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromZipSource.java index 4ef3ce027..e5409525e 100644 --- a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromZipSource.java +++ b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/tasks/InjectFromZipSource.java @@ -56,7 +56,7 @@ public void copyTo(ZipOutputStream out) throws IOException { throw e; } else if (!entry.isDirectory()) { // Warn on duplicate files, but ignore duplicate directories - getProject().getLogger().warn("Cannot inject duplicate file {}", entry.getName()); + getLogger().warn("Cannot inject duplicate file {}", entry.getName()); } } } diff --git a/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/FunctionalTests.groovy b/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/FunctionalTests.groovy index 7ed4ff57d..f85dff9d4 100644 --- a/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/FunctionalTests.groovy +++ b/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/FunctionalTests.groovy @@ -17,10 +17,10 @@ class FunctionalTests extends SimpleTestSpecification { def "a mod with userdev as dependency can run the patch task for that dependency"() { given: settingsFile << """ - rootProject.name = 'test-project' plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' } + rootProject.name = 'test-project' """ buildFile << """ plugins { @@ -50,10 +50,10 @@ class FunctionalTests extends SimpleTestSpecification { def "a mod with userdev as dependency and official mappings can compile through gradle"() { given: settingsFile << """ - rootProject.name = 'test-project' plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' } + rootProject.name = 'test-project' """ buildFile << """ plugins { @@ -92,10 +92,10 @@ class FunctionalTests extends SimpleTestSpecification { def "the userdev runtime by default supports the build cache"() { given: settingsFile << """ - rootProject.name = 'test-project' plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' } + rootProject.name = 'test-project' """ buildFile << """ plugins { diff --git a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/steps/ParchmentStep.java b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/steps/ParchmentStep.java index 9c02a470f..a69f3bf4d 100644 --- a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/steps/ParchmentStep.java +++ b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/steps/ParchmentStep.java @@ -50,18 +50,18 @@ private static TaskProvider maybeApplyParchment(VanillaRuntim }); } - // Provide the mappings via artifact - Provider mappingFile = ToolUtilities.resolveTool(project, parchment.getParchmentArtifact()); - Provider toolExecutable = ToolUtilities.resolveTool(project, parchment.getToolArtifact()); - return project.getTasks().register(CommonRuntimeUtils.buildTaskName(spec, "applyParchment"), Execute.class, task -> { + // Provide the mappings via artifact + File mappingFile = ToolUtilities.resolveTool(project, parchment.getParchmentArtifact().get()); + File toolExecutable = ToolUtilities.resolveTool(project, parchment.getToolArtifact().get()); + task.getInputs().file(mappingFile); task.getInputs().file(inputProvidingTask.flatMap(WithOutput::getOutput)); task.getInputs().file(listLibrariesOutput); - task.getExecutingJar().fileProvider(toolExecutable); + task.getExecutingJar().set(toolExecutable); task.getProgramArguments().add(listLibrariesOutput.map(f -> "--libraries-list=" + f.getAsFile().getAbsolutePath())); task.getProgramArguments().add("--enable-parchment"); - task.getProgramArguments().add(mappingFile.map(f -> "--parchment-mappings=" + f.getAbsolutePath())); + task.getProgramArguments().add("--parchment-mappings=" + mappingFile.getAbsolutePath()); task.getProgramArguments().add("--in-format=archive"); task.getProgramArguments().add("--out-format=archive"); task.getProgramArguments().add(inputProvidingTask.flatMap(WithOutput::getOutput).map(f -> f.getAsFile().getAbsolutePath()));