From f783d8466d2b15f41a7bb3936891a4f20454a33f Mon Sep 17 00:00:00 2001 From: Andras Slemmer Date: Fri, 26 Aug 2016 12:11:23 +0100 Subject: [PATCH] build: Move definition of CanonicalizerPlugin into buildSrc --- .../main/groovy/CanonicalizerPlugin.groovy | 48 +++++++++++++++++++ contracts/build.gradle | 46 +----------------- contracts/isolated/build.gradle | 46 +----------------- 3 files changed, 50 insertions(+), 90 deletions(-) create mode 100644 buildSrc/src/main/groovy/CanonicalizerPlugin.groovy diff --git a/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy b/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy new file mode 100644 index 0000000000..0540487316 --- /dev/null +++ b/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy @@ -0,0 +1,48 @@ +import org.gradle.api.* + +import java.util.zip.ZipEntry +import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream + +// Custom Gradle plugin that attempts to make the resulting jar file deterministic. +// Ie. same contract definition should result when compiled in same jar file. +// This is done by removing date time stamps from the files inside the jar. +class CanonicalizerPlugin implements Plugin { + void apply(Project project) { + + project.getTasks().getByName('jar').doLast() { + + def zipPath = (String) project.jar.archivePath + def destPath = Files.createTempFile("processzip", null) + + def zeroTime = FileTime.fromMillis(0) + + def input = new ZipFile(zipPath) + def entries = input.entries().toList().sort { it.name } + + def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) + output.setMethod(ZipOutputStream.DEFLATED) + + entries.each { + def newEntry = new ZipEntry( it.name ) + + newEntry.setLastModifiedTime(zeroTime) + newEntry.setCreationTime(zeroTime) + newEntry.compressedSize = -1 + newEntry.size = it.size + newEntry.crc = it.crc + + output.putNextEntry(newEntry) + + ByteStreams.copy(input.getInputStream(it), output) + + output.closeEntry() + } + output.close() + input.close() + + Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) + } + + } +} diff --git a/contracts/build.gradle b/contracts/build.gradle index 3cbe693a47..ab7ef1953e 100644 --- a/contracts/build.gradle +++ b/contracts/build.gradle @@ -18,51 +18,7 @@ buildscript { } } -// Custom Gradle plugin that attempts to make the resulting jar file deterministic. -// Ie. same contract definition should result when compiled in same jar file. -// This is done by removing date time stamps from the files inside the jar. -class CanonicalizerPlugin implements Plugin { - void apply(Project project) { - - project.getTasks().getByName('jar').doLast() { - - def zipPath = (String) project.jar.archivePath - def destPath = Files.createTempFile("processzip", null) - - def zeroTime = FileTime.fromMillis(0) - - def input = new ZipFile(zipPath) - def entries = input.entries().toList().sort { it.name } - - def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) - output.setMethod(ZipOutputStream.DEFLATED) - - entries.each { - def newEntry = new ZipEntry(it.name) - - newEntry.setLastModifiedTime(zeroTime) - newEntry.setCreationTime(zeroTime) - newEntry.compressedSize = -1 - newEntry.size = it.size - newEntry.crc = it.crc - - output.putNextEntry(newEntry) - - ByteStreams.copy(input.getInputStream(it), output) - - output.closeEntry() - } - output.close() - input.close() - - Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) - } - - } -} - apply plugin: 'kotlin' - apply plugin: CanonicalizerPlugin repositories { @@ -87,4 +43,4 @@ sourceSets { srcDir "../config/test" } } -} \ No newline at end of file +} diff --git a/contracts/isolated/build.gradle b/contracts/isolated/build.gradle index 480fc6df48..2de6c2c765 100644 --- a/contracts/isolated/build.gradle +++ b/contracts/isolated/build.gradle @@ -18,51 +18,7 @@ buildscript { } } -// Custom Gradle plugin that attempts to make the resulting jar file deterministic. -// Ie. same contract definition should result when compiled in same jar file. -// This is done by removing date time stamps from the files inside the jar. -class CanonicalizerPlugin implements Plugin { - void apply(Project project) { - - project.getTasks().getByName('jar').doLast() { - - def zipPath = (String) project.jar.archivePath - def destPath = Files.createTempFile("processzip", null) - - def zeroTime = FileTime.fromMillis(0) - - def input = new ZipFile(zipPath) - def entries = input.entries().toList().sort { it.name } - - def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) - output.setMethod(ZipOutputStream.DEFLATED) - - entries.each { - def newEntry = new ZipEntry( it.name ) - - newEntry.setLastModifiedTime(zeroTime) - newEntry.setCreationTime(zeroTime) - newEntry.compressedSize = -1 - newEntry.size = it.size - newEntry.crc = it.crc - - output.putNextEntry(newEntry) - - ByteStreams.copy(input.getInputStream(it), output) - - output.closeEntry() - } - output.close() - input.close() - - Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) - } - - } -} - apply plugin: 'kotlin' - apply plugin: CanonicalizerPlugin repositories { @@ -85,4 +41,4 @@ sourceSets { srcDir "../../config/test" } } -} \ No newline at end of file +}