Skip to content

Commit 71ed94e

Browse files
author
Antonio Mansilla
authored
Merge pull request #28 from Flagbit/fix-JENKINS-35083
Fix JENKINS-35083
2 parents 505c393 + 953506c commit 71ed94e

File tree

4 files changed

+44
-17
lines changed

4 files changed

+44
-17
lines changed

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusHelper.java

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,13 @@ public static List<BitbucketBuildStatusResource> createBuildStatusResources(fina
133133
Job<?, ?> project = build.getParent();
134134
List<BitbucketBuildStatusResource> buildStatusResources = new ArrayList<BitbucketBuildStatusResource>();
135135

136-
if(project instanceof WorkflowJob) {
136+
if (project instanceof WorkflowJob) {
137137
Collection<? extends SCM> scms = ((WorkflowJob)project).getSCMs();
138138

139139
for (SCM scm : scms) {
140140
buildStatusResources.addAll(createBuildStatusResources(scm, build));
141141
}
142-
}
143-
else if(project instanceof AbstractProject) {
142+
} else if (project instanceof AbstractProject) {
144143
SCM scm = ((AbstractProject)project).getScm();
145144
buildStatusResources = createBuildStatusResources(scm, build);
146145
}
@@ -153,11 +152,21 @@ public static String defaultBitbucketBuildKeyFromBuild(Run<?, ?> build) {
153152
return DigestUtils.md5Hex(project.getFullDisplayName() + "#" + build.getNumber());
154153
}
155154

155+
public static String uniqueBitbucketBuildKeyFromBuild(Run<?, ?> build) {
156+
Job<?, ?> project = build.getParent();
157+
return DigestUtils.md5Hex(project.getFullDisplayName());
158+
}
159+
156160
public static String defaultBitbucketBuildNameFromBuild(Run<?, ?> build) {
157161
Job<?, ?> project = build.getParent();
158162
return project.getFullDisplayName() + " #" + build.getNumber();
159163
}
160164

165+
public static String uniqueBitbucketBuildNameFromBuild(Run<?, ?> build) {
166+
Job<?, ?> project = build.getParent();
167+
return project.getFullDisplayName();
168+
}
169+
161170
public static String defaultBitbucketBuildDescriptionFromBuild(Run<?, ?> build) {
162171
AbstractTestResultAction testResult = build.getAction(AbstractTestResultAction.class);
163172
String description = "";
@@ -173,12 +182,19 @@ public static String buildUrlFromBuild(Run<?, ?> build) {
173182
return project.getAbsoluteUrl() + build.getNumber() + '/';
174183
}
175184

176-
private static BitbucketBuildStatus createBitbucketBuildStatusFromBuild(Run<?, ?> build) throws Exception {
185+
private static BitbucketBuildStatus createBitbucketBuildStatusFromBuild(Run<?, ?> build, boolean overrideLatestBuild) throws Exception {
186+
String buildKey = "";
187+
String buildName = "";
177188
String buildState = guessBitbucketBuildState(build.getResult());
178189
// bitbucket requires the key to be shorter than 40 chars
179-
String buildKey = defaultBitbucketBuildKeyFromBuild(build);
190+
if (overrideLatestBuild) {
191+
buildKey = uniqueBitbucketBuildKeyFromBuild(build);
192+
buildName = uniqueBitbucketBuildNameFromBuild(build);
193+
} else {
194+
buildKey = defaultBitbucketBuildKeyFromBuild(build);
195+
buildName = defaultBitbucketBuildNameFromBuild(build);
196+
}
180197
String buildUrl = buildUrlFromBuild(build);
181-
String buildName = defaultBitbucketBuildNameFromBuild(build);
182198
String description = defaultBitbucketBuildDescriptionFromBuild(build);
183199

184200
return new BitbucketBuildStatus(buildState, buildKey, buildUrl, buildName, description);
@@ -196,20 +212,21 @@ private static String guessBitbucketBuildState(final Result result) {
196212
} else if (Result.UNSTABLE == result || Result.FAILURE == result || Result.ABORTED == result) {
197213
state = BitbucketBuildStatus.FAILED;
198214
} else {
199-
// return empty status for every other result (NOT_BUILT, ABORTED)
215+
// return empty status for every other result (NOT_BUILT)
200216
state = null;
201217
}
202218

203219
return state;
204220
}
205221

206-
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, final Run<?, ?> build,
207-
final TaskListener listener) throws Exception {
208-
notifyBuildStatus(credentials, build, listener, createBitbucketBuildStatusFromBuild(build));
222+
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, boolean overrideLatestBuild,
223+
final Run<?, ?> build, final TaskListener listener) throws Exception {
224+
notifyBuildStatus(credentials, overrideLatestBuild, build, listener, createBitbucketBuildStatusFromBuild(build, overrideLatestBuild));
209225
}
210226

211-
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, final Run<?, ?> build,
212-
final TaskListener listener, BitbucketBuildStatus buildStatus) throws Exception {
227+
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, boolean overrideLatestBuild,
228+
final Run<?, ?> build, final TaskListener listener,
229+
BitbucketBuildStatus buildStatus) throws Exception {
213230

214231
List<BitbucketBuildStatusResource> buildStatusResources = createBuildStatusResources(build);
215232

@@ -225,8 +242,9 @@ public static void notifyBuildStatus(UsernamePasswordCredentials credentials, fi
225242
// then update the bitbucket build status resource with current status and current build number
226243
for (BitbucketBuildStatusResource prevBuildStatusResource : prevBuildStatusResources) {
227244
if (prevBuildStatusResource.getCommitId().equals(buildStatusResource.getCommitId())) {
228-
BitbucketBuildStatus prevBuildStatus = createBitbucketBuildStatusFromBuild(prevBuild);
245+
BitbucketBuildStatus prevBuildStatus = createBitbucketBuildStatusFromBuild(prevBuild, overrideLatestBuild);
229246
buildStatus.setKey(prevBuildStatus.getKey());
247+
230248
break;
231249
}
232250
}

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusNotifier.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,16 @@ public class BitbucketBuildStatusNotifier extends Notifier {
5858

5959
private boolean notifyStart;
6060
private boolean notifyFinish;
61+
private boolean overrideLatestBuild;
6162
private String credentialsId;
6263

6364
@DataBoundConstructor
6465
public BitbucketBuildStatusNotifier(final boolean notifyStart, final boolean notifyFinish,
65-
final String credentialsId) {
66+
final boolean overrideLatestBuild, final String credentialsId) {
6667
super();
6768
this.notifyStart = notifyStart;
6869
this.notifyFinish = notifyFinish;
70+
this.overrideLatestBuild = overrideLatestBuild;
6971
this.credentialsId = credentialsId;
7072
}
7173

@@ -77,6 +79,10 @@ public boolean getNotifyFinish() {
7779
return this.notifyFinish;
7880
}
7981

82+
public boolean getOverrideLatestBuild() {
83+
return this.overrideLatestBuild;
84+
}
85+
8086
public String getCredentialsId() {
8187
return this.credentialsId != null ? this.credentialsId : this.getDescriptor().getGlobalCredentialsId();
8288
}
@@ -100,7 +106,7 @@ public boolean prebuild(AbstractBuild<?, ?> build, BuildListener listener) {
100106
logger.info("Bitbucket notify on start");
101107

102108
try {
103-
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), build, listener);
109+
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), this.getOverrideLatestBuild(), build, listener);
104110
} catch (Exception e) {
105111
listener.getLogger().println("Bitbucket notify on start failed: " + e.getMessage());
106112
e.printStackTrace(listener.getLogger());
@@ -120,7 +126,7 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListen
120126
logger.info("Bitbucket notify on finish");
121127

122128
try {
123-
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), build, listener);
129+
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), this.getOverrideLatestBuild(), build, listener);
124130
} catch (Exception e) {
125131
logger.log(Level.INFO, "Bitbucket notify on finish failed: " + e.getMessage(), e);
126132
listener.getLogger().println("Bitbucket notify on finish failed: " + e.getMessage());

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusNotifierStep.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public Void run() throws Exception {
186186
BitbucketBuildStatus buildStatus = new BitbucketBuildStatus(buildState, buildKey, buildUrl, buildName,
187187
buildDescription);
188188

189-
BitbucketBuildStatusHelper.notifyBuildStatus(step.getCredentials(build), build, taskListener, buildStatus);
189+
BitbucketBuildStatusHelper.notifyBuildStatus(step.getCredentials(build), false, build, taskListener, buildStatus);
190190

191191
if(buildState.equals(BitbucketBuildStatus.FAILED)) {
192192
throw new Exception(buildDescription);

src/main/resources/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusNotifier/config.jelly

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<f:entry title="${%Notify build finish}" field="notifyFinish">
77
<f:checkbox />
88
</f:entry>
9+
<f:entry title="${%Only show latest build status}" field="overrideLatestBuild">
10+
<f:checkbox />
11+
</f:entry>
912
<f:advanced>
1013
<f:entry title="${%Credentials}" field="credentialsId">
1114
<c:select />

0 commit comments

Comments
 (0)