From 758bbd8201c37fda503632fcac2f6547e7169e41 Mon Sep 17 00:00:00 2001 From: Peter Streef Date: Thu, 29 Aug 2024 15:50:10 +0200 Subject: [PATCH] Force lowercase urls and origins in `GitRemote` (#4456) --- .../src/main/java/org/openrewrite/GitRemote.java | 13 +++++++++---- .../test/java/org/openrewrite/GitRemoteTest.java | 15 +++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/rewrite-core/src/main/java/org/openrewrite/GitRemote.java b/rewrite-core/src/main/java/org/openrewrite/GitRemote.java index dd85812bd7a..fa9f6b06d41 100644 --- a/rewrite-core/src/main/java/org/openrewrite/GitRemote.java +++ b/rewrite-core/src/main/java/org/openrewrite/GitRemote.java @@ -231,7 +231,8 @@ private String repositoryPath(RemoteServerMatch match, URI normalizedUri) { private static final Pattern PORT_PATTERN = Pattern.compile(":\\d+"); - static URI normalize(String url) { + static URI normalize(String original) { + String url = original.toLowerCase(Locale.ENGLISH); try { URIish uri = new URIish(url); String scheme = uri.getScheme(); @@ -266,7 +267,7 @@ static URI normalize(String url) { String path = uri.getPath().replaceFirst("/$", "") .replaceFirst("\\.git$", "") .replaceFirst("^/", ""); - return URI.create((scheme + "://" + host + maybePort + "/" + path).replaceFirst("/$", "")); + return URI.create((scheme + "://" + host + maybePort + "/" + path).replaceFirst("/$", "").toLowerCase(Locale.ENGLISH)); } catch (URISyntaxException e) { throw new IllegalStateException("Unable to parse origin from: " + url, e); } @@ -305,8 +306,12 @@ public RemoteServer(Service service, String origin, URI... uris) { public RemoteServer(Service service, String origin, Collection uris) { this.service = service; - this.origin = origin; - this.uris.addAll(uris); + this.origin = origin.toLowerCase(Locale.ENGLISH); + this.uris.addAll(uris.stream() + .map(URI::toString) + .map(urlString -> urlString.toLowerCase(Locale.ENGLISH)) + .map(URI::create) + .collect(Collectors.toList())); } private GitRemote.Parser.@Nullable RemoteServerMatch match(URI normalizedUri) { diff --git a/rewrite-core/src/test/java/org/openrewrite/GitRemoteTest.java b/rewrite-core/src/test/java/org/openrewrite/GitRemoteTest.java index 2fb0991b2b1..013cd8d965a 100644 --- a/rewrite-core/src/test/java/org/openrewrite/GitRemoteTest.java +++ b/rewrite-core/src/test/java/org/openrewrite/GitRemoteTest.java @@ -39,13 +39,16 @@ public class GitRemoteTest { git@gitlab.com:group/subgroup/subergroup/subestgroup/repo.git, gitlab.com, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo ssh://git@gitlab.com:22/group/subgroup/subergroup/subestgroup/repo.git, gitlab.com, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo - https://bitbucket.org/PRJ/repo, bitbucket.org, PRJ/repo, PRJ, repo - git@bitbucket.org:PRJ/repo.git, bitbucket.org, PRJ/repo, PRJ, repo - ssh://bitbucket.org/PRJ/repo.git, bitbucket.org, PRJ/repo, PRJ, repo + https://bitbucket.org/PRJ/repo, bitbucket.org, prj/repo, prj, repo + git@bitbucket.org:PRJ/repo.git, bitbucket.org, prj/repo, prj, repo + ssh://bitbucket.org/PRJ/repo.git, bitbucket.org, prj/repo, prj, repo https://org@dev.azure.com/org/project/_git/repo, dev.azure.com, org/project/repo, org/project, repo https://dev.azure.com/org/project/_git/repo, dev.azure.com, org/project/repo, org/project, repo git@ssh.dev.azure.com:v3/org/project/repo, dev.azure.com, org/project/repo, org/project, repo + + HTTPS://GITHUB.COM/ORG/REPO.GIT, github.com, org/repo, org, repo + HtTpS://GitHub.CoM/OrG/R3P0.GIT, github.com, org/r3p0, org, r3p0 """) void parseKnownRemotes(String cloneUrl, String expectedOrigin, String expectedPath, String expectedOrganization, String expectedRepositoryName) { GitRemote.Parser parser = new GitRemote.Parser(); @@ -83,9 +86,9 @@ void parseUnknownRemote(String cloneUrl, String expectedOrigin, String expectedP https://scm.company.com:443/stash/scm/org/repo.git, scm.company.com/stash, Bitbucket, scm.company.com/stash, org/repo, org, repo https://scm.company.com:1234/stash/scm/org/repo.git, https://scm.company.com:1234/stash, Bitbucket, scm.company.com:1234/stash, org/repo, org, repo git@scm.company.com:stash/org/repo.git, scm.company.com/stash, Bitbucket, scm.company.com/stash, org/repo, org, repo - ssh://scm.company.com/stash/org/repo, scm.company.com/stash, Bitbucket, scm.company.com/stash, org/repo, org, repo + ssh://scm.CompanY.com/stash/org/repo, scm.cOMpAnY.com/stash, Bitbucket, scm.company.com/stash, org/repo, org, repo ssh://scm.company.com:22/stash/org/repo, scm.company.com/stash, Bitbucket, scm.company.com/stash, org/repo, org, repo - ssh://scm.company.com:7999/stash/org/repo, ssh://scm.company.com:7999/stash, Bitbucket, scm.company.com:7999/stash, org/repo, org, repo + ssh://scm.company.com:7999/stash/org/repo, ssh://sCm.company.com:7999/stash, Bitbucket, scm.company.com:7999/stash, org/repo, org, repo https://scm.company.com/very/long/context/path/org/repo.git, scm.company.com/very/long/context/path, Bitbucket, scm.company.com/very/long/context/path, org/repo, org, repo https://scm.company.com:1234/very/long/context/path/org/repo.git, https://scm.company.com:1234/very/long/context/path, Bitbucket, scm.company.com:1234/very/long/context/path, org/repo, org, repo @@ -97,7 +100,7 @@ void parseUnknownRemote(String cloneUrl, String expectedOrigin, String expectedP git@scm.company.com:group/subgroup/subergroup/subestgroup/repo.git, ssh://scm.company.com, GitLab, scm.company.com, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo https://scm.company.com:443/group/subgroup/subergroup/subestgroup/repo.git, scm.company.com, GitLab, scm.company.com, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo ssh://scm.company.com:22/group/subgroup/subergroup/subestgroup/repo.git, ssh://scm.company.com, GitLab, scm.company.com, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo - ssh://scm.company.com:222/group/subgroup/subergroup/subestgroup/repo.git, ssh://scm.company.com:222, GitLab, scm.company.com:222, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo + ssh://SCM.COMPANY.COM:222/group/subgroup/subergroup/subestgroup/repo.git, ssh://SCM.CoMpAnY.cOm:222, GitLab, scm.company.com:222, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo https://scm.company.com/very/long/context/path/group/subgroup/subergroup/subestgroup/repo, scm.company.com/very/long/context/path, GitLab, scm.company.com/very/long/context/path, group/subgroup/subergroup/subestgroup/repo, group/subgroup/subergroup/subestgroup, repo """)