8000 Merge pull request #102 from sgtcoolguy/limit-api-calls · ojacques/github-oauth-plugin@cdc49ec · GitHub
[go: up one dir, main page]

Skip to content

Commit cdc49ec

Browse files
authored
Merge pull request jenkinsci#102 from sgtcoolguy/limit-api-calls
Reduce API calls
2 parents a02ae27 + 0818345 commit cdc49ec

File tree

2 files changed

+12
-34
lines changed

2 files changed

+12
-34
lines changed

src/main/java/org/jenkinsci/plugins/GithubAuthenticationToken.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -410,15 +410,10 @@ public Set<String> myRepositories() {
410410
new Callable<Set<String>>() {
411411
@Override
412412
public Set<String> call() throws Exception {
413-
List<GHRepository> userRepositoryList = getMyself().listRepositories().asList();
414-
Set<String> repositoryNames = listToNames(userRepositoryList);
415-
GHPersonSet<GHOrganization> organizations = getMyself().getAllOrganizations();
416-
for (GHOrganization organization : organizations) {
417-
List<GHRepository> orgRepositoryList = organization.listRepositories().asList();
418-
Set<String> orgRepositoryNames = listToNames(orgRepositoryList);
419-
repositoryNames.addAll(orgRepositoryNames);
420-
}
421-
return repositoryNames;
413+
// listRepositories returns all repos owned by user, where they are a collaborator,
414+
// and any user has access through org membership
415+
List<GHRepository> userRepositoryList = getMyself().listRepositories(100).asList(); // use max page size of 100 to limit API calls
416+
return listToNames(userRepositoryList);
422417
}
423418
}
424419
);
@@ -432,9 +427,7 @@ public Set<String> call() throws Exception {
432427
public Set<String> listToNames(Collection<GHRepository> respositories) throws IOException {
433428
Set<String> names = new HashSet<String>();
434429
for (GHRepository repository : respositories) {
435-
String ownerName = repository.getOwner().getLogin();
436-
String repoName = repository.getName();
437-
names.add(ownerName + "/" + repoName);
430+
names.add(repository.getFullName());
438431
}
439432
return names;
440433
}

src/test/java/org/jenkinsci/plugins/GithubRequireOrganizationMembershipACLTest.java

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -193,21 +193,10 @@ private GHMyself mockGHMyselfAs(String username) throws IOException {
193193
private void mockReposFor(GHPerson person, List<String> repositoryNames) throws IOException {
194194
List<GHRepository> repositories = repositoryListOf(repositoryNames);
195195
PagedIterable<GHRepository> pagedRepositories = PowerMockito.mock(PagedIterable.class);
196-
PowerMockito.when(person.listRepositories()).thenReturn(pagedRepositories);
196+
PowerMockito.when(person.listRepositories(100)).thenReturn(pagedRepositories);
197197
PowerMockito.when(pagedRepositories.asList()).thenReturn(repositories);
198198
};
199199

200-
private void mockOrgRepos(GHMyself me, Map<String, List<String>> orgsAndRepoNames) throws IOException {
201-
Set<GHOrganization> organizations = new HashSet();
202-
Set<String> organizationNames = orgsAndRepoNames.keySet();
203-
for (String organizationName : organizationNames) {
204-
List<String> repositories = orgsAndRepoNames.get(organizationName);
205-
organizations.add(mockGHOrganization(organizationName, repositories));
206-
}
207-
GHPersonSet organizationSet = new GHPersonSet(organizations);
208-
PowerMockito.when(me.getAllOrganizations()).thenReturn(organizationSet);
209-
}
210-
211200
private List<GHRepository> repositoryListOf(List<String> repositoryNames) throws IOException {
212201
List<GHRepository> repositoriesSet = new ArrayList<GHRepository>();
213202
for (String repositoryName : repositoryNames) {
@@ -222,6 +211,7 @@ private GHRepository mockGHRepository(String ownerName, String name) throws IOEx
222211
GHRepository ghRepository = PowerMockito.mock(GHRepository.class);
223212
GHUser ghUser = PowerMockito.mock(GHUser.class);
224213
PowerMockito.when(ghUser.getLogin()).thenReturn(ownerName);
214+
PowerMockito.when(ghRepository.getFullName()).thenReturn(ownerName + "/" + name);
225215
PowerMockito.when(ghRepository.getOwner()).thenReturn(ghUser);
226216
PowerMockito.when(ghRepository.getName()).thenReturn(name);
227217
return ghRepository;
@@ -271,8 +261,7 @@ private MultiBranchProject mockMultiBranchProject(String url) {
271261
@Test
272262
public void testCanReadAndBuildOneOfMyRepositories() throws IOException {
273263
GHMyself me = mockGHMyselfAs("Me");
274-
mockReposFor(me, Arrays.asList("me/a-repo"));
275-
mockOrgRepos(me, ImmutableMap.of("some-org", Arrays.asList("some-org/a-public-repo")));
264+
mockReposFor(me, Arrays.asList("me/a-repo", "some-org/a-public-repo"));
276265
String repoUrl = "https://github.com/me/a-repo.git";
277266
Project mockProject = mockProject(repoUrl);
278267
MultiBranchProject mockMultiBranchProject = mockMultiBranchProject(repoUrl);
@@ -303,8 +292,7 @@ protected void tearDown() throws Exception {
303292
@Test
304293
public void testCanReadAndBuildOrgRepositoryICollaborateOn() throws IOException {
305294
GHMyself me = mockGHMyselfAs("Me");
306-
mockReposFor(me, Arrays.asList("me/a-repo"));
307-
mockOrgRepos(me, ImmutableMap.of("some-org", Arrays.asList("some-org/a-private-repo")));
295+
mockReposFor(me, Arrays.asList("me/a-repo", "some-org/a-private-repo"));
308296
String repoUrl = "https://github.com/some-org/a-private-repo.git";
309297
Project mockProject = mockProject(repoUrl);
310298
MultiBranchProject mockMultiBranchProject = mockMultiBranchProject(repoUrl);
@@ -329,8 +317,7 @@ public void testCanReadAndBuildOrgRepositoryICollaborateOn() throws IOException
329317
@Test
330318
public void testCanReadAndBuildOtherOrgPrivateRepositoryICollaborateOn() throws IOException {
331319
GHMyself me = mockGHMyselfAs("Me");
332-
mockReposFor(me, Arrays.asList("me/a-repo"));
333-
mockOrgRepos(me, ImmutableMap.of("some-org", Arrays.asList("some-org/a-private-repo")));
320+
mockReposFor(me, Arrays.asList("me/a-repo", "some-org/a-private-repo"));
334321
GHRepository ghRepository = PowerMockito.mock(GHRepository.class);
335322
PowerMockito.when(gh.getRepository("org-i-dont-belong-to/a-private-repo-i-collaborate-on")).thenReturn(ghRepository);
336323
PowerMockito.when(ghRepository.isPrivate()).thenReturn(true);
@@ -363,8 +350,7 @@ public void testCanReadAndBuildOtherOrgPrivateRepositoryICollaborateOn() throws
363350
@Test
364351
public void testCanNotReadOrBuildRepositoryIDoNotCollaborateOn() throws IOException {
365352
GHMyself me = mockGHMyselfAs("Me");
366-
mockReposFor(me, Arrays.asList("me/a-repo"));
367-
mockOrgRepos(me, ImmutableMap.of("some-org", Arrays.asList("some-org/a-private-repo")));
353+
mockReposFor(me, Arrays.asList("me/a-repo", "some-org/a-private-repo"));
368354
String repoUrl = "https://github.com/some-org/another-private-repo.git";
369355
Project mockProject = mockProject(repoUrl);
370356
MultiBranchProject mockMultiBranchProject = mockMultiBranchProject(repoUrl);
@@ -537,8 +523,7 @@ public void testCannotReadConfigureDeleteAProjectWithoutToAuthenticatedUserReadP
537523
@Test
538524
public void testCannotReadRepositoryWithInvalidRepoUrl() throws IOException {
539525
GHMyself me = mockGHMyselfAs("Me");
540-
mockReposFor(me, Arrays.asList("me/a-repo"));
541-
mockOrgRepos(me, ImmutableMap.of("some-org", Arrays.asList("some-org/a-repo")));
526+
mockReposFor(me, Arrays.asList("me/a-repo", "some-org/a-repo"));
542527
String invalidRepoUrl = "git@github.com//some-org/a-repo.git";
543528
Project mockProject = mockProject(invalidRepoUrl);
544529
GithubRequireOrganizationMembershipACL acl = aclForProject(mockProject);

0 commit comments

Comments
 (0)
0