Fix golden data for projects using local M2 dir

This commit is contained in:
Tad Fisher
2023-10-06 16:48:24 -07:00
parent 689a6a2090
commit f618923fd0
7 changed files with 79 additions and 3 deletions

View File

@@ -1,6 +1,8 @@
package org.nixos.gradle2nix
import java.io.File
import java.io.FileFilter
import java.net.URI
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
@@ -66,6 +68,7 @@ fun processDependencies(config: Config): Map<String, Map<String, Artifact>> {
)
val metadata = verifier.verificationMetadata[componentId]
?: verifyComponentFilesInCache(config, componentId)
?: verifyComponentFilesInTestRepository(config, componentId)
if (metadata == null) {
config.logger.warn("$id: not present in metadata or cache; skipping")
return@mapNotNull null
@@ -117,7 +120,7 @@ private fun verifyComponentFilesInCache(
if (!cacheDir.exists()) {
return null
}
val verifications = cacheDir.walkBottomUp().filter { it.isFile }.map { f ->
val verifications = cacheDir.walk().filter { it.isFile }.map { f ->
ArtifactVerificationMetadata(
f.name,
listOf(Checksum(ChecksumKind.sha256, f.sha256()))
@@ -127,6 +130,26 @@ private fun verifyComponentFilesInCache(
return ComponentVerificationMetadata(component, verifications.toList())
}
private fun verifyComponentFilesInTestRepository(
config: Config,
component: ModuleComponentIdentifier
): ComponentVerificationMetadata? {
if (m2 == null) return null
val dir = File(URI.create(m2)).resolve("${component.group.replace(".", "/")}/${component.module}/${component.version}")
if (!dir.exists()) {
config.logger.log("$component: not found in m2 repository; tried $dir")
return null
}
val verifications = dir.walk().filter { it.isFile && it.name.startsWith(component.module) }.map { f ->
ArtifactVerificationMetadata(
f.name,
listOf(Checksum(ChecksumKind.sha256, f.sha256()))
)
}
config.logger.log("$component: obtained artifact hashes from test Maven repository.")
return ComponentVerificationMetadata(component, verifications.toList())
}
private fun File.sha256(): String {
val source = HashingSource.sha256(source())
source.buffer().readAll(blackholeSink())

View File

@@ -26,7 +26,8 @@ class GoldenTest : FunSpec({
context("plugin") {
golden("plugin/resolves-from-default-repo")
}
context("s3") {
// FIXME Need s3mock or similar to generate golden data.
xcontext("s3") {
golden("s3/maven")
golden("s3/maven-snapshot")
}