From cb020fb9f4e683679d0d8a232165eb0bf685f925 Mon Sep 17 00:00:00 2001 From: Ilya Muradyan Date: Fri, 23 Oct 2020 12:37:17 +0300 Subject: [PATCH] Change repository adding logic Now if the repo being added already exists, it is moved to the end of the list, effectively lowering its priority. Original issue: https://github.com/Kotlin/kotlin-jupyter/issues/107 --- .../org/jetbrains/kotlin/mainKts/impl/ivy.kt | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt index 13d2667e546..d145470a658 100644 --- a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt @@ -16,15 +16,14 @@ import org.apache.ivy.core.settings.IvySettings import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorWriter import org.apache.ivy.plugins.resolver.ChainResolver import org.apache.ivy.plugins.resolver.IBiblioResolver -import org.apache.ivy.plugins.resolver.URLResolver import org.apache.ivy.util.DefaultMessageLogger import org.apache.ivy.util.Message import java.io.File import kotlin.script.experimental.api.* import kotlin.script.experimental.dependencies.ExternalDependenciesResolver import kotlin.script.experimental.dependencies.RepositoryCoordinates -import kotlin.script.experimental.dependencies.impl.toRepositoryUrlOrNull import kotlin.script.experimental.dependencies.impl.dependencyScopes +import kotlin.script.experimental.dependencies.impl.toRepositoryUrlOrNull import kotlin.script.experimental.dependencies.impl.transitive class IvyResolver : ExternalDependenciesResolver { @@ -64,7 +63,7 @@ class IvyResolver : ExternalDependenciesResolver { } } - private val ivyResolvers = arrayListOf() + private val ivyResolvers = arrayListOf() private fun resolveArtifact( groupId: String, @@ -153,13 +152,26 @@ class IvyResolver : ExternalDependenciesResolver { val url = repositoryCoordinates.toRepositoryUrlOrNull() ?: return false.asSuccess() - ivyResolvers.add( - IBiblioResolver().apply { - isM2compatible = true - name = url.host - root = url.toExternalForm() - } - ) + val root = url.toExternalForm() + + // Check whether this repository was already added + val prevRepoIndex = ivyResolvers.indexOfFirst { it.root == root } + if (prevRepoIndex != -1) { + // If yes, move it to the end of the list. + // It will decrease its resolution priority + val resolver = ivyResolvers[prevRepoIndex] + ivyResolvers.removeAt(prevRepoIndex) + ivyResolvers.add(resolver) + } else { + ivyResolvers.add( + IBiblioResolver().apply { + isM2compatible = true + name = url.host + this.root = root + } + ) + } + return true.asSuccess() }