Skip to content

Commit a88d25f

Browse files
committed
find SCMSource even if NullSCM now associated to build
1 parent 3817449 commit a88d25f

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/main/java/com/cloudbees/jenkins/plugins/bitbucket/BitbucketBuildStatusNotifications.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import edu.umd.cs.findbugs.annotations.NonNull;
3131
import hudson.Extension;
3232
import hudson.FilePath;
33+
import hudson.model.ItemGroup;
3334
import hudson.model.Result;
3435
import hudson.model.Run;
3536
import hudson.model.TaskListener;
@@ -48,6 +49,8 @@
4849
import jenkins.scm.api.SCMRevision;
4950
import jenkins.scm.api.SCMRevisionAction;
5051
import jenkins.scm.api.SCMSource;
52+
import jenkins.scm.api.SCMSourceOwner;
53+
import jenkins.scm.impl.NullSCMSource;
5154
import org.apache.commons.lang.StringUtils;
5255
import org.jenkinsci.plugins.displayurlapi.DisplayURLProvider;
5356

@@ -105,8 +108,8 @@ private static void createStatus(@NonNull Run<?, ?> build, @NonNull TaskListener
105108
@NonNull BitbucketApi bitbucket, @NonNull String key, @NonNull String hash)
106109
throws IOException, InterruptedException {
107110

108-
final SCMSource s = SCMSource.SourceByItem.findSource(build.getParent());
109-
if (!(s instanceof BitbucketSCMSource)) {
111+
final BitbucketSCMSource source = findBitbucketSCMSource(build);
112+
if (source == null) {
110113
return;
111114
}
112115

@@ -135,7 +138,6 @@ private static void createStatus(@NonNull Run<?, ?> build, @NonNull TaskListener
135138
} else if (Result.UNSTABLE.equals(result)) {
136139
statusDescription = StringUtils.defaultIfBlank(buildDescription, "This commit has test failures.");
137140

138-
BitbucketSCMSource source = (BitbucketSCMSource) s;
139141
BitbucketSCMSourceContext sourceContext = new BitbucketSCMSourceContext(null, SCMHeadObserver.none())
140142
.withTraits(source.getTraits());
141143
if (sourceContext.sendSuccessNotificationForUnstableBuild()) {
@@ -160,12 +162,19 @@ private static void createStatus(@NonNull Run<?, ?> build, @NonNull TaskListener
160162
status = new BitbucketBuildStatus(hash, statusDescription, state, url, key, name);
161163
new BitbucketChangesetCommentNotifier(bitbucket).buildStatus(status);
162164
if (result != null) {
163-
listener.getLogger().println("[Bitbucket] Build result notified");
165+
listener.getLogger().println("[Bitbucket] Build result notified: " + status.getState());
164166
}
165167
}
166168

167169
private static @CheckForNull BitbucketSCMSource findBitbucketSCMSource(Run<?, ?> build) {
168170
SCMSource s = SCMSource.SourceByItem.findSource(build.getParent());
171+
if (s instanceof NullSCMSource) {
172+
// for instance PR merged on Bitbucket since the build has been started
173+
ItemGroup<?> grandFather = build.getParent().getParent();
174+
if (grandFather instanceof SCMSourceOwner) {
175+
s = ((SCMSourceOwner) grandFather).getSCMSources().get(0);
176+
}
177+
}
169178
return s instanceof BitbucketSCMSource ? (BitbucketSCMSource) s : null;
170179
}
171180

0 commit comments

Comments
 (0)