in commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java [883:928]
private void runForEveryPublisher(@NotNull Event event, @NotNull SBuild build, @Nullable Long lastDelay) {
PublishTask task = myTaskSupplier.apply(build);
SBuildType buildType = build.getBuildType();
if (buildType == null) return;
final BuildPromotion buildPromotion = build.getBuildPromotion();
PublishingProcessor publishingProcessor = new PublishingProcessor() {
@Override
public RetryInfo publish(Event event, BuildRevision revision, CommitStatusPublisher publisher) {
RetryInfo retryInfo = new RetryInfo();
if (!publisher.isAvailable(buildPromotion)) return retryInfo;
Lock lock = myPublishingLocks.get(revision.getRevision());
lock.lock();
try {
boolean isEventSuitableForRevision = true;
if (event.canOverrideStatus()) {
try {
isEventSuitableForRevision = isCurrentRevisionSuitable(event, buildPromotion, revision, publisher);
} catch (PublisherException e) {
retryInfo = getRetryInfo(e, buildPromotion, event, lastDelay);
LOG.warnAndDebugDetails("Cannot determine if event \"" + event + "\" can be published for current revision state in VCS. " + retryInfo.message, e);
return retryInfo;
}
}
if (isEventSuitableForRevision) {
retryInfo = runTask(event, buildPromotion, LogUtil.describe(build), task, publisher, revision, null, lastDelay);
} else {
LOG.debug(() -> "Event \"" + event + "\" is not suitable to be published to root \"" + publisher.getVcsRootId() + "\" for revision " + revision.getRevision());
}
} finally {
lock.unlock();
}
return retryInfo;
}
@Override
public Collection<BuildRevision> getRevisions(BuildType buildType, CommitStatusPublisher publisher) {
if (buildPromotion.isFailedToCollectChanges()) return publisher.getFallbackRevisions(build);
return getBuildRevisionForVote(publisher, build.getRevisions());
}
};
proccessPublishing(event, buildPromotion, publishingProcessor);
}