-
Notifications
You must be signed in to change notification settings - Fork 349
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Determine SCM and parse clone url in GitProvenance for more accurate path/origin/organiation/groups #4367
Closed
Closed
Changes from all commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
f21f282
feat: Determine SCM in GitProvenance for more accurate path estimation
pstreef 9774c15
Apply suggestions from code review
pstreef 973bed5
rename gitlab scm
pstreef 6e937cf
Comments
pstreef e30b193
fix tests
pstreef 4fd0365
fix boolean
pstreef 9fd2b07
fix git provenance tests
pstreef b331cef
Rename to `ScmUrlComponents` to `CloneUrl` and move logic into that
pstreef 3d5d541
Add full cloneUrl
pstreef cbb7a1a
fully parse on construction
pstreef 453566b
Update rewrite-core/src/test/java/org/openrewrite/scm/GitLabScmTest.java
pstreef 4c2387c
Update rewrite-core/src/main/java/org/openrewrite/scm/AzureDevopsClon…
pstreef 4fef5be
Merge branch 'main' into feat/add-scm-url-component-detection-logic
pstreef aacea53
Apply suggestions from code review
timtebeek c2e9e9c
Add missing newlines at the end of files
timtebeek 5fe218a
Add missing newline at the end of GitLabScmTest
timtebeek 4fefa63
refactor: Azure devops refactoring (#4378)
bryceatmoderne ce49346
new line?
pstreef 5dec1dd
Lazy initialization
pstreef 8d07e18
Lombok compiler issue
pstreef 43d7957
Update rewrite-core/src/main/java/org/openrewrite/internal/Lazy.java
pstreef a13a68a
Replace Lazy with `@NonFinal` field
pstreef f408a35
fix message, use getters
pstreef File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
rewrite-core/src/main/java/org/openrewrite/scm/AzureDevOpsCloneUrl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* <p> | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.openrewrite.scm; | ||
|
||
import lombok.Value; | ||
|
||
@Value | ||
public class AzureDevOpsCloneUrl implements CloneUrl { | ||
String cloneUrl; | ||
String origin; | ||
String path; | ||
String organization; | ||
String repositoryName; | ||
|
||
public AzureDevOpsCloneUrl(String cloneUrl, String origin, String path) { | ||
this.cloneUrl = cloneUrl; | ||
this.origin = origin; | ||
this.path = path; | ||
if (!path.contains("/")) { | ||
throw new IllegalArgumentException("Azure DevOps clone url path must contain organization, project and repository"); | ||
} | ||
String azureDevOpsOrganization = path.substring(0, path.indexOf("/")); | ||
String azureDevOpsProject = path.substring(path.indexOf("/") + 1, path.lastIndexOf("/")); | ||
this.repositoryName = path.substring(path.lastIndexOf("/") + 1); | ||
this.organization = azureDevOpsOrganization + '/' + azureDevOpsProject; | ||
} | ||
} |
46 changes: 46 additions & 0 deletions
46
rewrite-core/src/main/java/org/openrewrite/scm/AzureDevOpsScm.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* <p> | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.openrewrite.scm; | ||
pstreef marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
public class AzureDevOpsScm implements Scm { | ||
|
||
@Override | ||
public String getOrigin() { | ||
return "dev.azure.com"; | ||
} | ||
|
||
@Override | ||
public String cleanHostAndPath(String url) { | ||
UrlComponents uri = UrlComponents.parse(url); | ||
String host = uri.getHost(); | ||
String path = uri.getPath(); | ||
if (uri.isSsh() && host.startsWith("ssh.")) { | ||
host = host.substring(4); | ||
path = path.replaceFirst("v3/", ""); | ||
} else { | ||
path = path.replaceFirst("_git/", ""); | ||
} | ||
String hostAndPath = host + "/" + path | ||
.replaceFirst("\\.git$", ""); | ||
return hostAndPath.replaceFirst("/$", ""); | ||
} | ||
|
||
@Override | ||
public CloneUrl parseCloneUrl(String cloneUrl) { | ||
CloneUrl parsed = Scm.super.parseCloneUrl(cloneUrl); | ||
return new AzureDevOpsCloneUrl(cloneUrl, getOrigin(), parsed.getPath()); | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
rewrite-core/src/main/java/org/openrewrite/scm/BitbucketServerScm.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* <p> | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.openrewrite.scm; | ||
pstreef marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
import lombok.Getter; | ||
|
||
@Getter | ||
public class BitbucketServerScm implements Scm { | ||
private final String origin; | ||
|
||
public BitbucketServerScm(String origin) { | ||
if (origin.startsWith("ssh://") || origin.startsWith("http://") || origin.startsWith("https://")) { | ||
origin = cleanHostAndPath(origin); | ||
} | ||
this.origin = origin; | ||
} | ||
|
||
@Override | ||
public String cleanHostAndPath(String url) { | ||
UrlComponents uri = UrlComponents.parse(url); | ||
String hostAndPath = uri.getHost() + uri.maybePort() + "/" + uri.getPath() | ||
.replaceFirst("^/", "") | ||
.replaceFirst("scm/", "") | ||
.replaceFirst("\\.git$", ""); | ||
return hostAndPath.replaceFirst("/$", ""); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
rewrite-core/src/main/java/org/openrewrite/scm/CloneUrl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* <p> | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.openrewrite.scm; | ||
|
||
public interface CloneUrl { | ||
|
||
String getCloneUrl(); | ||
|
||
String getOrigin(); | ||
|
||
String getPath(); | ||
|
||
String getOrganization(); | ||
|
||
String getRepositoryName(); | ||
|
||
} |
44 changes: 44 additions & 0 deletions
44
rewrite-core/src/main/java/org/openrewrite/scm/GitLabCloneUrl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright 2024 the original author or authors. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* <p> | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.openrewrite.scm; | ||
|
||
import lombok.Value; | ||
|
||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
@Value | ||
public class GitLabCloneUrl implements CloneUrl { | ||
String cloneUrl; | ||
String origin; | ||
String path; | ||
List<String> groups; | ||
String organization; | ||
String repositoryName; | ||
|
||
public GitLabCloneUrl(String cloneUrl, String origin, String path) { | ||
this.cloneUrl = cloneUrl; | ||
this.origin = origin; | ||
this.path = path; | ||
if (!this.path.contains("/")) { | ||
throw new IllegalArgumentException("GitLab path must contain 1 or more groups and a repository name"); | ||
} | ||
String[] parts = this.path.split("/"); | ||
groups = Arrays.asList(parts).subList(0, parts.length - 1); | ||
organization = String.join("/", groups); | ||
repositoryName = parts[parts.length - 1]; | ||
} | ||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure it's necessary to deprecate since it is in widespread use. Fine to have a convenience method for organization on
CloneUrl
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually I think we should point back to the "old" method that does not take an argument, and deprecate this one which (again) takes the origin (with scheme).