Skip to content

Commit

Permalink
Skip the jarJar task when the input configurations are empty (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
Matyrobbrt authored Jun 15, 2024
1 parent 469dc9c commit 5f4bb80
Showing 1 changed file with 36 additions and 23 deletions.
59 changes: 36 additions & 23 deletions src/main/java/net/neoforged/moddevgradle/tasks/JarJar.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@
import net.neoforged.moddevgradle.internal.jarjar.ResolvedJarJarArtifact;
import org.gradle.api.DefaultTask;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.FileSystemOperations;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.TaskAction;
import org.jetbrains.annotations.ApiStatus;

Expand All @@ -28,6 +32,16 @@ public abstract class JarJar extends DefaultTask {
@ApiStatus.Internal
protected abstract JarJarArtifacts getJarJarArtifacts();

// Used for NO-SOURCE tracking to prevent the task from running if no configurations are defined
@InputFiles
@SkipWhenEmpty
@ApiStatus.Internal
protected abstract ConfigurableFileCollection getInputFiles();

@Inject
@ApiStatus.Internal
protected abstract ObjectFactory getObjects();

@OutputDirectory
public abstract DirectoryProperty getOutputDirectory();

Expand All @@ -42,44 +56,43 @@ public JarJar(FileSystemOperations fileSystemOperations) {
@TaskAction
protected void run() {
List<ResolvedJarJarArtifact> includedJars = getJarJarArtifacts().getResolvedArtifacts().get();
fileSystemOperations.delete(spec -> {
spec.delete(getOutputDirectory());
});
fileSystemOperations.copy(spec -> {
spec.into(getOutputDirectory().dir("META-INF/jarjar"));
spec.from(
includedJars.stream().map(ResolvedJarJarArtifact::getFile).collect(Collectors.toList())
);
if (!writeMetadata(includedJars).jars().isEmpty()) {
// Only copy metadata if not empty.
spec.from(getJarJarMetadataPath().toFile());
}
});
fileSystemOperations.delete(spec -> spec.delete(getOutputDirectory()));

// Only copy metadata if not empty, always delete
if (!includedJars.isEmpty()) {
fileSystemOperations.copy(spec -> {
spec.into(getOutputDirectory().dir("META-INF/jarjar"));
spec.from(includedJars.stream().map(ResolvedJarJarArtifact::getFile).toArray());
spec.from(writeMetadata(includedJars).toFile());
});
}
}

@SuppressWarnings("ResultOfMethodCallIgnored")
private Metadata writeMetadata(List<ResolvedJarJarArtifact> includedJars) {
private Path writeMetadata(List<ResolvedJarJarArtifact> includedJars) {
final Path metadataPath = getJarJarMetadataPath();
final Metadata metadata = createMetadata(includedJars);

if (!metadata.jars().isEmpty()) {
try {
metadataPath.toFile().getParentFile().mkdirs();
Files.deleteIfExists(metadataPath);
Files.write(metadataPath, MetadataIOHandler.toLines(metadata), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
} catch (IOException e) {
throw new RuntimeException("Failed to write JarJar dependency metadata to disk.", e);
}
try {
metadataPath.toFile().getParentFile().mkdirs();
Files.deleteIfExists(metadataPath);
Files.write(metadataPath, MetadataIOHandler.toLines(metadata), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
} catch (IOException e) {
throw new RuntimeException("Failed to write JarJar dependency metadata to disk.", e);
}
return metadata;
return metadataPath;
}

public void configuration(Configuration jarJarConfiguration) {
getInputFiles().from(jarJarConfiguration);
getJarJarArtifacts().configuration(jarJarConfiguration);
dependsOn(jarJarConfiguration);
}

public void setConfigurations(Collection<? extends Configuration> configurations) {
var newConfig = getObjects().fileCollection();
newConfig.from(configurations.toArray());
getInputFiles().setFrom(newConfig);
getJarJarArtifacts().setConfigurations(configurations);
configurations.forEach(this::dependsOn);
}
Expand Down

0 comments on commit 5f4bb80

Please sign in to comment.