Skip to content

Commit

Permalink
Force lowercase urls and origins in GitRemote (#4456)
Browse files Browse the repository at this point in the history
  • Loading branch information
pstreef authored Aug 29, 2024
1 parent ed731fa commit 758bbd8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
13 changes: 9 additions & 4 deletions rewrite-core/src/main/java/org/openrewrite/GitRemote.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -305,8 +306,12 @@ public RemoteServer(Service service, String origin, URI... uris) {

public RemoteServer(Service service, String origin, Collection<URI> 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) {
Expand Down
15 changes: 9 additions & 6 deletions rewrite-core/src/test/java/org/openrewrite/GitRemoteTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand All @@ -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
""")
Expand Down

0 comments on commit 758bbd8

Please sign in to comment.