From 98f3b3de0050c912f29558b4395a2b447754c176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Kondratek?= Date: Mon, 22 Jan 2024 16:27:24 +0100 Subject: [PATCH 1/2] Fix Sourcegraph actions (search selection, open selection, etc) --- .../java/com/sourcegraph/vcs/ConvertUtil.kt | 42 +++++++++++++++++++ .../java/com/sourcegraph/vcs/RepoUtil.java | 27 ++++++++---- 2 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/sourcegraph/vcs/ConvertUtil.kt diff --git a/src/main/java/com/sourcegraph/vcs/ConvertUtil.kt b/src/main/java/com/sourcegraph/vcs/ConvertUtil.kt new file mode 100644 index 0000000000..d499aa8d55 --- /dev/null +++ b/src/main/java/com/sourcegraph/vcs/ConvertUtil.kt @@ -0,0 +1,42 @@ +package com.sourcegraph.vcs + +import java.net.URL + +fun convertGitCloneURLToCodebaseNameOrError(cloneURL: String): String { + + // Handle common Git SSH URL format + val matchResult = Regex("""^[\w-]+@([^:]+):([\w-]+)/([\w-]+)(\.git)?$""").find(cloneURL) + if (matchResult != null) { + val (host, owner, repo) = matchResult.destructured + return "$host/$owner/$repo" + } + + val uri = URL(cloneURL) + + // Handle Azure DevOps URLs + if (uri.host?.contains("dev.azure") == true && uri.path.isNotEmpty()) { + return "${uri.host}${uri.path.replace("/_git", "")}" + } + + // Handle GitHub URLs + if (uri.protocol?.startsWith("github") == true || uri.toString().startsWith("github")) { + return "github.com/${uri.path.replace(".git", "")}" + } + + // Handle GitLab URLs + if (uri.protocol?.startsWith("gitlab") == true || uri.toString().startsWith("gitlab")) { + return "gitlab.com/${uri.path.replace(".git", "")}" + } + + // Handle HTTPS URLs + if (uri.protocol?.startsWith("http") == true && uri.host != null && uri.path.isNotEmpty()) { + return "${uri.host}${uri.path.replace(".git", "")}" + } + + // Generic URL + if (uri.host != null && uri.path.isNotEmpty()) { + return "${uri.host}${uri.path.replace(".git", "")}" + } + + return "" +} diff --git a/src/main/java/com/sourcegraph/vcs/RepoUtil.java b/src/main/java/com/sourcegraph/vcs/RepoUtil.java index 54db0a8a1a..feec67966d 100644 --- a/src/main/java/com/sourcegraph/vcs/RepoUtil.java +++ b/src/main/java/com/sourcegraph/vcs/RepoUtil.java @@ -1,5 +1,7 @@ package com.sourcegraph.vcs; +import static com.sourcegraph.vcs.ConvertUtilKt.convertGitCloneURLToCodebaseNameOrError; + import com.intellij.dvcs.repo.Repository; import com.intellij.dvcs.repo.VcsRepositoryManager; import com.intellij.openapi.diagnostic.Logger; @@ -11,12 +13,14 @@ import com.sourcegraph.cody.agent.protocol.CloneURL; import com.sourcegraph.cody.config.CodyProjectSettings; import com.sourcegraph.common.ErrorNotification; +import com.sourcegraph.config.ConfigUtil; import git4idea.GitVcs; import git4idea.repo.GitRepository; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.Optional; +import java.util.concurrent.TimeUnit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.perforce.perforce.PerforceAuthenticationException; @@ -147,15 +151,22 @@ private static String doReplacements( if (vcsType == VCSType.GIT && repository != null) { String cloneURL = GitUtil.getRemoteRepoUrl((GitRepository) repository, project); - String codebaseName = - CodyAgentService.getAgent(project) - .thenCompose( - agent -> - agent.getServer().convertGitCloneURLToCodebaseName(new CloneURL(cloneURL))) - .join(); + String codebaseName = null; + + if (ConfigUtil.isCodyEnabled()) { + codebaseName = + CodyAgentService.getAgent(project) + .thenCompose( + agent -> + agent.getServer().convertGitCloneURLToCodebaseName(new CloneURL(cloneURL))) + .completeOnTimeout(/* value= */ null, /* timeout= */ 4, TimeUnit.SECONDS) + .get(); + } + if (codebaseName == null) { - throw new Exception( - "Failed to convert git clone URL to codebase name for cloneURL: " + cloneURL); + logger.warn( + "Failed to convert git clone URL to codebase name for cloneURL via agent: " + cloneURL); + codebaseName = convertGitCloneURLToCodebaseNameOrError(cloneURL); } return codebaseName; } From 2b232b9c68b70ea4feba26dd611fb6ee00e086fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Kondratek?= Date: Mon, 22 Jan 2024 16:30:44 +0100 Subject: [PATCH 2/2] Fix subscription tab refresh --- src/main/kotlin/com/sourcegraph/cody/CodyToolWindowContent.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/sourcegraph/cody/CodyToolWindowContent.kt b/src/main/kotlin/com/sourcegraph/cody/CodyToolWindowContent.kt index c77fe40645..95c1e64d8d 100644 --- a/src/main/kotlin/com/sourcegraph/cody/CodyToolWindowContent.kt +++ b/src/main/kotlin/com/sourcegraph/cody/CodyToolWindowContent.kt @@ -156,7 +156,7 @@ class CodyToolWindowContent(private val project: Project) : UpdatableChat { SUBSCRIPTION_TAB_INDEX) } subscriptionPanel.update(data.isCurrentUserPro) - } else { + } else if (SUBSCRIPTION_TAB_INDEX < tabbedPane.tabCount) { tabbedPane.remove(SUBSCRIPTION_TAB_INDEX) } }