mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
Delete ArtifactFetcher.
This commit is contained in:
parent
d7c41bf1ae
commit
76cc696356
2 changed files with 1 additions and 89 deletions
|
@ -1,86 +0,0 @@
|
|||
package com.beust.kobalt.maven
|
||||
|
||||
import com.beust.kobalt.HostConfig
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
import com.beust.kobalt.misc.log
|
||||
import com.beust.kobalt.misc.warn
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import com.google.common.cache.CacheLoader
|
||||
import com.google.common.cache.LoadingCache
|
||||
import com.google.inject.assistedinject.Assisted
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.nio.file.StandardCopyOption
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.ExecutorService
|
||||
import java.util.concurrent.Future
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Manages the download of files from a given HostConfig.
|
||||
*/
|
||||
@Singleton
|
||||
class DownloadManager @Inject constructor(val factory: ArtifactFetcher.IFactory) {
|
||||
class Key(val hostInfo: HostConfig, val fileName: String, val executor: ExecutorService) {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
return (other as Key).hostInfo.url == hostInfo.url
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return hostInfo.url.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
private val CACHE : LoadingCache<Key, Future<File>> = CacheBuilder.newBuilder()
|
||||
.build(object : CacheLoader<Key, Future<File>>() {
|
||||
override fun load(key: Key): Future<File> {
|
||||
return key.executor.submit(factory.create(key.hostInfo, key.fileName))
|
||||
}
|
||||
})
|
||||
|
||||
fun download(hostInfo: HostConfig, fileName: String, executor: ExecutorService)
|
||||
: Future<File> = CACHE.get(Key(hostInfo, fileName, executor))
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches an artifact (a file in a Maven repo, .jar, -javadoc.jar, ...) to the given local file.
|
||||
*/
|
||||
class ArtifactFetcher @Inject constructor(@Assisted("hostInfo") val hostInfo: HostConfig,
|
||||
@Assisted("fileName") val fileName: String,
|
||||
val files: KFiles) : Callable<File> {
|
||||
interface IFactory {
|
||||
fun create(@Assisted("hostInfo") hostInfo: HostConfig, @Assisted("fileName") fileName: String) : ArtifactFetcher
|
||||
}
|
||||
|
||||
override fun call() : File {
|
||||
val k = Kurl(hostInfo.copy(url = hostInfo.url + ".md5"))
|
||||
val remoteMd5 =
|
||||
if (k.exists) k.string.trim(' ', '\t', '\n').substring(0, 32)
|
||||
else null
|
||||
|
||||
val tmpFile = Paths.get(fileName + ".tmp")
|
||||
val file = Paths.get(fileName)
|
||||
val url = hostInfo.url
|
||||
if (! Files.exists(file)) {
|
||||
with(tmpFile.toFile()) {
|
||||
parentFile.mkdirs()
|
||||
Kurl(hostInfo).toFile(this)
|
||||
}
|
||||
log(2, "Done downloading, renaming $tmpFile to $file")
|
||||
Files.move(tmpFile, file, StandardCopyOption.REPLACE_EXISTING)
|
||||
log(1, " Downloaded $url")
|
||||
log(2, " to $file")
|
||||
}
|
||||
|
||||
val localMd5 = Md5.toMd5(file.toFile())
|
||||
if (remoteMd5 != null && remoteMd5 != localMd5) {
|
||||
warn("MD5 not matching for $url")
|
||||
} else {
|
||||
log(2, "No md5 found for $url, skipping md5 check")
|
||||
}
|
||||
|
||||
return file.toFile()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue