Skip to content

Commit 9ee5f97

Browse files
473: Handle Bitbucket API changes (#475)
1 parent 3817449 commit 9ee5f97

File tree

4 files changed

+81
-5
lines changed

4 files changed

+81
-5
lines changed

src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketSCMNavigator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
493493
} else {
494494
// Navigate the repositories of the repoOwner as a user
495495
listener.getLogger().format("Looking up repositories of user %s%n", repoOwner);
496-
request.withRepositories(bitbucket.getRepositories(UserRoleInRepository.OWNER));
496+
request.withRepositories(bitbucket.getRepositories(UserRoleInRepository.ADMIN));
497497
}
498498
for (BitbucketRepository repo : request.repositories()) {
499499
if (request.process(repo.getRepositoryName(), sourceFactory, null, witness)) {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.cloudbees.jenkins.plugins.bitbucket.api;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
public class BitbucketCloudWorkspace implements BitbucketWorkspace {
9+
@JsonProperty("uuid")
10+
private String uuid;
11+
12+
@JsonProperty("name")
13+
private String name;
14+
15+
@JsonProperty("slug")
16+
private String slug;
17+
18+
@JsonProperty("is_private")
19+
private boolean isPrivate;
20+
21+
@JsonProperty("links")
22+
@JsonDeserialize(keyAs = String.class, contentUsing = BitbucketHref.Deserializer.class)
23+
private Map<String, List<BitbucketHref>> links;
24+
25+
@Override
26+
public String getUuid() {
27+
return uuid;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return name;
33+
}
34+
35+
@Override
36+
public String getDisplayName() {
37+
return name;
38+
}
39+
40+
@Override
41+
public String getSlug() {
42+
return slug;
43+
}
44+
45+
@Override
46+
public boolean isPrivate() {
47+
return isPrivate;
48+
}
49+
50+
@Override
51+
public Map<String, List<BitbucketHref>> getLinks() {
52+
return links;
53+
}
54+
55+
@Override
56+
public String getLink(String name) {
57+
if (links == null) {
58+
return null;
59+
}
60+
List<BitbucketHref> hrefs = links.get(name);
61+
if (hrefs == null || hrefs.isEmpty()) {
62+
return null;
63+
}
64+
BitbucketHref href = hrefs.get(0);
65+
return href == null ? null : href.getHref();
66+
}
67+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.cloudbees.jenkins.plugins.bitbucket.api;
2+
3+
public interface BitbucketWorkspace extends BitbucketTeam {
4+
String getUuid();
5+
6+
String getSlug();
7+
8+
boolean isPrivate();
9+
}

src/main/java/com/cloudbees/jenkins/plugins/bitbucket/client/BitbucketCloudApiClient.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketApi;
2929
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketAuthenticator;
3030
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketBuildStatus;
31+
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketCloudWorkspace;
3132
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketCommit;
3233
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketException;
3334
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketPullRequest;
@@ -46,7 +47,6 @@
4647
import com.cloudbees.jenkins.plugins.bitbucket.client.pullrequest.BitbucketPullRequestValue;
4748
import com.cloudbees.jenkins.plugins.bitbucket.client.pullrequest.BitbucketPullRequests;
4849
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketCloudRepository;
49-
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketCloudTeam;
5050
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketRepositoryHook;
5151
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketRepositoryHooks;
5252
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketRepositorySource;
@@ -128,7 +128,7 @@ public class BitbucketCloudApiClient implements BitbucketApi {
128128
private static final Logger LOGGER = Logger.getLogger(BitbucketCloudApiClient.class.getName());
129129
private static final HttpHost API_HOST = HttpHost.create("https://api.bitbucket.org");
130130
private static final String V2_API_BASE_URL = "https://api.bitbucket.org/2.0/repositories";
131-
private static final String V2_TEAMS_API_BASE_URL = "https://api.bitbucket.org/2.0/teams";
131+
private static final String V2_WORKSPACES_API_BASE_URL = "https://api.bitbucket.org/2.0/workspaces";
132132
private static final String REPO_URL_TEMPLATE = V2_API_BASE_URL + "{/owner,repo}";
133133
private static final int API_RATE_LIMIT_CODE = 429;
134134
// Limit images to 16k
@@ -675,14 +675,14 @@ private BitbucketRepositoryHooks parsePaginatedRepositoryHooks(String response)
675675
@Override
676676
@CheckForNull
677677
public BitbucketTeam getTeam() throws IOException, InterruptedException {
678-
final String url = UriTemplate.fromTemplate(V2_TEAMS_API_BASE_URL + "{/owner}")
678+
final String url = UriTemplate.fromTemplate(V2_WORKSPACES_API_BASE_URL + "{/owner}")
679679
.set("owner", owner)
680680
.expand();
681681

682682
Callable<BitbucketTeam> request = () -> {
683683
try {
684684
String response = getRequest(url);
685-
return JsonParser.toJava(response, BitbucketCloudTeam.class);
685+
return JsonParser.toJava(response, BitbucketCloudWorkspace.class);
686686
} catch (FileNotFoundException e) {
687687
return null;
688688
} catch (IOException e) {

0 commit comments

Comments
 (0)