From 15826162b495b1b44c2e7a92ce1a9c780ee6ad1c Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Tue, 29 Sep 2026 09:50:38 -0400 Subject: [PATCH] Loader task freshness - Always rerun the loader Exec tasks when VolmLib resolves from the published snapshot - Read the VolmLib dirty state without taking the optional index lock --- build.gradle | 14 ++++++++++++-- gradle/volmlib-resolution.settings.gradle | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 1295ab47b..0fb075442 100644 --- a/build.gradle +++ b/build.gradle @@ -323,6 +323,16 @@ if (localVolmLibCheckout != null) { }) } +// The published master-SNAPSHOT is resolved inside the nested build, so no outer input changes when it +// moves. Without a local checkout the Exec tasks always run and the nested build decides what is stale. +Closure declareVolmLibInputs = { Exec task -> + task.inputs.property('volmLibStamp', volmLibStamp) + if (localVolmLibCheckout == null) { + task.outputs.upToDateWhen { false } + } + return null +} + Closure declareModdedJarIo = { Exec task, String adapter, String artifactName, Map versions -> task.inputs.files(moddedSharedInputs).withPropertyName('moddedSharedSources') .withPathSensitivity(PathSensitivity.RELATIVE) @@ -332,7 +342,7 @@ Closure declareModdedJarIo = { Exec task, String adapter, String artifactN layout.projectDirectory.file("adapters/${adapter}/settings.gradle").asFile ).withPropertyName('adapterSources') versions.each { String key, String value -> task.inputs.property(key, value) } - task.inputs.property('volmLibStamp', volmLibStamp) + declareVolmLibInputs(task) task.outputs.file(layout.projectDirectory.file("adapters/${adapter}/build/libs/${artifactName}")) return null } @@ -495,7 +505,7 @@ tasks.register('moddedTest', Exec) { inputs.property('irisVersion', project.version.toString()) inputs.property('minecraftVersion', minecraftVersion) inputs.property('fabricLoaderVersion', fabricLoaderVersion) - inputs.property('volmLibStamp', volmLibStamp) + declareVolmLibInputs(it) outputs.dir(layout.projectDirectory.dir('adapters/fabric/build/test-results/test')) mustRunAfter(tasks.named('jar')) mustRunAfter(project(':core').tasks.named('check')) diff --git a/gradle/volmlib-resolution.settings.gradle b/gradle/volmlib-resolution.settings.gradle index 6e2f580dc..ca1f9e821 100644 --- a/gradle/volmlib-resolution.settings.gradle +++ b/gradle/volmlib-resolution.settings.gradle @@ -121,7 +121,7 @@ if (irisLocalVolmLibDirectory == null) { } } else { String commit = irisGit(irisLocalVolmLibDirectory, 'rev-parse', 'HEAD') - String status = commit == null ? null : irisGit(irisLocalVolmLibDirectory, 'status', '--porcelain') + String status = commit == null ? null : irisGit(irisLocalVolmLibDirectory, '--no-optional-locks', 'status', '--porcelain') String dirty = status == null ? 'unknown' : String.valueOf(!status.isEmpty()) irisVolmLibStamp = [source: 'local', commit: commit ?: 'unknown', dirty: dirty] irisVolmLibDescription = "${irisLocalVolmLibDirectory.canonicalPath} @ ${commit == null ? 'unknown' : commit.take(7)}${dirty == 'true' ? '+dirty' : ''}"