RemapJarTask: Delete output if it exists to prevent ghost files (#1271)

* RemapJarTask: Delete output if it exists to prevent ghost files

Fixes #1270. This changed isn't necessary for RemapSourcesJarTask
as SourceRemapperService already deletes the output.

* Add a test for #1270

* Move DeletedResourceTest inside SimpleProjectTest
This commit is contained in:
Juuz
2025-03-05 00:07:52 +02:00
committed by GitHub
parent 8b0e718573
commit a477a718ed
2 changed files with 31 additions and 1 deletions

View File

@@ -230,6 +230,9 @@ public abstract class RemapJarTask extends AbstractRemapJarTask {
Objects.requireNonNull(tinyRemapperService, "tinyRemapperService");
Objects.requireNonNull(tinyRemapper, "tinyRemapper");
// Delete the old file to prevent deleted contents from sticking around in the jar.
Files.deleteIfExists(outputFile);
try (OutputConsumerPath outputConsumer = new OutputConsumerPath.Builder(outputFile).build()) {
outputConsumer.addNonClassFiles(inputFile);
tinyRemapper.apply(outputConsumer, tinyRemapperService.getOrCreateTag(inputFile));

View File

@@ -1,7 +1,7 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2016-2021 FabricMC
* Copyright (c) 2016-2025 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
@@ -100,4 +100,31 @@ class SimpleProjectTest extends Specification implements GradleProjectTestTrait
!result.output.contains("[WARN] [MIXIN]") // Assert that tiny remapper didnt not have any warnings when remapping
gradle.getOutputZipEntry("fabric-example-mod-1.0.0.jar", "META-INF/MANIFEST.MF").contains("Fabric-Loom-Version: 0.0.0+unknown")
}
// Tests that deleted files don't remain in built jars after a rebuild.
// See https://github.com/FabricMC/fabric-loom/issues/1270.
@Unroll
def "deleted files disappear from jars (gradle #version)"() {
// Initial conditions: a project with a resource file to delete.
setup:
def gradle = gradleProject(project: "simple", version: version)
def deletedFile = new File(gradle.projectDir, "src/main/resources/foo.txt")
deletedFile.text = "hello, world!"
gradle.run(task: "build")
when:
// Delete the resource, then run another build.
deletedFile.delete()
def result = gradle.run(task: "build")
then:
result.task(":build").outcome == SUCCESS
!gradle.hasOutputZipEntry("fabric-example-mod-1.0.0.jar", "foo.txt")
!gradle.hasOutputZipEntry("fabric-example-mod-1.0.0-sources.jar", "foo.txt")
!gradle.hasOutputZipEntry("fabric-example-mod-1.0.0-no-remap.jar", "foo.txt")
!gradle.hasOutputZipEntry("fabric-example-mod-1.0.0-no-remap-sources.jar", "foo.txt")
where:
version << STANDARD_TEST_VERSIONS
}
}