diff --git a/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch b/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch deleted file mode 100644 index f353d072..00000000 --- a/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch +++ /dev/null @@ -1,37 +0,0 @@ -From a1b7d25752424f267f5e9d299babc0403dbf7752 Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 19:44:44 +0200 -Subject: [PATCH] Add build.gradle - ---- - build.gradle | 23 +++++++++++++++++++++++ - 1 file changed, 23 insertions(+) - create mode 100644 build.gradle - -diff --git a/build.gradle b/build.gradle -new file mode 100644 -index 0000000..22fa679 ---- /dev/null -+++ b/build.gradle -@@ -0,0 +1,18 @@ -+apply plugin: 'java' -+ -+sourceCompatibility = 1.8 -+ -+sourceSets { -+ main { -+ java { -+ srcDirs = ['src'] -+ } -+ } -+} -+ -+jar { -+ manifest { -+ attributes 'Main-Class': 'org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler' -+ } -+} -+ --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch b/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch deleted file mode 100644 index 03889914..00000000 --- a/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch +++ /dev/null @@ -1,54 +0,0 @@ -From c245b961e83176a1731a7eaf1f1f3ffbefa1afb7 Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 19:08:56 +0200 -Subject: [PATCH 2/7] Remove/replace all buildscript dependencies - ---- - build.gradle | 24 +----------------------- - 1 file changed, 1 insertion(+), 23 deletions(-) - -diff --git a/build.gradle b/build.gradle -index e0c46ea..165dbe4 100644 ---- a/build.gradle -+++ b/build.gradle -@@ -5,13 +5,11 @@ - } - dependencies { -- classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0' - classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' - } - } - - // Apply plugin - apply plugin: 'java' --apply plugin: 'license' - apply plugin: 'checkstyle' - apply plugin: 'maven' - apply plugin: 'eclipse' -@@ -170,23 +165,6 @@ tasks.withType(AbstractArchiveTask) { - from 'LICENSE.txt' - } - --// License header formatting --license { -- ext { -- name = project.name -- organization = project.organization -- url = project.url -- } -- include '**/*.java' -- header file("HEADER.txt") -- sourceSets = project.sourceSets -- ignoreFailures false -- strictCheck true -- mapping { -- java = 'SLASHSTAR_STYLE' -- } --} -- - checkstyle { - configProperties = [ - "name" : project.name, --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch b/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch deleted file mode 100644 index 2b198da3..00000000 --- a/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0f250141ba6515dbeffeb0722bf29976850bb323 Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 19:13:17 +0200 -Subject: [PATCH 3/7] Fix for Gradle 3 - ---- - build.gradle | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/build.gradle b/build.gradle -index 165dbe4..0f189ec 100644 ---- a/build.gradle -+++ b/build.gradle -@@ -92,7 +92,7 @@ dependencies { - - // Task to read ASM library and rename packages - task renamedASM { -- outputs.file files(configurations.asm.files.withIndex().collect { file, i -> def dep = configurations.asm.dependencies[i] -+ outputs.files files(configurations.asm.files.withIndex().collect { file, i -> def dep = configurations.asm.dependencies[i] - new File(new File(renamedPackageRoot, "org/spongepowered/mixin-" + dep.name + "/" + dep.version), "mixin-" + file.name).path - }) - ant { --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch b/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch deleted file mode 100644 index 6ea99932..00000000 --- a/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch +++ /dev/null @@ -1,42 +0,0 @@ -From eb4fa04cf82067b20caa7222c154f8b6f7ab95ac Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 19:13:45 +0200 -Subject: [PATCH 4/7] Disable checkstyle - ---- - build.gradle | 12 ------------ - 1 file changed, 12 deletions(-) - -diff --git a/build.gradle b/build.gradle -index 0f189ec..f8598a3 100644 ---- a/build.gradle -+++ b/build.gradle -@@ -7,7 +7,6 @@ buildscript { - - // Apply plugin - apply plugin: 'java' --apply plugin: 'checkstyle' - apply plugin: 'maven' - apply plugin: 'eclipse' - apply plugin: 'idea' -@@ -165,17 +164,6 @@ tasks.withType(AbstractArchiveTask) { - from 'LICENSE.txt' - } - --checkstyle { -- configProperties = [ -- "name" : project.name, -- "organization": project.organization, -- "url" : project.url, -- "year" : project.inceptionYear -- ] -- configFile = file("checkstyle.xml") -- toolVersion = '6.19' --} -- - // Source compiler configuration - tasks.withType(JavaCompile) { - options.compilerArgs += ['-Xlint:all', '-Xlint:-path'] --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch b/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch deleted file mode 100644 index 4c92d2cd..00000000 --- a/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c66ba83e4b27f6f094c2dcdaaac095d3ca69b41c Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 19:35:08 +0200 -Subject: [PATCH 5/7] Replace fernflower SNAPSHOT depencency - ---- - build.gradle | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/build.gradle b/build.gradle -index f8598a3..e9a965b 100644 ---- a/build.gradle -+++ b/build.gradle -@@ -143,7 +143,7 @@ dependencies { - - // Fernflower decompiler - fernflowerCompile configurations.compile -- fernflowerCompile 'org.jetbrains.java.decompiler:fernflower:sponge-SNAPSHOT' -+ fernflowerCompile 'reprod:fernflower:0' - - // LegacyLauncher service - launchwrapperCompile configurations.compile --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch b/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch deleted file mode 100644 index 102d778d..00000000 --- a/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 6422d5985faeff394237a499e5529b765dd46b7e Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 21:40:59 +0200 -Subject: [PATCH 6/7] Use TreeMap in ReferenceMapper for reproducibility - ---- - .../java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java b/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java -index 2a368e7..082b5dd 100644 ---- a/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java -+++ b/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java -@@ -29,7 +29,6 @@ import java.io.InputStream; - import java.io.InputStreamReader; - import java.io.Reader; - import java.io.Serializable; --import java.util.HashMap; - import java.util.Map; - - import org.apache.commons.io.IOUtils; -@@ -71,13 +70,13 @@ public final class ReferenceMapper implements Serializable { - * by the AP. Each entry is keyed by the owning mixin, with the value map - * containing the actual remappings for each owner - */ -- private final Map> mappings = Maps.newHashMap(); -+ private final Map> mappings = Maps.newTreeMap(); - - /** - * All mapping sets, keyed by environment type, eg. "notch", "searge". The - * format of each map within this map is the same as for {@link #mappings} - */ -- private final Map>> data = Maps.newHashMap(); -+ private final Map>> data = Maps.newTreeMap(); - - /** - * True if this refmap cannot be written. Only true for the -@@ -191,13 +190,13 @@ public final class ReferenceMapper implements Serializable { - if (context != null) { - mappings = this.data.get(context); - if (mappings == null) { -- mappings = Maps.newHashMap(); -+ mappings = Maps.newTreeMap(); - this.data.put(context, mappings); - } - } - Map classMappings = mappings.get(className); - if (classMappings == null) { -- classMappings = new HashMap(); -+ classMappings = Maps.newTreeMap(); - mappings.put(className, classMappings); - } - return classMappings.put(reference, newReference); --- -2.5.5 - diff --git a/gradle/reprod/patches/mixin/0008-Do-not-include-java-version-and-user-name-in-jar.patch b/gradle/reprod/patches/mixin/0008-Do-not-include-java-version-and-user-name-in-jar.patch deleted file mode 100644 index 1c510fe0..00000000 --- a/gradle/reprod/patches/mixin/0008-Do-not-include-java-version-and-user-name-in-jar.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c3d6d12f47bae3c12c597e59d9a69989fdaa9550 Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Fri, 25 Aug 2017 19:27:13 +0200 -Subject: [PATCH] Do not include java version and user name in jar - ---- - build.gradle | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/build.gradle b/build.gradle -index debc97b..ae53e1b 100644 ---- a/build.gradle -+++ b/build.gradle -@@ -241,8 +241,7 @@ jar { - - // JAR manifest configuration - manifest.mainAttributes( -- "Built-By": System.properties['user.name'], -- "Created-By": System.properties['java.vm.version'] + " (" + System.properties['java.vm.vendor'] + ")", -+ "Built-By": 'ReplayMod reprod', - "Implementation-Title": name, - "Implementation-Version": version + "+" + ciSystem + "-b" + buildNumber + ".git-" + commit, - "Implementation-Vendor": url, --- -2.13.2 - diff --git a/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch b/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch deleted file mode 100644 index f05ab1dc..00000000 --- a/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 9e4e7ac3f8ee5508939cf71e731189e4c0e1c7b5 Mon Sep 17 00:00:00 2001 -From: Jonas Herzig -Date: Tue, 8 Aug 2017 20:06:39 +0200 -Subject: [PATCH 2/5] Replace mixin dep with manually built one - ---- - build.gradle | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/build.gradle b/build.gradle -index 42d0607..bfa3914 100755 ---- a/build.gradle -+++ b/build.gradle -@@ -44,7 +44,7 @@ configurations { - dependencies { - compile 'org.projectlombok:lombok:1.16.4' - -- compile 'org.spongepowered:mixin:0.7.5-SNAPSHOT' -+ compile 'reprod:mixin:0' - shade 'com.googlecode.mp4parser:isoparser:1.1.7' - shade 'org.apache.commons:commons-exec:1.3' - shade 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0' --- -2.5.5 - diff --git a/gradle/reprod/setup.sh b/gradle/reprod/setup.sh index b0f0b10e..f7adc208 100755 --- a/gradle/reprod/setup.sh +++ b/gradle/reprod/setup.sh @@ -102,9 +102,6 @@ java -Dproxywitness.httpUris=http://export.mcpbot.bspk.rs/versions.json -jar dep proxy_pid=$! trap "kill $proxy_pid" EXIT -# Required for mixin -setup_dep "fernflower" "https://github.com/fesh0r/fernflower.git" "adbf29f8ce902cd164fc0c41491030268ecc8265" "build/libs/fernflower.jar" "d2042d3121118a7175fc902d0e49f4ad37d00467e7ea535574974142eff64184" "901b8a76ceb15db97d4dd19c5e8fcb0fc226ae602ef38ea906eb5258be9b929a" - # Required for forgegradle setup_dep "forgeflower" "https://github.com/MinecraftForge/ForgeFlower.git" "41d2b9e00556bc735a2ee4181db7f30db0805816" "ForgeFlower/build/libs/forgeflower-1.0.342-SNAPSHOT.jar" "652d00f6c890c45b56dace444c3e9a7f81b56f510633f183a1fcc50681ba85b9" "79bca0778c764371c62aa9a9496c9fb04b3d8a0ff18047b8e6ef178d3d1ac600" setup_dep "mcinjector" "https://github.com/ModCoderPack/MCInjector.git" "7258466461baf7dc4f313b06b0d589407e4e1fba" "build/libs/mcinjector-3.4-SNAPSHOT.jar" "98b685ea0d3ae9fad8b8a7e7b885512f7fe0b61becf27d9c74b91a626d107efc" "3c08655c11e6509bfc62ff87d0770cefa0ecbd8dccece9e083c9b7b89779a8c5" @@ -113,7 +110,6 @@ setup_dep "srg2source" "https://github.com/MinecraftForge/Srg2Source.git" "ea4ea # Required for RM setup_dep "mixingradle" "https://github.com/SpongePowered/MixinGradle.git" "52217aa8ca221dcd0b9fb657b037e663db808f38" "build/libs/mixingradle-0.4-SNAPSHOT.jar" "8b3508867128a5d564631635dff898a36f9aca8db54b7bb3af6f4924e3f4bead" "42cbf81136d4e26c06d3234427665b50d18768cc1f210512204ca1d5e3a42b5c" setup_dep "forgegradle" "https://github.com/MinecraftForge/ForgeGradle.git" "f49079dd11c037f74cc740285b2c5504fbf8a7f6" "build/libs/ForgeGradle-2.3-SNAPSHOT.jar" "8272cf68ae269c315969e3e94a41bdffe1cf96cfbc6d701cafda90ab19ef5f94" "9261c0855a19d86434c6f9e784265d91e3e3c9f12b29dd90f41efacd15add41e" -setup_dep "mixin" "https://github.com/SpongePowered/Mixin.git" "404f5da0b6b18980b4e44c7f1cfeddcd47fe4aa6" "build/libs/mixin-0.7.5-SNAPSHOT.jar" "7d181a5e7c317c00c07da14e7770e4356b0f201414cd2a836e987be9fa133d43" "11000383a5051f25a70c2bff3a3167b6859ae4f9838a0ab45560e9f9c9d9def7" rm -rf tmp mkdir tmp diff --git a/versions/common.gradle b/versions/common.gradle index 719ea615..1885ede5 100644 --- a/versions/common.gradle +++ b/versions/common.gradle @@ -42,6 +42,8 @@ configurations { } dependencies { + // Note: All but the latest version of mixin SNAPSHOTs are practically release versions, so we use them as such + // Do NOT update to the latest version (always only one before that one; should be the one listed in their README) compile 'org.spongepowered:mixin:0.7.5-SNAPSHOT' shade 'com.googlecode.mp4parser:isoparser:1.1.7' shade 'org.apache.commons:commons-exec:1.3' @@ -215,7 +217,30 @@ setupDecompWorkspace.dependsOn copySrg setupDevWorkspace.dependsOn copySrg project.tasks.idea.dependsOn copySrg - +// Mixin uses multiple HashMaps to generate the refmap. +// HashMaps are unordered collections and as such do not produce deterministic output. +// To fix that, we simply sort the refmap json file. +import groovy.json.JsonSlurper +import groovy.json.JsonOutput +compileJava.doLast { + File refmapFile = compileJava.ext.refMapFile + if (refmapFile.exists()) { + def ordered + ordered = { + if (it instanceof Map) { + def sorted = new TreeMap(it) + sorted.replaceAll { k, v -> ordered(v) } + sorted + } else if (it instanceof List) { + it.replaceAll { v -> ordered(v) } + } else { + it + } + } + def json = JsonOutput.toJson(ordered(new JsonSlurper().parse(refmapFile))) + refmapFile.withWriter { it.write json } + } +} import java.util.zip.ZipEntry import java.util.zip.ZipFile