From be82d46a72826d3dc7cd5712550b60e44e7e0b9f Mon Sep 17 00:00:00 2001 From: Sandu Date: Thu, 1 Jun 2023 18:33:08 -0400 Subject: [PATCH] TW-79075 For feature branch builds only publish status for participating commits, commits coming from default branches will be skipped --- .../CommitStatusPublisherListener.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java b/commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java index 3f4c6720..2e1b720f 100644 --- a/commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java +++ b/commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/CommitStatusPublisherListener.java @@ -648,7 +648,7 @@ private Collection getQueuedBuildRevisionForVote(@NotNull BuildTy if (buildPromotion.isFailedToCollectChanges()) return publisher.getFallbackRevisions(buildPromotion.getAssociatedBuild()); if (!((BuildPromotionEx)buildPromotion).isChangeCollectingNeeded(false)) { - return getBuildRevisionForVote(publisher, buildPromotion.getRevisions()); + return getBuildRevisionForVote(publisher, buildPromotion.getRevisions(), buildPromotion.getBranch()); } LOG.debug(() -> "No revision is found for build " + buildPromotion.getBuildTypeExternalId() + ". Queue-related status won't be published"); return Collections.emptyList(); @@ -656,7 +656,8 @@ private Collection getQueuedBuildRevisionForVote(@NotNull BuildTy @NotNull private List getBuildRevisionForVote(@NotNull CommitStatusPublisher publisher, - @NotNull Collection revisionsToCheck) { + @NotNull Collection revisionsToCheck, + @Nullable Branch buildBranch) { if (revisionsToCheck.isEmpty()) return Collections.emptyList(); String vcsRootId = publisher.getVcsRootId(); @@ -667,6 +668,30 @@ private List getBuildRevisionForVote(@NotNull CommitStatusPublish revisions.add(revision); } } + // TW-79075 + if (buildBranch != null && !buildBranch.isDefaultBranch()) { + Set selectedBranchNames = new HashSet<>(); + selectedBranchNames.add(buildBranch.getName()); + selectedBranchNames.add("refs/heads/" + buildBranch.getName()); // git prepends this to the branch name + List revisionsForBranch = new ArrayList<>(); + for(BuildRevision revision: revisions) { + String vcsBranch = revision.getRepositoryVersion().getVcsBranch(); + if (vcsBranch != null && selectedBranchNames.contains(vcsBranch)) { + revisionsForBranch.add(revision); + } + } + if (!revisionsForBranch.isEmpty()) { + LOG.info("Selective publishing for buildBranch=" + buildBranch + ", selected " + + revisionsForBranch.stream().map(r -> r.getRoot().getName() + '@' + r.getRepositoryVersion().getVcsBranch()).collect(Collectors.joining(", ", "[", "]")) + + " out of " + revisions.stream().map(r -> r.getRoot().getName() + '@' + r.getRepositoryVersion().getVcsBranch()).collect(Collectors.joining(", ", "[", "]")) + ); + revisions = revisionsForBranch; + } else { + LOG.warn("Attempted selective publishing, but did not find revisions for buildBranch=" + buildBranch + " among " + + revisions.stream().map(r -> r.getRoot().getName() + '@' + r.getRepositoryVersion().getVcsBranch()).collect(Collectors.joining(", ", "[", "]")) + + ", will publish all"); + } + } return revisions; } @@ -835,7 +860,7 @@ public RetryInfo publish(Event event, BuildRevision revision, CommitStatusPublis @Override public Collection getRevisions(BuildType buildType, CommitStatusPublisher publisher) { if (buildPromotion.isFailedToCollectChanges()) return publisher.getFallbackRevisions(build); - return getBuildRevisionForVote(publisher, build.getRevisions()); + return getBuildRevisionForVote(publisher, build.getRevisions(), build.getBranch()); } };