First pass on "shareCaches".

This commit is contained in:
modmuss50
2020-06-27 20:18:32 +01:00
parent 2d7421d4ed
commit 32eb0bd3c8
9 changed files with 411 additions and 10 deletions

View File

@@ -24,6 +24,7 @@
package net.fabricmc.loom;
import java.io.IOException;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
@@ -54,6 +55,8 @@ import net.fabricmc.loom.providers.MinecraftProvider;
import net.fabricmc.loom.providers.MappingsCache;
import net.fabricmc.loom.task.RemapJarTask;
import net.fabricmc.loom.task.RemapSourcesJarTask;
import net.fabricmc.loom.task.shared.RemapAllJarsTask;
import net.fabricmc.loom.task.shared.RemapAllSourcesTask;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.GroovyXmlUtil;
import net.fabricmc.loom.util.LoomDependencyManager;
@@ -64,7 +67,9 @@ import net.fabricmc.loom.util.mixin.JavaApInvoker;
import net.fabricmc.loom.util.mixin.KaptApInvoker;
import net.fabricmc.loom.util.mixin.ScalaApInvoker;
import net.fabricmc.loom.util.FabricApiExtension;
import net.fabricmc.loom.util.SourceRemapper;
import net.fabricmc.loom.util.DownloadUtil;
import net.fabricmc.loom.util.JarRemapper;
public class AbstractPlugin implements Plugin<Project> {
protected Project project;
@@ -268,6 +273,48 @@ public class AbstractPlugin implements Plugin<Project> {
}
}
SourceRemapper remapper = null;
Task parentTask = project1.getTasks().getByName("build");
if (extension.isShareCaches()) {
Project rootProject = project.getRootProject();
if (extension.isRootProject()) {
SourceRemapper sourceRemapper = new SourceRemapper(rootProject, false);
JarRemapper jarRemapper = new JarRemapper();
remapJarTask.jarRemapper = jarRemapper;
rootProject.getTasks().register("remapAllSources", RemapAllSourcesTask.class, task -> {
task.sourceRemapper = sourceRemapper;
task.doLast(t -> sourceRemapper.remapAll());
});
parentTask = rootProject.getTasks().getByName("remapAllSources");
rootProject.getTasks().register("remapAllJars", RemapAllJarsTask.class, task -> {
task.doLast(t -> {
try {
jarRemapper.remap();
} catch (IOException e) {
throw new RuntimeException("Failed to remap jars", e);
}
});
});
for (Project subProject : rootProject.getAllprojects()) {
subProject.getTasks().getByName("build").dependsOn(parentTask);
subProject.getTasks().getByName("build").dependsOn(rootProject.getTasks().getByName("remapAllJars"));
rootProject.getTasks().getByName("remapAllJars").dependsOn(subProject.getTasks().getByName("remapJar"));
}
} else {
parentTask = rootProject.getTasks().getByName("remapAllSources");
remapper = ((RemapAllSourcesTask) parentTask).sourceRemapper;
remapJarTask.jarRemapper = ((RemapJarTask) rootProject.getTasks().getByName("remapJar")).jarRemapper;
}
}
try {
AbstractArchiveTask sourcesTask = (AbstractArchiveTask) project1.getTasks().getByName("sourcesJar");
@@ -276,7 +323,12 @@ public class AbstractPlugin implements Plugin<Project> {
remapSourcesJarTask.setOutput(sourcesTask.getArchivePath());
remapSourcesJarTask.doLast(task -> project1.getArtifacts().add("archives", remapSourcesJarTask.getOutput()));
remapSourcesJarTask.dependsOn(project1.getTasks().getByName("sourcesJar"));
project1.getTasks().getByName("build").dependsOn(remapSourcesJarTask);
if (extension.isShareCaches()) {
remapSourcesJarTask.setSourceRemapper(remapper);
}
parentTask.dependsOn(remapSourcesJarTask);
} catch (UnknownTaskException e) {
// pass
}