in commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java [1000:1047]
private void runForEveryPublisher(@NotNull Event event, @NotNull BuildPromotion buildPromotion, AdditionalTaskInfo additionalTaskInfo, @Nullable Long lastDelay) {
PublishQueuedTask publishTask = myTaskSupplier.apply(buildPromotion);
PublishingProcessor publishingProcessor = new PublishingProcessor() {
@Override
public RetryInfo publish(Event event, BuildRevision revision, CommitStatusPublisher publisher) {
RetryInfo retryInfo = new RetryInfo();
SBuildType buildType = buildPromotion.getBuildType();
if (buildType == null) {
return retryInfo;
}
if (!publisher.isAvailable(buildPromotion)) return retryInfo;
Lock lock = myPublishingLocks.get(revision.getRevision());
lock.lock();
try {
retryInfo = doPublish(revision, publisher);
} finally {
lock.unlock();
}
return retryInfo;
}
private RetryInfo doPublish(BuildRevision revision, CommitStatusPublisher publisher) {
boolean isEventSuitableForRevision;
RetryInfo retryInfo = new RetryInfo();
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(buildPromotion), publishTask, publisher, revision, additionalTaskInfo, lastDelay);
} else {
LOG.debug(() -> "Event \"" + event + "\" is not suitable to be published to root \"" + publisher.getVcsRootId() + "\" for revision " + revision.getRevision());
}
return retryInfo;
}
@Override
public Collection<BuildRevision> getRevisions(BuildType buildType, CommitStatusPublisher publisher) {
return getQueuedBuildRevisionForVote(buildType, publisher, buildPromotion);
}
};
proccessPublishing(event, buildPromotion, publishingProcessor);
}