in src/main/kotlin/org/jetbrains/teamcity/github/GitHubWebHookSuggestion.kt [33:69]
fun report(buildTypes: Collection<SBuildType>, resultConsumer: HealthStatusItemConsumer, oauthConnectionsManager: ProjectConnectionsManager, hasHooksInStorage: (GitHubRepositoryInfo) -> Boolean) {
val pairs = Util.getVcsRootsWhereHookCanBeInstalledForSuggestion(buildTypes, oauthConnectionsManager)
val groupByGitHubInfo: Map<GitHubRepositoryInfo?, List<Pair<SBuildType, VcsRootInstance>>> = pairs.groupBy { Util.getGitHubInfo(it.second) }
val processed = HashSet<GitHubRepositoryInfo>()
for ((info, repoPairs) in groupByGitHubInfo) {
if (info == null) continue
// Ignore roots with unresolved references in url
if (info.isHasParameterReferences()) continue
if (hasHooksInStorage(info)) continue
val groupByProject: Map<SProject, List<Pair<SBuildType, VcsRootInstance>>> = repoPairs.groupBy { it.first.project }
for ((project, projectPairs) in groupByProject) {
val item = WebHookAddHookHealthItem(info, project)
// we already created health item for this repository
if (!processed.add(info)) continue
val instances: List<VcsRootInstance> = projectPairs.map { it.second }
// Project
resultConsumer.consumeForProject(project, item)
// BuildTypes
projectPairs.map { it.first }.forEach { resultConsumer.consumeForBuildType(it, item) }
// VcsRoots
instances
.map { it.parent }
.filter { it.project.belongsTo(project) }
.forEach { resultConsumer.consumeForVcsRoot(it, item) }
}
}
}