From b005b53331cd229d1792e7149639ca4e3f0b053b Mon Sep 17 00:00:00 2001 From: Poorly Defined Date: Fri, 18 Aug 2023 08:46:30 -0700 Subject: [PATCH] fix for JENKINS-71328 -- Add handling for cases where processed Gerrit Event has null ChangeSet attributes --- .../gerrit/trigger/hudsontrigger/RunningJobs.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java index 8d70f65e6..d9eb9b93a 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java @@ -191,10 +191,19 @@ private boolean shouldIgnoreEvent(ChangeBasedEvent event, return true; } - boolean shouldCancelPatchsetNumber = policy.isAbortNewPatchsets() - || Integer.parseInt(runningChangeBasedEvent.getPatchSet().getNumber()) + // events of "type": "topic-changed" are not required to set a PatchSet + boolean hasPatchSets = runningChangeBasedEvent.getPatchSet() != null + && event.getPatchSet() != null; + + boolean hasPatchNumbers = hasPatchSets && runningChangeBasedEvent.getPatchSet().getNumber() != null + && event.getPatchSet().getNumber() != null; + + boolean isOldPatch = hasPatchSets && hasPatchNumbers + && Integer.parseInt(runningChangeBasedEvent.getPatchSet().getNumber()) < Integer.parseInt(event.getPatchSet().getNumber()); + boolean shouldCancelPatchsetNumber = policy.isAbortNewPatchsets() || isOldPatch; + boolean isAbortAbandonedPatchset = policy.isAbortAbandonedPatchsets() && (event instanceof ChangeAbandoned); @@ -304,7 +313,7 @@ public void add(ChangeBasedEvent event) { * @return true if event was still running. */ public boolean remove(ChangeBasedEvent event) { - logger.debug("Removing future job " + event.getPatchSet().getNumber()); + logger.debug("Removing future job associated with " + event.getChange().getId()); return runningJobs.remove(event); } }