Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d76d82

Browse files
Merge pull request jenkinsci#73 from rigsbyt/team-reviewers
Add support for team reviewers
2 parents 1c8487e + d0559f6 commit 0d76d82

File tree

3 files changed

+110
-11
lines changed

3 files changed

+110
-11
lines changed

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,10 +257,18 @@ Returns the merge's SHA/commit id.
257257
> void deleteComment(long commentId)
258258
259259
### Requested Reviewers
260+
> Iterable<String> getRequestedReviewers<>()
261+
260262
> void createReviewRequests(List<String> reviewers)
261263
264+
> void createTeamReviewRequests(List<String> teams)
265+
266+
> Iterable<String> getRequestedTeamReviewers<>()
267+
262268
> void deleteReviewRequests(List<String> reviewers)
263269
270+
> void deleteTeamReviewRequests(List<String> teams)
271+
264272
### Delete Branch
265273
> void deleteBranch()
266274
@@ -579,6 +587,13 @@ for (requestedReviewer in pullRequest.requestedReviewers) {
579587
}
580588
```
581589

590+
### Listing a Pull Request's requested team reviewers
591+
```groovy
592+
for (requestedTeamReviewer in pullRequest.requestedTeamReviewers) {
593+
echo "${requestedTeamReviewer} was requested to review this Pull Request"
594+
}
595+
```
596+
582597
### Listing a Pull Request's reviews
583598
```groovy
584599
for (review in pullRequest.reviews) {
@@ -596,6 +611,16 @@ pullRequest.createReviewRequests(['Spock', 'McCoy'])
596611
pullRequest.deleteReviewRequests(['McCoy'])
597612
```
598613

614+
### Requesting team reviewers
615+
```groovy
616+
pullRequest.createTeamReviewRequests(['justice-league'])
617+
```
618+
619+
### Deleting requested team reviewers
620+
```groovy
621+
pullRequest.deleteTeamReviewRequests(['justice-league'])
622+
```
623+
599624
### Deleting a branch of the pull request after Merging the pull request
600625
```groovy
601626
pullRequest.merge(pullRequest.title)

src/main/java/org/jenkinsci/plugins/pipeline/github/PullRequestGroovyObject.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.eclipse.egit.github.core.Milestone;
1111
import org.eclipse.egit.github.core.PullRequestMarker;
1212
import org.eclipse.egit.github.core.RepositoryId;
13+
import org.eclipse.egit.github.core.Team;
1314
import org.eclipse.egit.github.core.User;
1415
import org.jenkinsci.plugins.github_branch_source.PullRequestSCMHead;
1516
import org.jenkinsci.plugins.pipeline.github.client.ExtendedCommitComment;
@@ -297,6 +298,17 @@ public Iterable<String> getRequestedReviewers() {
297298
return stream::iterator;
298299
}
299300

301+
@Whitelisted
302+
public Iterable<String> getRequestedTeamReviewers() {
303+
Stream<String> stream = StreamSupport
304+
.stream(getPullRequestService().pageRequestedTeamReviewers(base, pullRequest.getNumber())
305+
.spliterator(), false)
306+
.flatMap(Collection::stream)
307+
.map(Team::getName);
308+
309+
return stream::iterator;
310+
}
311+
300312
@Whitelisted
301313
public Iterable<ReviewGroovyObject> getReviews() {
302314
Stream<ReviewGroovyObject> stream = StreamSupport
@@ -490,7 +502,7 @@ public void createReviewRequest(final String reviewer) {
490502
public void createReviewRequests(final List<String> reviewers) {
491503
Objects.requireNonNull(reviewers, "reviewers cannot be null");
492504
try {
493-
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), reviewers);
505+
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), reviewers, null);
494506
} catch (final IOException e) {
495507
throw new UncheckedIOException(e);
496508
}
@@ -506,7 +518,40 @@ public void deleteReviewRequest(final String reviewer) {
506518
public void deleteReviewRequests(final List<String> reviewers) {
507519
Objects.requireNonNull(reviewers, "reviewers cannot be null");
508520
try {
509-
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), reviewers);
521+
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), reviewers, null);
522+
} catch (final IOException e) {
523+
throw new UncheckedIOException(e);
524+
}
525+
}
526+
527+
528+
@Whitelisted
529+
public void createTeamReviewRequest(final String team) {
530+
Objects.requireNonNull(team, "team cannot be null");
531+
createTeamReviewRequests(Collections.singletonList(team));
532+
}
533+
534+
@Whitelisted
535+
public void createTeamReviewRequests(final List<String> teams) {
536+
Objects.requireNonNull(teams, "teams cannot be null");
537+
try {
538+
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), null, teams);
539+
} catch (final IOException e) {
540+
throw new UncheckedIOException(e);
541+
}
542+
}
543+
544+
@Whitelisted
545+
public void deleteTeamReviewRequest(final String team) {
546+
Objects.requireNonNull(team, "team cannot be null");
547+
deleteTeamReviewRequests(Collections.singletonList(team));
548+
}
549+
550+
@Whitelisted
551+
public void deleteTeamReviewRequests(final List<String> teams) {
552+
Objects.requireNonNull(teams, "teams cannot be null");
553+
try {
554+
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), null, teams);
510555
} catch (final IOException e) {
511556
throw new UncheckedIOException(e);
512557
}

src/main/java/org/jenkinsci/plugins/pipeline/github/client/ExtendedPullRequestService.java

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.reflect.TypeToken;
44
import org.eclipse.egit.github.core.IRepositoryIdProvider;
5+
import org.eclipse.egit.github.core.Team;
56
import org.eclipse.egit.github.core.User;
67
import org.eclipse.egit.github.core.client.GitHubRequest;
78
import org.eclipse.egit.github.core.client.PageIterator;
@@ -177,6 +178,20 @@ public PageIterator<User> pageRequestedReviewers(final IRepositoryIdProvider rep
177178
return this.createPageIterator(request);
178179
}
179180

181+
public PageIterator<Team> pageRequestedTeamReviewers(final IRepositoryIdProvider repository, final int id) {
182+
String repoId = this.getId(repository);
183+
StringBuilder uri = new StringBuilder("/repos");
184+
uri.append('/').append(repoId);
185+
uri.append("/pulls");
186+
uri.append('/').append(id);
187+
uri.append("/requested_reviewers");
188+
189+
PagedRequest<Team> request = this.createPagedRequest(1, 100);
190+
request.setUri(uri);
191+
request.setType((new TypeToken<List<Team>>(){}).getType());
192+
return this.createPageIterator(request);
193+
}
194+
180195
public PageIterator<Review> pageReviews(final IRepositoryIdProvider repository, final int id) {
181196
String repoId = this.getId(repository);
182197
StringBuilder uri = new StringBuilder("/repos");
@@ -192,10 +207,12 @@ public PageIterator<Review> pageReviews(final IRepositoryIdProvider repository,
192207
}
193208

194209
public void createReviewRequests(final IRepositoryIdProvider repository,
195-
final int id,
196-
final List<String> reviewers) throws IOException {
197-
Objects.requireNonNull(reviewers, "reviewers cannot be null");
198-
210+
final int id,
211+
final List<String> reviewers,
212+
final List<String> teamReviewers) throws IOException {
213+
if (Objects.isNull(reviewers) && Objects.isNull(teamReviewers)) {
214+
throw new IllegalArgumentException("Either reviewers or teamReviewers must be non-null");
215+
}
199216
String repoId = this.getId(repository);
200217
StringBuilder uri = new StringBuilder("/repos");
201218
uri.append('/').append(repoId);
@@ -204,15 +221,22 @@ public void createReviewRequests(final IRepositoryIdProvider repository,
204221
uri.append("/requested_reviewers");
205222

206223
Map<String, Object> params = new HashMap<>();
207-
params.put("reviewers", reviewers);
224+
if (!Objects.isNull(reviewers)) {
225+
params.put("reviewers", reviewers);
226+
}
227+
if (!Objects.isNull(teamReviewers)) {
228+
params.put("team_reviewers", teamReviewers);
229+
}
208230
getClient().post(uri.toString(), params, ExtendedPullRequest.class);
209231
}
210232

211233
public void deleteReviewRequests(final IRepositoryIdProvider repository,
212234
final int id,
213-
final List<String> reviewers) throws IOException {
214-
Objects.requireNonNull(reviewers, "reviewers cannot be null");
215-
235+
final List<String> reviewers,
236+
final List<String> teamReviewers) throws IOException {
237+
if (Objects.isNull(reviewers) && Objects.isNull(teamReviewers)) {
238+
throw new IllegalArgumentException("Either reviewers or teamReviewers must be non-null");
239+
}
216240
String repoId = this.getId(repository);
217241
StringBuilder uri = new StringBuilder("/repos");
218242
uri.append('/').append(repoId);
@@ -221,7 +245,12 @@ public void deleteReviewRequests(final IRepositoryIdProvider repository,
221245
uri.append("/requested_reviewers");
222246

223247
Map<String, Object> params = new HashMap<>();
224-
params.put("reviewers", reviewers);
248+
if (!Objects.isNull(reviewers)) {
249+
params.put("reviewers", reviewers);
250+
}
251+
if (!Objects.isNull(teamReviewers)) {
252+
params.put("team_reviewers", teamReviewers);
253+
}
225254
getClient().delete(uri.toString(), params);
226255
}
227256

0 commit comments

Comments
 (0)