diff --git a/bots/pr/src/main/java/org/openjdk/skara/bots/pr/CheckRun.java b/bots/pr/src/main/java/org/openjdk/skara/bots/pr/CheckRun.java index 8031721b5..25cedd7b7 100644 --- a/bots/pr/src/main/java/org/openjdk/skara/bots/pr/CheckRun.java +++ b/bots/pr/src/main/java/org/openjdk/skara/bots/pr/CheckRun.java @@ -549,7 +549,7 @@ private String reviewUsingSkaraHelp() { } private String reviewUsingDiffsHelp() { - var diffUrl = pr.repository().webUrl() + "/pull/" + pr.id() + ".diff"; + var diffUrl = pr.repository().diffUrl(pr.id()); return "Download this PR as a diff file: \\\n" + "" + diffUrl + "\n"; } diff --git a/bots/tester/src/test/java/org/openjdk/skara/bots/tester/InMemoryHostedRepository.java b/bots/tester/src/test/java/org/openjdk/skara/bots/tester/InMemoryHostedRepository.java index 87e06ad65..9621bfed4 100644 --- a/bots/tester/src/test/java/org/openjdk/skara/bots/tester/InMemoryHostedRepository.java +++ b/bots/tester/src/test/java/org/openjdk/skara/bots/tester/InMemoryHostedRepository.java @@ -108,6 +108,11 @@ public URI webUrl(String baseRef, String headRef) { return null; } + @Override + public URI diffUrl(String prId) { + return webUrl(); + } + @Override public VCS repositoryType() { return null; diff --git a/forge/src/main/java/org/openjdk/skara/forge/HostedRepository.java b/forge/src/main/java/org/openjdk/skara/forge/HostedRepository.java index 95c42e9ff..c36e6cec6 100644 --- a/forge/src/main/java/org/openjdk/skara/forge/HostedRepository.java +++ b/forge/src/main/java/org/openjdk/skara/forge/HostedRepository.java @@ -64,6 +64,7 @@ PullRequest createPullRequest(HostedRepository target, URI webUrl(Branch branch); URI webUrl(Tag tag); URI webUrl(String baseRef, String headRef); + URI diffUrl(String prId); VCS repositoryType(); String fileContents(String filename, String ref); String namespace(); diff --git a/forge/src/main/java/org/openjdk/skara/forge/github/GitHubRepository.java b/forge/src/main/java/org/openjdk/skara/forge/github/GitHubRepository.java index e7b02481e..5052f1a57 100644 --- a/forge/src/main/java/org/openjdk/skara/forge/github/GitHubRepository.java +++ b/forge/src/main/java/org/openjdk/skara/forge/github/GitHubRepository.java @@ -218,6 +218,12 @@ public URI webUrl(String baseRef, String headRef) { return gitHubHost.getWebURI(endpoint); } + @Override + public URI diffUrl(String prId) { + var endpoint = "/" + repository + "/pull/" + prId + ".diff"; + return gitHubHost.getWebURI(endpoint); + } + @Override public VCS repositoryType() { return VCS.GIT; diff --git a/forge/src/main/java/org/openjdk/skara/forge/gitlab/GitLabRepository.java b/forge/src/main/java/org/openjdk/skara/forge/gitlab/GitLabRepository.java index d1c93d14b..fc04628e3 100644 --- a/forge/src/main/java/org/openjdk/skara/forge/gitlab/GitLabRepository.java +++ b/forge/src/main/java/org/openjdk/skara/forge/gitlab/GitLabRepository.java @@ -210,6 +210,15 @@ public URI webUrl(String baseRef, String headRef) { .build(); } + @Override + public URI diffUrl(String prId) { + // GitLab is too smart for it's own best and mangles URLs that contain a + // partial hit with the base MR, hence the double slash. + return URIBuilder.base(gitLabHost.getUri()) + .setPath("/" + projectName + "/-/merge_requests//" + prId + ".diff") + .build(); + } + @Override public VCS repositoryType() { return VCS.GIT; diff --git a/test/src/main/java/org/openjdk/skara/test/TestHostedRepository.java b/test/src/main/java/org/openjdk/skara/test/TestHostedRepository.java index ffa60cd48..d6e93f85a 100644 --- a/test/src/main/java/org/openjdk/skara/test/TestHostedRepository.java +++ b/test/src/main/java/org/openjdk/skara/test/TestHostedRepository.java @@ -146,6 +146,11 @@ public URI webUrl(String baseRef, String headRef) { return URI.create(url().toString() + "/" + baseRef + "..." + headRef); } + @Override + public URI diffUrl(String prId) { + return webUrl(); + } + @Override public VCS repositoryType() { return VCS.GIT;