private void runForEveryPublisher()

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