in src/main/java/com/googlesource/gerrit/plugins/replicationstatus/ReplicationStatusAction.java [56:94]
public Response<ProjectReplicationStatus> apply(ReplicationStatusProjectRemoteResource resource)
throws AuthException, PermissionBackendException, BadRequestException,
ResourceConflictException, IOException {
Project.NameKey projectNameKey = resource.getProjectNameKey();
String remoteURL = resource.getRemoteUrl();
checkIsOwnerOrAdmin(projectNameKey);
ProjectReplicationStatus.ProjectReplicationStatusResult overallStatus =
ProjectReplicationStatus.ProjectReplicationStatusResult.OK;
Map<String, RemoteReplicationStatus> remoteStatuses = new HashMap<>();
try (Repository git = repoManager.openRepository(projectNameKey)) {
Map<String, ReplicationStatus> refStatuses = new HashMap<>();
for (Ref r : git.getRefDatabase().getRefs()) {
ReplicationStatus replicationStatus =
replicationStatusCache.getIfPresent(
ReplicationStatus.Key.create(projectNameKey, remoteURL, r.getName()));
if (replicationStatus != null) {
refStatuses.put(r.getName(), replicationStatus);
if (replicationStatus.isFailure()) {
overallStatus = ProjectReplicationStatus.ProjectReplicationStatusResult.FAILED;
}
}
}
remoteStatuses.put(remoteURL, RemoteReplicationStatus.create(refStatuses));
ProjectReplicationStatus projectStatus =
ProjectReplicationStatus.create(remoteStatuses, overallStatus, projectNameKey.get());
return Response.ok(projectStatus);
} catch (RepositoryNotFoundException e) {
throw new BadRequestException(
String.format("Project %s does not exist", projectNameKey.get()));
}
}