diff --git a/app/src/main/kotlin/org/nixos/gradle2nix/Process.kt b/app/src/main/kotlin/org/nixos/gradle2nix/Process.kt index c8b61ec..a45fd19 100644 --- a/app/src/main/kotlin/org/nixos/gradle2nix/Process.kt +++ b/app/src/main/kotlin/org/nixos/gradle2nix/Process.kt @@ -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> { ) 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()) diff --git a/app/src/test/kotlin/org/nixos/gradle2nix/GoldenTest.kt b/app/src/test/kotlin/org/nixos/gradle2nix/GoldenTest.kt index 7beaf76..b5ce104 100644 --- a/app/src/test/kotlin/org/nixos/gradle2nix/GoldenTest.kt +++ b/app/src/test/kotlin/org/nixos/gradle2nix/GoldenTest.kt @@ -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") } diff --git a/fixtures/dependency/snapshot/groovy/build.gradle b/fixtures/dependency/snapshot/groovy/build.gradle index a752a63..e7c8a38 100644 --- a/fixtures/dependency/snapshot/groovy/build.gradle +++ b/fixtures/dependency/snapshot/groovy/build.gradle @@ -3,7 +3,7 @@ plugins { } repositories { - maven { url = uri("file:/../../../../") } + maven { url = uri(System.getProperty("org.nixos.gradle2nix.m2")) } } dependencies { diff --git a/fixtures/golden/dependency/snapshot-dynamic.groovy.json b/fixtures/golden/dependency/snapshot-dynamic.groovy.json index 7a73a41..61621f4 100644 --- a/fixtures/golden/dependency/snapshot-dynamic.groovy.json +++ b/fixtures/golden/dependency/snapshot-dynamic.groovy.json @@ -1,2 +1,14 @@ { + "org.apache:test-SNAPSHOT1:2.0.2-SNAPSHOT:20070310.181613-3": { + "test-SNAPSHOT1-2.0.2-20070310.181613-3.jar": { + "urls": [ + ], + "hash": "sha256-a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE=" + }, + "test-SNAPSHOT1-2.0.2-20070310.181613-3.pom": { + "urls": [ + ], + "hash": "sha256-HkNYH8bwRqh0B760aORWKwMuDrO1E89Y8tx0esl66gs=" + } + } } \ No newline at end of file diff --git a/fixtures/golden/dependency/snapshot-dynamic.kotlin.json b/fixtures/golden/dependency/snapshot-dynamic.kotlin.json index 7a73a41..61621f4 100644 --- a/fixtures/golden/dependency/snapshot-dynamic.kotlin.json +++ b/fixtures/golden/dependency/snapshot-dynamic.kotlin.json @@ -1,2 +1,14 @@ { + "org.apache:test-SNAPSHOT1:2.0.2-SNAPSHOT:20070310.181613-3": { + "test-SNAPSHOT1-2.0.2-20070310.181613-3.jar": { + "urls": [ + ], + "hash": "sha256-a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE=" + }, + "test-SNAPSHOT1-2.0.2-20070310.181613-3.pom": { + "urls": [ + ], + "hash": "sha256-HkNYH8bwRqh0B760aORWKwMuDrO1E89Y8tx0esl66gs=" + } + } } \ No newline at end of file diff --git a/fixtures/golden/dependency/snapshot.groovy.json b/fixtures/golden/dependency/snapshot.groovy.json index 7a73a41..9485cd5 100644 --- a/fixtures/golden/dependency/snapshot.groovy.json +++ b/fixtures/golden/dependency/snapshot.groovy.json @@ -1,2 +1,16 @@ { + "org.apache:test-SNAPSHOT2:2.0.2-SNAPSHOT": { + "test-SNAPSHOT2-2.0.2-SNAPSHOT.jar": { + "urls": [ + "file:/home/tad/proj/gradle2nix/fixtures/repositories/m2/org/apache/test-SNAPSHOT2/2.0.2-SNAPSHOT/test-SNAPSHOT2-2.0.2-SNAPSHOT.jar" + ], + "hash": "sha256-a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE=" + }, + "test-SNAPSHOT2-2.0.2-SNAPSHOT.pom": { + "urls": [ + "file:/home/tad/proj/gradle2nix/fixtures/repositories/m2/org/apache/test-SNAPSHOT2/2.0.2-SNAPSHOT/test-SNAPSHOT2-2.0.2-SNAPSHOT.pom" + ], + "hash": "sha256-XCACfgVM2OthMcb9rU/nVQvjiJawqxOd5CSRmvql1O8=" + } + } } \ No newline at end of file diff --git a/fixtures/golden/dependency/snapshot.kotlin.json b/fixtures/golden/dependency/snapshot.kotlin.json index 7a73a41..9485cd5 100644 --- a/fixtures/golden/dependency/snapshot.kotlin.json +++ b/fixtures/golden/dependency/snapshot.kotlin.json @@ -1,2 +1,16 @@ { + "org.apache:test-SNAPSHOT2:2.0.2-SNAPSHOT": { + "test-SNAPSHOT2-2.0.2-SNAPSHOT.jar": { + "urls": [ + "file:/home/tad/proj/gradle2nix/fixtures/repositories/m2/org/apache/test-SNAPSHOT2/2.0.2-SNAPSHOT/test-SNAPSHOT2-2.0.2-SNAPSHOT.jar" + ], + "hash": "sha256-a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE=" + }, + "test-SNAPSHOT2-2.0.2-SNAPSHOT.pom": { + "urls": [ + "file:/home/tad/proj/gradle2nix/fixtures/repositories/m2/org/apache/test-SNAPSHOT2/2.0.2-SNAPSHOT/test-SNAPSHOT2-2.0.2-SNAPSHOT.pom" + ], + "hash": "sha256-XCACfgVM2OthMcb9rU/nVQvjiJawqxOd5CSRmvql1O8=" + } + } } \ No newline at end of file