Factor out recurring pattern in download tasks
This commit is contained in:
parent
848530f39a
commit
1d2a8a3e7e
|
@ -0,0 +1,46 @@
|
|||
import org.gradle.api.tasks.*
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// download and use checksum to verify that we got what we expected
|
||||
//
|
||||
|
||||
class VerifiedDownload extends org.gradle.api.DefaultTask {
|
||||
|
||||
// URL of resource to download
|
||||
def @Input src
|
||||
|
||||
// expected checksum of resource as hex digits
|
||||
def @Input checksum
|
||||
|
||||
// algorithm to use for computing checksum
|
||||
def @Input algorithm = 'MD5'
|
||||
|
||||
// whether to use ETag for selective downloading
|
||||
def @Input useETag = true
|
||||
|
||||
// local file into which resource should be saved
|
||||
def @OutputFile dest
|
||||
|
||||
File getDest() {
|
||||
return project.file(dest)
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
downloadAndVerify() {
|
||||
def destFile = getDest()
|
||||
project.download {
|
||||
src this.src
|
||||
dest destFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag this.useETag
|
||||
}
|
||||
project.verifyChecksum {
|
||||
src destFile
|
||||
algorithm this.algorithm
|
||||
checksum this.checksum
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,31 +6,10 @@ sourceSets.test.java.srcDirs = ['src']
|
|||
// download JLex
|
||||
//
|
||||
|
||||
class VerifiedDownload extends org.gradle.api.DefaultTask {
|
||||
|
||||
@Input String src
|
||||
@Input String checksum
|
||||
@OutputFile File dest
|
||||
|
||||
@TaskAction
|
||||
downloadAndVerify() {
|
||||
download {
|
||||
src this.src
|
||||
dest this.dest
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
}
|
||||
verifyChecksum {
|
||||
src this.dest
|
||||
checksum this.checksum
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task downloadJLex(type: VerifiedDownload) {
|
||||
src 'http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java'
|
||||
checksum 'fe0cff5db3e2f0f5d67a153cf6c783af'
|
||||
dest file('src/JLex/Main.java')
|
||||
dest 'src/JLex/Main.java'
|
||||
}
|
||||
|
||||
task cleanDownloadJLex(type: Delete) {
|
||||
|
|
|
@ -10,21 +10,10 @@ dependencies {
|
|||
)
|
||||
}
|
||||
|
||||
task downloadNodeJS {
|
||||
outputs.file "$temporaryDir/nodejs.zip"
|
||||
doLast {
|
||||
download {
|
||||
src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135'
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum '33c5ba7a5d45644e70d268d8ad3e57df'
|
||||
}
|
||||
}
|
||||
task downloadNodeJS(type: VerifiedDownload) {
|
||||
src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135'
|
||||
dest "$temporaryDir/nodejs.zip"
|
||||
checksum '33c5ba7a5d45644e70d268d8ad3e57df'
|
||||
}
|
||||
|
||||
task unpackNodeJSLib(type: Copy, dependsOn: downloadNodeJS) {
|
||||
|
|
|
@ -1,22 +1,11 @@
|
|||
apply plugin: 'base'
|
||||
|
||||
task downloadAjaxslt {
|
||||
task downloadAjaxslt(type: VerifiedDownload) {
|
||||
def version = '0.8.1'
|
||||
def versionedArchive = "ajaxslt-${version}.tar.gz"
|
||||
outputs.file "$temporaryDir/$versionedArchive"
|
||||
doLast {
|
||||
download {
|
||||
src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive"
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum 'c995abe3310a401bb4db7f28a6409756'
|
||||
}
|
||||
}
|
||||
src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive"
|
||||
dest "$temporaryDir/$versionedArchive"
|
||||
checksum 'c995abe3310a401bb4db7f28a6409756'
|
||||
}
|
||||
|
||||
task unpackAjaxslt(type: Sync, dependsOn: downloadAjaxslt) {
|
||||
|
|
|
@ -10,25 +10,13 @@ sourceSets.test.java.srcDirs = ['src']
|
|||
// download and extract "bcel-5.2.jar"
|
||||
//
|
||||
|
||||
task downloadBcel {
|
||||
ext {
|
||||
version = '5.2'
|
||||
}
|
||||
task downloadBcel(type: VerifiedDownload) {
|
||||
ext.version = '5.2'
|
||||
def archive = "bcel-${version}.tar.gz"
|
||||
outputs.file "$temporaryDir/$archive"
|
||||
doLast {
|
||||
download {
|
||||
src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive"
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag false // server does not provide ETags
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum '19bffd7f217b0eae415f1ef87af2f0bc'
|
||||
}
|
||||
}
|
||||
src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive"
|
||||
dest "$temporaryDir/$archive"
|
||||
checksum '19bffd7f217b0eae415f1ef87af2f0bc'
|
||||
useETag false
|
||||
}
|
||||
|
||||
task extractBcel(type: Copy, dependsOn: downloadBcel) {
|
||||
|
@ -56,22 +44,11 @@ clean.dependsOn cleanExtractBcel
|
|||
// download "java-cup-11a.jar"
|
||||
//
|
||||
|
||||
task downloadJavaCup {
|
||||
task downloadJavaCup(type: VerifiedDownload) {
|
||||
def archive = 'java-cup-11a.jar'
|
||||
outputs.file "$projectDir/$archive"
|
||||
doLast {
|
||||
download {
|
||||
src "http://www2.cs.tum.edu/projects/cup/$archive"
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum '2bda8c40abd0cbc295d3038643d6e4ec'
|
||||
}
|
||||
}
|
||||
src "http://www2.cs.tum.edu/projects/cup/$archive"
|
||||
dest "$projectDir/$archive"
|
||||
checksum '2bda8c40abd0cbc295d3038643d6e4ec'
|
||||
}
|
||||
|
||||
task cleanDownloadJavaCup(type: Delete) {
|
||||
|
@ -106,24 +83,13 @@ clean.dependsOn cleanCollectJLex
|
|||
// generate "hello_hash.jar"
|
||||
//
|
||||
|
||||
task downloadOcamlJava {
|
||||
task downloadOcamlJava(type: VerifiedDownload) {
|
||||
def version = '2.0-alpha1'
|
||||
ext.basename = "ocamljava-$version"
|
||||
def archive = "${basename}.tar.gz"
|
||||
outputs.file "$temporaryDir/$archive"
|
||||
doLast {
|
||||
download {
|
||||
src "http://www.ocamljava.org/downloads/download.php?version=$version-bin"
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum '45feec6e3889f5073a39c2c4c84878d1'
|
||||
}
|
||||
}
|
||||
src "http://www.ocamljava.org/downloads/download.php?version=$version-bin"
|
||||
dest "$temporaryDir/$archive"
|
||||
checksum '45feec6e3889f5073a39c2c4c84878d1'
|
||||
}
|
||||
|
||||
task unpackOcamlJava(type: Sync, dependsOn: downloadOcamlJava) {
|
||||
|
|
|
@ -16,39 +16,26 @@ task cloneDroidBench(type: Exec) {
|
|||
commandLine 'git', 'clone', "--branch=$inputs.properties.branch", '--config=advice.detachedHead=false', '--depth=1', '--quiet', inputs.properties.repository, destDir
|
||||
}
|
||||
|
||||
task downloadAndroidSdk {
|
||||
task downloadAndroidSdk(type: VerifiedDownload) {
|
||||
def sdkOs
|
||||
def sdkChecksum
|
||||
switch (System.getProperty('os.name')) {
|
||||
case ~/Linux/:
|
||||
sdkOs = 'linux'
|
||||
sdkChecksum = '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
|
||||
checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
|
||||
break
|
||||
case ~/Mac OS X/:
|
||||
sdkOs = 'darwin'
|
||||
sdkChecksum = '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
|
||||
checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
|
||||
break
|
||||
case ~/Windows.*/:
|
||||
sdkOs = 'windows'
|
||||
sdkChecksum = '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
|
||||
checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
|
||||
break
|
||||
}
|
||||
def archive = "sdk-tools-$sdkOs-3859397.zip"
|
||||
outputs.file "$temporaryDir/$archive"
|
||||
doLast {
|
||||
download {
|
||||
src "https://dl.google.com/android/repository/$archive"
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
algorithm 'SHA-256'
|
||||
checksum sdkChecksum
|
||||
}
|
||||
}
|
||||
src "https://dl.google.com/android/repository/$archive"
|
||||
dest "$temporaryDir/$archive"
|
||||
algorithm 'SHA-256'
|
||||
}
|
||||
|
||||
task unpackAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
|
||||
|
@ -86,38 +73,16 @@ task copyAndroidJar(type: Sync, dependsOn: installAndroidPlatforms) {
|
|||
into temporaryDir
|
||||
}
|
||||
|
||||
task downloadSampleCup {
|
||||
outputs.file 'data/sample.cup'
|
||||
doLast {
|
||||
download {
|
||||
src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup'
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum '76b549e7c6e802b811a374248175ecf4'
|
||||
}
|
||||
}
|
||||
task downloadSampleCup(type: VerifiedDownload) {
|
||||
src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup'
|
||||
dest 'data/sample.cup'
|
||||
checksum '76b549e7c6e802b811a374248175ecf4'
|
||||
}
|
||||
|
||||
task downloadSampleLex {
|
||||
outputs.file 'data/sample.lex'
|
||||
doLast {
|
||||
download {
|
||||
src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex'
|
||||
dest outputs.files.singleFile
|
||||
overwrite true
|
||||
onlyIfModified true
|
||||
useETag true
|
||||
}
|
||||
verifyChecksum {
|
||||
src outputs.files.singleFile
|
||||
checksum 'ae887758b2657981d023a72a165da830'
|
||||
}
|
||||
}
|
||||
task downloadSampleLex(type: VerifiedDownload) {
|
||||
src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex'
|
||||
dest 'data/sample.lex'
|
||||
checksum 'ae887758b2657981d023a72a165da830'
|
||||
}
|
||||
|
||||
clean.dependsOn cleanCopyDxJar
|
||||
|
|
Loading…
Reference in New Issue