Skip to content

Commit c51acbd

Browse files
oheger-boschsschuberth
authored andcommitted
fix(gradle): Rework conversion of repositories to ORT model
In 6c5ab2e, logic has been added to the Gradle plugin to obtain the credentials for repositories referenced by the build. According to [1], querying credentials in this way assigns an empty set of credentials to a repository if no authentication information is present. However, such an empty set causes later problems when resolving dependencies. To fix this, do the resolving of dependencies first, and only afterward process the repositories and obtain their credentials. [1]: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/repositories/AuthenticationSupported.html#getCredentials() Signed-off-by: Oliver Heger <[email protected]>
1 parent 9608c38 commit c51acbd

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

plugins/package-managers/gradle-plugin/src/main/kotlin/GradleModelExtensions.kt

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,17 @@ internal fun Configuration.isRelevant(): Boolean {
6464
/**
6565
* Return a map that associates names of artifact repositories to their model representations.
6666
*/
67-
internal fun RepositoryHandler.associateNamesWithUrlsTo(repositories: MutableMap<String, OrtRepository?>) =
68-
associateTo(repositories) { it.name to it.toOrtRepository() }
67+
internal fun RepositoryHandler.associateNamesWithUrlsTo(repositories: MutableMap<String, UrlArtifactRepository>) =
68+
filterIsInstance<UrlArtifactRepository>().associateByTo(repositories) { (it as ArtifactRepository).name }
6969

7070
/**
71-
* Convert this [ArtifactRepository] to an [OrtRepository] if it possesses the relevant properties. Return *null* for
72-
* an unsupported repository type.
71+
* Convert this [UrlArtifactRepository] to an [OrtRepository] by extracting the relevant properties.
7372
*/
74-
private fun ArtifactRepository.toOrtRepository(): OrtRepository? =
75-
(this as? UrlArtifactRepository)?.let { urlRepository ->
76-
val credentials = (urlRepository as? AuthenticationSupported)?.credentials
77-
OrtRepositoryImpl(
78-
url = urlRepository.url.toString(),
79-
username = credentials?.username,
80-
password = credentials?.password
81-
)
82-
}
73+
internal fun UrlArtifactRepository.toOrtRepository(): OrtRepository {
74+
val credentials = (this as? AuthenticationSupported)?.credentials
75+
return OrtRepositoryImpl(
76+
url = url.toString(),
77+
username = credentials?.username,
78+
password = credentials?.password
79+
)
80+
}

plugins/package-managers/gradle-plugin/src/main/kotlin/OrtModelBuilder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ package org.ossreviewtoolkit.plugins.packagemanagers.gradleplugin
2121

2222
import OrtDependency
2323
import OrtDependencyTreeModel
24-
import OrtRepository
2524

2625
import org.apache.maven.model.building.FileModelSource
2726
import org.apache.maven.model.building.ModelBuildingResult
@@ -32,6 +31,7 @@ import org.gradle.api.artifacts.component.ComponentIdentifier
3231
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
3332
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
3433
import org.gradle.api.artifacts.component.ProjectComponentSelector
34+
import org.gradle.api.artifacts.repositories.UrlArtifactRepository
3535
import org.gradle.api.artifacts.result.DependencyResult
3636
import org.gradle.api.artifacts.result.ResolvedArtifactResult
3737
import org.gradle.api.artifacts.result.ResolvedComponentResult
@@ -49,7 +49,7 @@ import org.gradle.tooling.provider.model.ToolingModelBuilder
4949
import org.gradle.util.GradleVersion
5050

5151
internal class OrtModelBuilder : ToolingModelBuilder {
52-
private val repositories = mutableMapOf<String, OrtRepository?>()
52+
private val repositories = mutableMapOf<String, UrlArtifactRepository>()
5353

5454
private val platformCategories = setOf("platform", "enforced-platform")
5555

@@ -99,7 +99,7 @@ internal class OrtModelBuilder : ToolingModelBuilder {
9999
name = project.name,
100100
version = project.version.toString().takeUnless { it == "unspecified" }.orEmpty(),
101101
configurations = ortConfigurations,
102-
repositories = repositories.values.filterNotNull(),
102+
repositories = repositories.values.map { it.toOrtRepository() },
103103
errors = errors,
104104
warnings = warnings
105105
)
@@ -190,7 +190,7 @@ internal class OrtModelBuilder : ToolingModelBuilder {
190190
repositories[repositoryId]?.let { repository ->
191191
// Note: Only Maven-style layout is supported for now.
192192
buildString {
193-
append(repository.url.removeSuffix("/"))
193+
append(repository.url.toString().removeSuffix("/"))
194194
append('/')
195195
append(id.group.replace('.', '/'))
196196
append('/')

0 commit comments

Comments
 (0)