From 4a0be0bf36c4233c4595d482273fe32a6c9cabfd Mon Sep 17 00:00:00 2001 From: Ivan Bessonov Date: Wed, 25 Oct 2017 17:31:22 +0300 Subject: [PATCH] IDEA-CR-25932 bintray repositories indexing - ability to detect repository owner by url subdomain --- .../idea/maven/indices/MavenIndex.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java index 5472b75991cf..bf76439e53fb 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndex.java @@ -17,7 +17,6 @@ package org.jetbrains.idea.maven.indices; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; import com.intellij.util.CachedValueImpl; @@ -40,8 +39,12 @@ import org.jetbrains.idea.maven.utils.MavenProcessCanceledException; import org.jetbrains.idea.maven.utils.MavenProgressIndicator; import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; import java.util.*; +import static com.intellij.openapi.util.text.StringUtil.*; + public class MavenIndex { private static final String CURRENT_VERSION = "4"; @@ -130,7 +133,7 @@ public class MavenIndex { String myRepositoryIdsStr = props.getProperty(ID_KEY); if (myRepositoryIdsStr != null) { - myRegisteredRepositoryIds.addAll(StringUtil.split(myRepositoryIdsStr, ",")); + myRegisteredRepositoryIds.addAll(split(myRepositoryIdsStr, ",")); } myRepositoryPathOrUrl = normalizePathOrUrl(props.getProperty(PATH_OR_URL_KEY)); @@ -150,13 +153,26 @@ public class MavenIndex { } private static NotNexusIndexer initNotNexusIndexer(Kind kind, String repositoryPathOrUrl) { - if (kind == Kind.REMOTE && repositoryPathOrUrl.contains("dl.bintray.com/")) { - List subjectAndRepo = - StringUtil.split(repositoryPathOrUrl.substring(repositoryPathOrUrl.indexOf("dl.bintray.com/") + "dl.bintray.com/".length()), "/"); - if (!subjectAndRepo.isEmpty()) { - String subject = subjectAndRepo.get(0); - String repo = subjectAndRepo.size() > 1 ? subjectAndRepo.get(1) : null; - return new BintrayIndexer(subject, repo); + if (kind == Kind.REMOTE) { + try { + URL url = new URL(repositoryPathOrUrl); + + String host = url.getHost(); + if (host != null) { + List path = split(trimStart(url.getPath(), "/"), "/"); + if (host.equals("dl.bintray.com")) { + if (path.size() > 1) { + return new BintrayIndexer(path.get(0), path.get(1)); + } + } + else if (host.endsWith(".bintray.com")) { + if (!path.isEmpty()) { + return new BintrayIndexer(trimEnd(host, ".bintray.com"), path.get(0)); + } + } + } + } + catch (MalformedURLException ignored) { } } return null; @@ -763,7 +779,7 @@ public class MavenIndex { @Nullable @Override public Result compute() { - return Result.create(StringUtil.join(myRegisteredRepositoryIds, ","), new ModificationTracker() { + return Result.create(join(myRegisteredRepositoryIds, ","), new ModificationTracker() { @Override public long getModificationCount() { return myRegisteredRepositoryIds.hashCode();