From cc83bf0ee0aeb4a2828992d3fdcf24e916a2704e Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Tue, 22 Oct 2019 17:56:39 -0400 Subject: [PATCH] Introduce new Run#getBuildsOverThreshold() method for getting runs above the desired execution result (#4259) * IntelliJ/Java: Duplicate code Refactored as Run.getBuildsOverThreshold * CheckForNull Co-Authored-By: Oleg Nenashev * getBuildsOverThreshold: get RunT using _this() --- core/src/main/java/hudson/model/Job.java | 13 +------------ core/src/main/java/hudson/model/Run.java | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index dc439794a8..f56654ec93 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -994,19 +994,8 @@ public abstract class Job, RunT extends Run getLastBuildsOverThreshold(int numberOfBuilds, Result threshold) { - - List result = new ArrayList<>(numberOfBuilds); - RunT r = getLastBuild(); - while (r != null && result.size() < numberOfBuilds) { - if (!r.isBuilding() && - (r.getResult() != null && r.getResult().isBetterOrEqualTo(threshold))) { - result.add(r); - } - r = r.getPreviousBuild(); - } - - return result; + return r.getBuildsOverThreshold(numberOfBuilds, threshold); } /** diff --git a/core/src/main/java/hudson/model/Run.java b/core/src/main/java/hudson/model/Run.java index e0313fe666..f95217bbe5 100644 --- a/core/src/main/java/hudson/model/Run.java +++ b/core/src/main/java/hudson/model/Run.java @@ -953,17 +953,32 @@ public abstract class Run ,RunT extends Run getPreviousBuildsOverThreshold(int numberOfBuilds, @Nonnull Result threshold) { - List builds = new ArrayList<>(numberOfBuilds); - RunT r = getPreviousBuild(); + return r.getBuildsOverThreshold(numberOfBuilds, threshold); + } + + /** + * Returns the last {@code numberOfBuilds} builds with a build result ≥ {@code threshold}. + * + * @param numberOfBuilds the desired number of builds + * @param threshold the build result threshold + * @return a list with the builds (youngest build first). + * May be smaller than 'numberOfBuilds' or even empty + * if not enough builds satisfying the threshold have been found. Never null. + * @since TODO + */ + protected @Nonnull List getBuildsOverThreshold(int numberOfBuilds, @Nonnull Result threshold) { + List builds = new ArrayList<>(numberOfBuilds); + + RunT r = _this(); while (r != null && builds.size() < numberOfBuilds) { - if (!r.isBuilding() && + if (!r.isBuilding() && (r.getResult() != null && r.getResult().isBetterOrEqualTo(threshold))) { builds.add(r); } r = r.getPreviousBuild(); } - + return builds; } -- GitLab