Remap less (#77)

* Avoid remapping jars every time Loom starts

* Attempt to find installer JSON if it isn't found

Remapping Fabric-Loader used to find it every time, now we might skip that we have to go looking for it

* Log a little more when skipping things

Makes it more clear cut when it is avoiding doing things compared to failing after trying
dev/0.11
Chocohead 2019-04-20 18:47:32 +01:00 committed by Modmuss50
parent 86ae0146d9
commit 03fb478166
3 changed files with 46 additions and 11 deletions

View File

@ -50,17 +50,21 @@ public class ModRemapperProvider extends DependencyProvider {
//Output name should match whatever it's under as a dependency so Gradle finds it
String outputNamePrefix = rds.substring(rds.indexOf(':') + 1).replace(':', '-') + verSuffix; //group:name:version -> name-version.mapped.yarn.5
File modStore = extension.getRemappedModCache();
File output = new File(modStore, outputNamePrefix + ".jar");
if(output.exists()){
output.delete();
}
File output = new File(modStore, outputNamePrefix + ".jar");
if (!output.exists() || input.lastModified() <= 0 || input.lastModified() > output.lastModified()) {
//If the output doesn't exist, or appears to be outdated compared to the input we'll remap it
ModProcessor.handleMod(input, output, project);
if (!output.exists()){
throw new RuntimeException("Failed to remap mod");
}
output.setLastModified(input.lastModified());
} else {
project.getLogger().info(output.getName() + " is up to date with " + input.getName());
}
project.getDependencies().add(Constants.COMPILE_MODS_MAPPED, project.getDependencies().module(
rds + verSuffix
));
@ -71,11 +75,23 @@ public class ModRemapperProvider extends DependencyProvider {
if (sourcesFile.isPresent()) {
project.getLogger().lifecycle(":providing " + rds + " sources");
File sources = sourcesFile.get();
File remappedSources = new File(modStore, outputNamePrefix + "-sources.jar");
if (!remappedSources.exists() || sources.lastModified() <= 0 || sources.lastModified() > remappedSources.lastModified()) {
try {
SourceRemapper.remapSources(project, sourcesFile.get(), new File(modStore, outputNamePrefix + "-sources.jar"), true);
SourceRemapper.remapSources(project, sources, remappedSources, true);
//Set the remapped sources creation date to match the sources if we're likely succeeded in making it
remappedSources.setLastModified(sources.lastModified());
} catch (Exception e) {
e.printStackTrace();
}
} else {
project.getLogger().info(remappedSources.getName() + " is up to date with " + sources.getName());
}
} else {
project.getLogger().info(":skipping " + rds + " sources, not found");
}
});
}

View File

@ -30,9 +30,11 @@ import net.fabricmc.loom.util.DependencyProvider.DependencyInfo;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.ExternalModuleDependency;
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
@ -87,6 +89,23 @@ public class LoomDependencyManager {
});
}
if (extension.getInstallerJson() == null) {
//If we've not found the installer JSON we've probably skipped remapping Fabric loader, let's go looking
project.getLogger().info("Didn't find installer JSON, searching through compileMods");
Configuration configuration = project.getConfigurations().getByName(Constants.COMPILE_MODS);
for (Dependency dependency : configuration.getDependencies()) {
DependencyInfo info = DependencyInfo.create(project, dependency, configuration);
File input = info.resolveFile().orElseThrow(() -> new RuntimeException("Could not find dependency " + info));
ModProcessor.readInstallerJson(input, project);
if (extension.getInstallerJson() != null) {
project.getLogger().info("Found installer JSON in " + info);
break; //Found it, probably don't need to look any further
}
}
}
if (extension.getInstallerJson() != null) {
handleInstallerJson(extension.getInstallerJson(), project);
} else {

View File

@ -190,7 +190,7 @@ public class ModProcessor {
}
}
private static void readInstallerJson(File file, Project project){
static void readInstallerJson(File file, Project project){
try {
JarFile jarFile = new JarFile(file);