Rengenerate and download all files with --refresh-dependencies (#227)
* Re generate all files with --refresh-dependencies * Always re-process jar processors * Update mixin compile extensions
This commit is contained in:
		
							parent
							
								
									2f6071991c
								
							
						
					
					
						commit
						2d7421d4ed
					
				
					 10 changed files with 84 additions and 36 deletions
				
			
		|  | @ -51,6 +51,7 @@ import org.gradle.plugins.ide.idea.model.IdeaModel; | |||
| import net.fabricmc.loom.providers.LaunchProvider; | ||||
| import net.fabricmc.loom.providers.MappingsProvider; | ||||
| 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.util.Constants; | ||||
|  | @ -63,6 +64,7 @@ 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.DownloadUtil; | ||||
| 
 | ||||
| public class AbstractPlugin implements Plugin<Project> { | ||||
| 	protected Project project; | ||||
|  | @ -81,6 +83,14 @@ public class AbstractPlugin implements Plugin<Project> { | |||
| 
 | ||||
| 		project.getLogger().lifecycle("Fabric Loom: " + AbstractPlugin.class.getPackage().getImplementationVersion()); | ||||
| 
 | ||||
| 		boolean refreshDeps = project.getGradle().getStartParameter().isRefreshDependencies(); | ||||
| 		DownloadUtil.refreshDeps = refreshDeps; | ||||
| 
 | ||||
| 		if (refreshDeps) { | ||||
| 			MappingsCache.INSTANCE.invalidate(); | ||||
| 			project.getLogger().lifecycle("Refresh dependencies is in use, loom will be significantly slower."); | ||||
| 		} | ||||
| 
 | ||||
| 		// Apply default plugins | ||||
| 		project.apply(ImmutableMap.of("plugin", "java")); | ||||
| 		project.apply(ImmutableMap.of("plugin", "eclipse")); | ||||
|  | @ -135,33 +145,9 @@ public class AbstractPlugin implements Plugin<Project> { | |||
| 
 | ||||
| 		configureIDEs(); | ||||
| 		configureCompile(); | ||||
| 		configureMixin(); | ||||
| 		configureMaven(); | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureMixin() { | ||||
| 		if (project.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) { | ||||
| 			// If loom is applied after kapt, then kapt will use the AP arguments too early for loom to pass the arguments we need for mixin. | ||||
| 			throw new IllegalArgumentException("fabric-loom must be applied BEFORE kapt in the plugins { } block."); | ||||
| 		} | ||||
| 
 | ||||
| 		// Full plugin and mappings information is only available after evaluation | ||||
| 		project.afterEvaluate((project) -> { | ||||
| 			project.getLogger().lifecycle("Configuring compiler arguments for Java"); | ||||
| 			new JavaApInvoker(project).configureMixin(); | ||||
| 
 | ||||
| 			if (project.getPluginManager().hasPlugin("scala")) { | ||||
| 				project.getLogger().lifecycle("Configuring compiler arguments for Scala"); | ||||
| 				new ScalaApInvoker(project).configureMixin(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (project.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) { | ||||
| 				project.getLogger().lifecycle("Configuring compiler arguments for Kapt plugin"); | ||||
| 				new KaptApInvoker(project).configureMixin(); | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	public Project getProject() { | ||||
| 		return project; | ||||
| 	} | ||||
|  | @ -298,7 +284,25 @@ public class AbstractPlugin implements Plugin<Project> { | |||
| 				AbstractArchiveTask jarTask = (AbstractArchiveTask) project1.getTasks().getByName("jar"); | ||||
| 				extension.addUnmappedMod(jarTask.getArchivePath().toPath()); | ||||
| 			} | ||||
| 
 | ||||
| 			project.getLogger().lifecycle("Configuring compiler arguments for Java"); | ||||
| 			new JavaApInvoker(project).configureMixin(); | ||||
| 
 | ||||
| 			if (project.getPluginManager().hasPlugin("scala")) { | ||||
| 				project.getLogger().lifecycle("Configuring compiler arguments for Scala"); | ||||
| 				new ScalaApInvoker(project).configureMixin(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (project.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) { | ||||
| 				project.getLogger().lifecycle("Configuring compiler arguments for Kapt plugin"); | ||||
| 				new KaptApInvoker(project).configureMixin(); | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		if (project.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) { | ||||
| 			// If loom is applied after kapt, then kapt will use the AP arguments too early for loom to pass the arguments we need for mixin. | ||||
| 			throw new IllegalArgumentException("fabric-loom must be applied BEFORE kapt in the plugins { } block."); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	protected void configureMaven() { | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ public class MinecraftProcessedProvider extends MinecraftMappedProvider { | |||
| 
 | ||||
| 	@Override | ||||
| 	protected void addDependencies(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) { | ||||
| 		if (jarProcessorManager.isInvalid(projectMappedJar)) { | ||||
| 		if (jarProcessorManager.isInvalid(projectMappedJar) || isRefreshDeps()) { | ||||
| 			getProject().getLogger().lifecycle(":processing mapped jar"); | ||||
| 			invalidateJars(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -47,6 +47,8 @@ public class ModDependencyInfo { | |||
| 
 | ||||
| 	public final RemapData remapData; | ||||
| 
 | ||||
| 	private boolean forceRemap = false; | ||||
| 
 | ||||
| 	public ModDependencyInfo(String group, String name, String version, String classifier, File inputFile, File sourcesFile, Configuration targetConfig, RemapData remapData) { | ||||
| 		this.group = group; | ||||
| 		this.name = name; | ||||
|  | @ -75,13 +77,17 @@ public class ModDependencyInfo { | |||
| 	} | ||||
| 
 | ||||
| 	public boolean requiresRemapping() { | ||||
| 		return !getRemappedOutput().exists() || inputFile.lastModified() <= 0 || inputFile.lastModified() > getRemappedOutput().lastModified(); | ||||
| 		return !getRemappedOutput().exists() || inputFile.lastModified() <= 0 || inputFile.lastModified() > getRemappedOutput().lastModified() || forceRemap; | ||||
| 	} | ||||
| 
 | ||||
| 	public void finaliseRemapping() { | ||||
| 		getRemappedOutput().setLastModified(inputFile.lastModified()); | ||||
| 	} | ||||
| 
 | ||||
| 	public void forceRemap() { | ||||
| 		forceRemap = true; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public String toString() { | ||||
| 		return String.format("%s:%s:%s:%s", group, name, version, classifier); | ||||
|  |  | |||
|  | @ -62,4 +62,8 @@ public final class MappingsCache { | |||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public void invalidate() { | ||||
| 		mappingsCache.clear(); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -113,6 +113,10 @@ public class MappingsProvider extends DependencyProvider { | |||
| 
 | ||||
| 		initFiles(); | ||||
| 
 | ||||
| 		if (isRefreshDeps()) { | ||||
| 			cleanFiles(); | ||||
| 		} | ||||
| 
 | ||||
| 		Files.createDirectories(mappingsDir); | ||||
| 		Files.createDirectories(mappingsStepsDir); | ||||
| 
 | ||||
|  | @ -126,11 +130,11 @@ public class MappingsProvider extends DependencyProvider { | |||
| 		tinyMappings = mappingsDir.resolve(StringUtils.removeSuffix(mappingsJar.getName(), ".jar") + ".tiny").toFile(); | ||||
| 		tinyMappingsJar = new File(getExtension().getUserCache(), mappingsJar.getName().replace(".jar", "-" + jarClassifier + ".jar")); | ||||
| 
 | ||||
| 		if (!tinyMappings.exists()) { | ||||
| 		if (!tinyMappings.exists() || isRefreshDeps()) { | ||||
| 			storeMappings(getProject(), minecraftProvider, mappingsJar.toPath()); | ||||
| 		} | ||||
| 
 | ||||
| 		if (!tinyMappingsJar.exists()) { | ||||
| 		if (!tinyMappingsJar.exists() || isRefreshDeps()) { | ||||
| 			ZipUtil.pack(new ZipEntrySource[] {new FileSource("mappings/mappings.tiny", tinyMappings)}, tinyMappingsJar); | ||||
| 		} | ||||
| 
 | ||||
|  | @ -273,11 +277,23 @@ public class MappingsProvider extends DependencyProvider { | |||
| 
 | ||||
| 	public void cleanFiles() { | ||||
| 		try { | ||||
| 			Files.walkFileTree(mappingsStepsDir, new DeletingFileVisitor()); | ||||
| 			Files.deleteIfExists(baseTinyMappings); | ||||
| 			if (Files.exists(mappingsStepsDir)) { | ||||
| 				Files.walkFileTree(mappingsStepsDir, new DeletingFileVisitor()); | ||||
| 			} | ||||
| 
 | ||||
| 			if (Files.exists(baseTinyMappings)) { | ||||
| 				Files.deleteIfExists(baseTinyMappings); | ||||
| 			} | ||||
| 
 | ||||
| 			mappingsMixinExport.delete(); | ||||
| 			tinyMappings.delete(); | ||||
| 			tinyMappingsJar.delete(); | ||||
| 
 | ||||
| 			if (tinyMappings != null) { | ||||
| 				tinyMappings.delete(); | ||||
| 			} | ||||
| 
 | ||||
| 			if (tinyMappingsJar != null) { | ||||
| 				tinyMappingsJar.delete(); | ||||
| 			} | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ public class MinecraftMappedProvider extends DependencyProvider { | |||
| 			throw new RuntimeException("input merged jar not found"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (!minecraftMappedJar.exists() || !getIntermediaryJar().exists()) { | ||||
| 		if (!minecraftMappedJar.exists() || !getIntermediaryJar().exists() || isRefreshDeps()) { | ||||
| 			if (minecraftMappedJar.exists()) { | ||||
| 				minecraftMappedJar.delete(); | ||||
| 			} | ||||
|  |  | |||
|  | @ -97,7 +97,7 @@ public class MinecraftProvider extends DependencyProvider { | |||
| 		libraryProvider = new MinecraftLibraryProvider(); | ||||
| 		libraryProvider.provide(this, getProject()); | ||||
| 
 | ||||
| 		if (!minecraftMergedJar.exists()) { | ||||
| 		if (!minecraftMergedJar.exists() || isRefreshDeps()) { | ||||
| 			try { | ||||
| 				mergeJars(getProject().getLogger()); | ||||
| 			} catch (ZipError e) { | ||||
|  | @ -160,7 +160,7 @@ public class MinecraftProvider extends DependencyProvider { | |||
| 					throw new GradleException("Minecraft " + minecraftVersion + " manifest not found at " + minecraftJson.getAbsolutePath()); | ||||
| 				} | ||||
| 			} else { | ||||
| 				if (StaticPathWatcher.INSTANCE.hasFileChanged(minecraftJson.toPath())) { | ||||
| 				if (StaticPathWatcher.INSTANCE.hasFileChanged(minecraftJson.toPath()) || isRefreshDeps()) { | ||||
| 					getProject().getLogger().debug("Downloading Minecraft {} manifest", minecraftVersion); | ||||
| 					DownloadUtil.downloadIfChanged(new URL(optionalVersion.get().url), minecraftJson, getProject().getLogger()); | ||||
| 				} | ||||
|  |  | |||
|  | @ -91,6 +91,10 @@ public abstract class DependencyProvider { | |||
| 		return extension; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isRefreshDeps() { | ||||
| 		return getProject().getGradle().getStartParameter().isRefreshDependencies(); | ||||
| 	} | ||||
| 
 | ||||
| 	public static class DependencyInfo { | ||||
| 		final Project project; | ||||
| 		final Dependency dependency; | ||||
|  |  | |||
|  | @ -36,6 +36,8 @@ import org.gradle.api.Project; | |||
| import org.gradle.api.logging.Logger; | ||||
| 
 | ||||
| public class DownloadUtil { | ||||
| 	public static boolean refreshDeps = false; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Download from the given {@link URL} to the given {@link File} so long as there are differences between them. | ||||
| 	 * | ||||
|  | @ -60,6 +62,11 @@ public class DownloadUtil { | |||
| 	public static void downloadIfChanged(URL from, File to, Logger logger, boolean quiet) throws IOException { | ||||
| 		HttpURLConnection connection = (HttpURLConnection) from.openConnection(); | ||||
| 
 | ||||
| 		if (refreshDeps) { | ||||
| 			getETagFile(to).delete(); | ||||
| 			to.delete(); | ||||
| 		} | ||||
| 
 | ||||
| 		//If the output already exists we'll use it's last modified time | ||||
| 		if (to.exists()) { | ||||
| 			connection.setIfModifiedSince(to.lastModified()); | ||||
|  |  | |||
|  | @ -53,6 +53,7 @@ public class ModCompileRemapper { | |||
| 	public static void remapDependencies(Project project, String mappingsSuffix, LoomGradleExtension extension, SourceRemapper sourceRemapper) { | ||||
| 		Logger logger = project.getLogger(); | ||||
| 		DependencyHandler dependencies = project.getDependencies(); | ||||
| 		boolean refreshDeps = project.getGradle().getStartParameter().isRefreshDependencies(); | ||||
| 
 | ||||
| 		final File modStore = extension.getRemappedModCache(); | ||||
| 		final RemapData remapData = new RemapData(mappingsSuffix, modStore); | ||||
|  | @ -90,6 +91,11 @@ public class ModCompileRemapper { | |||
| 				File sources = findSources(dependencies, artifact); | ||||
| 
 | ||||
| 				ModDependencyInfo info = new ModDependencyInfo(group, name, version, classifierSuffix, artifact.getFile(), sources, remappedConfig, remapData); | ||||
| 
 | ||||
| 				if (refreshDeps) { | ||||
| 					info.forceRemap(); | ||||
| 				} | ||||
| 
 | ||||
| 				modDependencies.add(info); | ||||
| 
 | ||||
| 				String remappedLog = group + ":" + name + ":" + version + classifierSuffix + " (" + mappingsSuffix + ")"; | ||||
|  | @ -162,8 +168,9 @@ public class ModCompileRemapper { | |||
| 	private static void scheduleSourcesRemapping(Project project, SourceRemapper sourceRemapper, File sources, String remappedLog, String remappedFilename, File modStore) { | ||||
| 		project.getLogger().info(":providing " + remappedLog + " sources"); | ||||
| 		File remappedSources = new File(modStore, remappedFilename + "-sources.jar"); | ||||
| 		boolean refreshDeps = project.getGradle().getStartParameter().isRefreshDependencies(); | ||||
| 
 | ||||
| 		if (!remappedSources.exists() || sources.lastModified() <= 0 || sources.lastModified() > remappedSources.lastModified()) { | ||||
| 		if (!remappedSources.exists() || sources.lastModified() <= 0 || sources.lastModified() > remappedSources.lastModified() || refreshDeps) { | ||||
| 			try { | ||||
| 				sourceRemapper.scheduleRemapSources(sources, remappedSources); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue