@@ -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 }
0 commit comments