diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index dc439794a85461f7a80de57e36f6f85317fea690..f56654ec93b8ba91cc86d3a778884f06f622626b 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 e0313fe666547d10ff4f063de1efd0153b832de2..f95217bbe515c0d6433a14f178563b05b1d59e02 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; }