From 2a08f2883889aee6b88140f2559287c2d8002b35 Mon Sep 17 00:00:00 2001 From: LamGC Date: Thu, 18 Aug 2022 00:59:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(config):=20=E4=BD=BF=E7=94=A8=20URL=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=BC=BA=E7=9C=81=E4=BB=93=E5=BA=93=20Id.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在使用过程中, 发现 Aether 会根据仓库 Id 保存一些元信息, 所以尝试以 URL 生成仓库 Id, 或许有利于 Aether 存取仓库元信息. 改动仍需观望. --- scalabot-app/src/main/kotlin/AppConfigs.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scalabot-app/src/main/kotlin/AppConfigs.kt b/scalabot-app/src/main/kotlin/AppConfigs.kt index 14db5fe..0cb1fef 100644 --- a/scalabot-app/src/main/kotlin/AppConfigs.kt +++ b/scalabot-app/src/main/kotlin/AppConfigs.kt @@ -1,6 +1,7 @@ package net.lamgc.scalabot import ch.qos.logback.core.PropertyDefinerBase +import com.google.common.net.InternetDomainName import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.JsonArray @@ -15,6 +16,7 @@ import org.eclipse.aether.repository.RepositoryPolicy import org.telegram.telegrambots.bots.DefaultBotOptions import java.io.File import java.net.URL +import java.net.URLEncoder import java.nio.charset.StandardCharsets import java.util.concurrent.atomic.AtomicBoolean import java.util.function.Supplier @@ -43,7 +45,7 @@ internal fun ProxyConfig.toAetherProxy(): Proxy? { internal fun MavenRepositoryConfig.toRemoteRepository(proxyConfig: ProxyConfig? = null): RemoteRepository { val repositoryId = if (id == null) { - val generatedRepoId = createDefaultRepositoryId() + val generatedRepoId = createDefaultRepositoryId(url) log.debug { "仓库 Url `$url` 未设置仓库 Id, 已分配缺省 Id: $generatedRepoId" } generatedRepoId } else { @@ -91,10 +93,11 @@ private fun checkRepositoryLayout(layoutType: String): String { return type } -private val repoNumberGenerator = AtomicInteger(1) - -private fun createDefaultRepositoryId(): String { - return "Repository-${repoNumberGenerator.getAndIncrement()}" +private fun createDefaultRepositoryId(url: URL): String { + val topPrivateDomain = InternetDomainName.from(url.host).topPrivateDomain().toString() + return "Repository-${URLEncoder.encode(topPrivateDomain, StandardCharsets.UTF_8)}-${ + url.toString().hashCode().toString(16) + }" } /**