Skip to content
This repository was archived by the owner on Jul 31, 2025. It is now read-only.

Commit 052902f

Browse files
committed
Merge pull request hub4j#146
1 parent e356675 commit 052902f

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

src/main/java/org/kohsuke/github/GHTeam.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
package org.kohsuke.github;
22

33
import java.io.IOException;
4-
import java.util.Arrays;
54
import java.util.Collections;
6-
import java.util.HashSet;
7-
import java.util.Iterator;
8-
import java.util.LinkedHashSet;
95
import java.util.Map;
106
import java.util.Set;
117
import java.util.TreeMap;
12-
import java.util.TreeSet;
138

149
/**
1510
* A team in GitHub organization.
@@ -55,23 +50,21 @@ public int getId() {
5550
/**
5651
* Retrieves the current members.
5752
*/
58-
public Set<GHUser> getMembers() throws IOException {
59-
60-
Set<GHUser> members = new LinkedHashSet<GHUser>();
61-
62-
Iterator<GHUser[]> pageIterator = org.root.retrieve().asIterator(api("/members"),
63-
GHUser[].class);
64-
while (pageIterator != null && pageIterator.hasNext()) {
65-
GHUser[] users = pageIterator.next();
66-
if (users != null) {
67-
GHUser.wrap(users, org.root);
68-
for (GHUser user : users) {
69-
members.add(user);
70-
}
71-
}
72-
}
73-
74-
return Collections.unmodifiableSet(members);
53+
public PagedIterable<GHUser> listMembers() throws IOException {
54+
return new PagedIterable<GHUser>() {
55+
public PagedIterator<GHUser> iterator() {
56+
return new PagedIterator<GHUser>(org.root.retrieve().asIterator(api("/members"), GHUser[].class)) {
57+
@Override
58+
protected void wrapUp(GHUser[] page) {
59+
GHUser.wrap(page, org.root);
60+
}
61+
};
62+
}
63+
};
64+
}
65+
66+
public Set<GHUser> getMembers() throws IOException {
67+
return Collections.unmodifiableSet(listMembers().asSet());
7568
}
7669

7770
/**

src/main/java/org/kohsuke/github/PagedIterable.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.kohsuke.github;
22

33
import java.util.ArrayList;
4+
import java.util.LinkedHashSet;
45
import java.util.List;
6+
import java.util.Set;
57

68
/**
79
* {@link Iterable} that returns {@link PagedIterator}
@@ -21,4 +23,15 @@ public List<T> asList() {
2123
}
2224
return r;
2325
}
26+
27+
/**
28+
* Eagerly walk {@link Iterable} and return the result in a set.
29+
*/
30+
public Set<T> asSet() {
31+
LinkedHashSet<T> r = new LinkedHashSet<T>();
32+
for(PagedIterator<T> i = iterator(); i.hasNext();) {
33+
r.addAll(i.nextPage());
34+
}
35+
return r;
36+
}
2437
}

src/test/java/org/kohsuke/github/AppTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,16 @@ public void testCommitStatusContext() throws IOException {
607607

608608
}
609609

610+
@Test
611+
public void testMemberPagenation() throws IOException {
612+
Set<GHUser> all = new HashSet<GHUser>();
613+
for (GHUser u : gitHub.getOrganization("github-api-test-org").getTeamByName("Core Developers").listMembers()) {
614+
System.out.println(u.getLogin());
615+
all.add(u);
616+
}
617+
assertFalse(all.isEmpty());
618+
}
619+
610620
private void kohsuke() {
611621
String login = getUser().getLogin();
612622
Assume.assumeTrue(login.equals("kohsuke") || login.equals("kohsuke2"));

0 commit comments

Comments
 (0)