Skip to content

Commit

Permalink
Merge pull request #73 from rigsbyt/team-reviewers
Browse files Browse the repository at this point in the history
Add support for team reviewers
  • Loading branch information
aaronjwhiteside committed May 9, 2020
2 parents 1c8487e + d0559f6 commit 0d76d82
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 11 deletions.
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,10 +257,18 @@ Returns the merge's SHA/commit id.
> void deleteComment(long commentId)
### Requested Reviewers
> Iterable<String> getRequestedReviewers<>()
> void createReviewRequests(List<String> reviewers)
> void createTeamReviewRequests(List<String> teams)
> Iterable<String> getRequestedTeamReviewers<>()
> void deleteReviewRequests(List<String> reviewers)
> void deleteTeamReviewRequests(List<String> teams)
### Delete Branch
> void deleteBranch()
Expand Down Expand Up @@ -579,6 +587,13 @@ for (requestedReviewer in pullRequest.requestedReviewers) {
}
```

### Listing a Pull Request's requested team reviewers
```groovy
for (requestedTeamReviewer in pullRequest.requestedTeamReviewers) {
echo "${requestedTeamReviewer} was requested to review this Pull Request"
}
```

### Listing a Pull Request's reviews
```groovy
for (review in pullRequest.reviews) {
Expand All @@ -596,6 +611,16 @@ pullRequest.createReviewRequests(['Spock', 'McCoy'])
pullRequest.deleteReviewRequests(['McCoy'])
```

### Requesting team reviewers
```groovy
pullRequest.createTeamReviewRequests(['justice-league'])
```

### Deleting requested team reviewers
```groovy
pullRequest.deleteTeamReviewRequests(['justice-league'])
```

### Deleting a branch of the pull request after Merging the pull request
```groovy
pullRequest.merge(pullRequest.title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.eclipse.egit.github.core.Milestone;
import org.eclipse.egit.github.core.PullRequestMarker;
import org.eclipse.egit.github.core.RepositoryId;
import org.eclipse.egit.github.core.Team;
import org.eclipse.egit.github.core.User;
import org.jenkinsci.plugins.github_branch_source.PullRequestSCMHead;
import org.jenkinsci.plugins.pipeline.github.client.ExtendedCommitComment;
Expand Down Expand Up @@ -297,6 +298,17 @@ public Iterable<String> getRequestedReviewers() {
return stream::iterator;
}

@Whitelisted
public Iterable<String> getRequestedTeamReviewers() {
Stream<String> stream = StreamSupport
.stream(getPullRequestService().pageRequestedTeamReviewers(base, pullRequest.getNumber())
.spliterator(), false)
.flatMap(Collection::stream)
.map(Team::getName);

return stream::iterator;
}

@Whitelisted
public Iterable<ReviewGroovyObject> getReviews() {
Stream<ReviewGroovyObject> stream = StreamSupport
Expand Down Expand Up @@ -490,7 +502,7 @@ public void createReviewRequest(final String reviewer) {
public void createReviewRequests(final List<String> reviewers) {
Objects.requireNonNull(reviewers, "reviewers cannot be null");
try {
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), reviewers);
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), reviewers, null);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
Expand All @@ -506,7 +518,40 @@ public void deleteReviewRequest(final String reviewer) {
public void deleteReviewRequests(final List<String> reviewers) {
Objects.requireNonNull(reviewers, "reviewers cannot be null");
try {
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), reviewers);
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), reviewers, null);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}


@Whitelisted
public void createTeamReviewRequest(final String team) {
Objects.requireNonNull(team, "team cannot be null");
createTeamReviewRequests(Collections.singletonList(team));
}

@Whitelisted
public void createTeamReviewRequests(final List<String> teams) {
Objects.requireNonNull(teams, "teams cannot be null");
try {
getPullRequestService().createReviewRequests(base, pullRequest.getNumber(), null, teams);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}

@Whitelisted
public void deleteTeamReviewRequest(final String team) {
Objects.requireNonNull(team, "team cannot be null");
deleteTeamReviewRequests(Collections.singletonList(team));
}

@Whitelisted
public void deleteTeamReviewRequests(final List<String> teams) {
Objects.requireNonNull(teams, "teams cannot be null");
try {
getPullRequestService().deleteReviewRequests(base, pullRequest.getNumber(), null, teams);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.gson.reflect.TypeToken;
import org.eclipse.egit.github.core.IRepositoryIdProvider;
import org.eclipse.egit.github.core.Team;
import org.eclipse.egit.github.core.User;
import org.eclipse.egit.github.core.client.GitHubRequest;
import org.eclipse.egit.github.core.client.PageIterator;
Expand Down Expand Up @@ -177,6 +178,20 @@ public PageIterator<User> pageRequestedReviewers(final IRepositoryIdProvider rep
return this.createPageIterator(request);
}

public PageIterator<Team> pageRequestedTeamReviewers(final IRepositoryIdProvider repository, final int id) {
String repoId = this.getId(repository);
StringBuilder uri = new StringBuilder("/repos");
uri.append('/').append(repoId);
uri.append("/pulls");
uri.append('/').append(id);
uri.append("/requested_reviewers");

PagedRequest<Team> request = this.createPagedRequest(1, 100);
request.setUri(uri);
request.setType((new TypeToken<List<Team>>(){}).getType());
return this.createPageIterator(request);
}

public PageIterator<Review> pageReviews(final IRepositoryIdProvider repository, final int id) {
String repoId = this.getId(repository);
StringBuilder uri = new StringBuilder("/repos");
Expand All @@ -192,10 +207,12 @@ public PageIterator<Review> pageReviews(final IRepositoryIdProvider repository,
}

public void createReviewRequests(final IRepositoryIdProvider repository,
final int id,
final List<String> reviewers) throws IOException {
Objects.requireNonNull(reviewers, "reviewers cannot be null");

final int id,
final List<String> reviewers,
final List<String> teamReviewers) throws IOException {
if (Objects.isNull(reviewers) && Objects.isNull(teamReviewers)) {
throw new IllegalArgumentException("Either reviewers or teamReviewers must be non-null");
}
String repoId = this.getId(repository);
StringBuilder uri = new StringBuilder("/repos");
uri.append('/').append(repoId);
Expand All @@ -204,15 +221,22 @@ public void createReviewRequests(final IRepositoryIdProvider repository,
uri.append("/requested_reviewers");

Map<String, Object> params = new HashMap<>();
params.put("reviewers", reviewers);
if (!Objects.isNull(reviewers)) {
params.put("reviewers", reviewers);
}
if (!Objects.isNull(teamReviewers)) {
params.put("team_reviewers", teamReviewers);
}
getClient().post(uri.toString(), params, ExtendedPullRequest.class);
}

public void deleteReviewRequests(final IRepositoryIdProvider repository,
final int id,
final List<String> reviewers) throws IOException {
Objects.requireNonNull(reviewers, "reviewers cannot be null");

final List<String> reviewers,
final List<String> teamReviewers) throws IOException {
if (Objects.isNull(reviewers) && Objects.isNull(teamReviewers)) {
throw new IllegalArgumentException("Either reviewers or teamReviewers must be non-null");
}
String repoId = this.getId(repository);
StringBuilder uri = new StringBuilder("/repos");
uri.append('/').append(repoId);
Expand All @@ -221,7 +245,12 @@ public void deleteReviewRequests(final IRepositoryIdProvider repository,
uri.append("/requested_reviewers");

Map<String, Object> params = new HashMap<>();
params.put("reviewers", reviewers);
if (!Objects.isNull(reviewers)) {
params.put("reviewers", reviewers);
}
if (!Objects.isNull(teamReviewers)) {
params.put("team_reviewers", teamReviewers);
}
getClient().delete(uri.toString(), params);
}

Expand Down

0 comments on commit 0d76d82

Please sign in to comment.