Skip to content

Commit 4cab2c6

Browse files
authored
[JENKINS-71749] Add stable order when searching for repositories in GH organization (#907)
When scanning the organization, repositories are obtained using search GH API. If using pagination a non stable sort order would be used leading to potentially duplicate listings and missing entries. Provide a stable sort order and eagerly fetch the results.
1 parent 2472b16 commit 4cab2c6

7 files changed

+27
-7
lines changed

src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
import java.util.Set;
6666
import java.util.logging.Level;
6767
import java.util.logging.Logger;
68+
import java.util.stream.Collectors;
69+
import java.util.stream.StreamSupport;
6870
import jenkins.model.Jenkins;
6971
import jenkins.plugins.git.traits.GitBrowserSCMSourceTrait;
7072
import jenkins.scm.api.SCMNavigator;
@@ -1134,8 +1136,25 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
11341136
} else {
11351137
repositories = org.listRepositories(100);
11361138
}
1139+
1140+
List<String> repoList = StreamSupport.stream(repositories.spliterator(), false)
1141+
.map(GHRepository::getName)
1142+
.collect(Collectors.toList());
1143+
1144+
String repoString = String.join(",", repoList);
1145+
1146+
listener.getLogger()
1147+
.println(GitHubConsoleNote.create(
1148+
System.currentTimeMillis(),
1149+
String.format("Found %d repositories: %s", repoList.size(), repoString)));
1150+
11371151
for (GHRepository repo : repositories) {
11381152
try {
1153+
listener.getLogger()
1154+
.println(GitHubConsoleNote.create(
1155+
System.currentTimeMillis(),
1156+
String.format("Processing repository: %s", repo.getName())));
1157+
11391158
if (repo.isArchived() && gitHubSCMNavigatorContext.isExcludeArchivedRepositories()) {
11401159
// exclude archived repositories
11411160
witness.record(repo.getName(), false);
@@ -1306,7 +1325,8 @@ private Iterable<GHRepository> searchRepositories(final GitHub github, final Git
13061325
if (!context.isExcludeForkedRepositories()) {
13071326
ghRepositorySearchBuilder.q("fork:true");
13081327
}
1309-
return ghRepositorySearchBuilder.list().withPageSize(100);
1328+
ghRepositorySearchBuilder.q("sort:name-asc");
1329+
return ghRepositorySearchBuilder.list().withPageSize(100).asList();
13101330
}
13111331

13121332
private GHOrganization getGhOrganization(final GitHub github) throws IOException {

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-O8W78.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "topic:cool topic:great topic:was-awesome org:stephenc fork:true"
11+
"equalTo" : "topic:cool topic:great topic:was-awesome org:stephenc fork:true sort:name-asc"
1212
}
1313
}
1414
},

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-api-O8W78-exclude-forks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "topic:api org:stephenc"
11+
"equalTo" : "topic:api org:stephenc sort:name-asc"
1212
}
1313
}
1414
},

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-awesome-O8W78.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "topic:awesome org:stephenc fork:true"
11+
"equalTo" : "topic:awesome org:stephenc fork:true sort:name-asc"
1212
}
1313
}
1414
},

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-exclude-awesome-O8W78.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "-topic:awesome org:stephenc fork:true"
11+
"equalTo" : "-topic:awesome org:stephenc fork:true sort:name-asc"
1212
}
1313
}
1414
},

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-nope-O8W78.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "topic:nope org:stephenc fork:true"
11+
"equalTo" : "topic:nope org:stephenc fork:true sort:name-asc"
1212
}
1313
}
1414
},

src/test/resources/api/mappings/mapping-search-repositories-based-on-topics-octocat-exclude-awesome-O8W78.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"queryParameters" : {
1010
"q" : {
11-
"equalTo" : "-topic:awesome topic:octocat org:stephenc fork:true"
11+
"equalTo" : "-topic:awesome topic:octocat org:stephenc fork:true sort:name-asc"
1212
}
1313
}
1414
},

0 commit comments

Comments
 (0)