private void runForEveryPublisher()

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);
    }