From a84ebb138fa77f21bf9da9323bc3496def246a15 Mon Sep 17 00:00:00 2001 From: Magnus Reftel Date: Fri, 14 Oct 2016 23:17:25 +0200 Subject: [PATCH] Feature: include/exclude branches of multi-branch pipelines Closes #246 --- build-monitor-plugin/pom.xml | 2 +- .../buildmonitor/BuildMonitorView.java | 37 ++++++++++++++++++- .../plugins/buildmonitor/Config.java | 22 +++++++++++ .../BuildMonitorView/configure-entries.jelly | 8 ++++ .../help-excludeBranches.html | 10 +++++ .../help-includeBranches.html | 9 +++++ 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-excludeBranches.html create mode 100644 build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/help-includeBranches.html diff --git a/build-monitor-plugin/pom.xml b/build-monitor-plugin/pom.xml index 45aa6e437..63f611b40 100644 --- a/build-monitor-plugin/pom.xml +++ b/build-monitor-plugin/pom.xml @@ -136,7 +136,7 @@ org.jenkins-ci.plugins cloudbees-folder - 4.2.3 + 5.12 true diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java index 0b324db25..ead5d2613 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView.java @@ -23,6 +23,8 @@ */ package com.smartcodeltd.jenkinsci.plugins.buildmonitor; +import com.cloudbees.hudson.plugins.folder.AbstractFolder; +import com.google.common.base.Strings; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.api.Respond; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.installation.BuildMonitorInstallation; @@ -30,6 +32,7 @@ import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.JobViews; import hudson.Extension; import hudson.model.Descriptor.FormException; +import hudson.model.ItemGroup; import hudson.model.Job; import hudson.model.ListView; import net.sf.json.JSONObject; @@ -43,6 +46,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.regex.Pattern; import static hudson.Util.filter; @@ -86,6 +90,16 @@ public String currentOrder() { return currentConfig().getOrder().getClass().getSimpleName(); } + @SuppressWarnings("unused") // used in the configure-entries.jelly form + public String include() { + return currentConfig().getInclude(); + } + + @SuppressWarnings("unused") // used in the configure-entries.jelly form + public String exclude() { + return currentConfig().getExclude(); + } + @SuppressWarnings("unused") // used in the configure-entries.jelly form public boolean isDisplayCommitters() { return currentConfig().shouldDisplayCommitters(); @@ -112,9 +126,13 @@ protected void submit(StaplerRequest req) throws ServletException, IOException, synchronized (this) { String requestedOrdering = req.getParameter("order"); + String include = req.getParameter("include"); + String exclude = req.getParameter("exclude"); title = req.getParameter("title"); currentConfig().setDisplayCommitters(json.optBoolean("displayCommitters", true)); + currentConfig().setInclude(include); + currentConfig().setExclude(exclude); try { currentConfig().setOrder(orderIn(requestedOrdering)); @@ -143,11 +161,28 @@ private boolean isGiven(String value) { private List jobViews() { JobViews views = new JobViews(new StaticJenkinsAPIs(), currentConfig()); + List jobs = new ArrayList(); //A little bit of evil to make the type system happy. + @SuppressWarnings("unchecked") + List> groups = new ArrayList(filter(super.getItems(), AbstractFolder.class)); + + Pattern includePattern = Strings.isNullOrEmpty(currentConfig().getInclude()) ? null : Pattern.compile(currentConfig().getInclude()); + Pattern excludePattern = Strings.isNullOrEmpty(currentConfig().getExclude()) ? null : Pattern.compile(currentConfig().getExclude()); + for (ItemGroup group : groups) { + @SuppressWarnings("unchecked") + List> groupJobs = new ArrayList(filter(group.getItems(), Job.class)); + for (Job job : groupJobs) { + boolean shouldInclude = includePattern == null || includePattern.matcher(job.getRelativeNameFrom(group)).find(); + boolean shouldExclude = excludePattern != null && excludePattern.matcher(job.getRelativeNameFrom(group)).find(); + if (shouldInclude && !shouldExclude) { + jobs.add(views.viewOf(job)); + } + } + } + @SuppressWarnings("unchecked") List> projects = new ArrayList(filter(super.getItems(), Job.class)); - List jobs = new ArrayList(); Collections.sort(projects, currentConfig().getOrder()); diff --git a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java index 83ebd2e7b..e6ac4863f 100644 --- a/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java +++ b/build-monitor-plugin/src/main/java/com/smartcodeltd/jenkinsci/plugins/buildmonitor/Config.java @@ -44,10 +44,32 @@ public void setDisplayCommitters(boolean flag) { public String toString() { return Objects.toStringHelper(this) .add("order", order.getClass().getSimpleName()) + .add("include", include) + .add("exclude", exclude) .toString(); } // -- private Comparator> order; + + private String include; + + public String getInclude() { + return include; + } + + public void setInclude(String include) { + this.include = include; + } + + private String exclude; + + public String getExclude() { + return exclude; + } + + public void setExclude(String exclude) { + this.exclude = exclude; + } } \ No newline at end of file diff --git a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly index 59a277a47..4dce066b0 100644 --- a/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly +++ b/build-monitor-plugin/src/main/resources/com/smartcodeltd/jenkinsci/plugins/buildmonitor/BuildMonitorView/configure-entries.jelly @@ -56,6 +56,14 @@ + + + + + + + +