[ 
https://issues.jenkins-ci.org/browse/JENKINS-10147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=162956#comment-162956
 ] 

Julien-Pierre Avérous commented on JENKINS-10147:
-------------------------------------------------

Here a git diff with a little bit cleaner implementation, with a check box in 
the UI to activate / deactivate this functionality.

{code}
diff --git 
a/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
 
b/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
index d955f4c..304337d 100644
--- 
a/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
+++ 
b/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
@@ -12,6 +12,11 @@ import hudson.model.Node;
 import hudson.model.Run;
 import org.kohsuke.stapler.DataBoundConstructor;
 
+import hudson.scm.SCM;
+import hudson.scm.PollingResult;
+import hudson.util.LogTaskListener;
+import static hudson.scm.PollingResult.*;
+
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
 
@@ -27,22 +32,56 @@ import java.util.concurrent.Future;
  */
 public class BlockableBuildTriggerConfig extends BuildTriggerConfig {
     private final BlockingBehaviour block;
+    private final boolean           buildScm;
+    
     public boolean buildAllNodesWithLabel;
 
-    public BlockableBuildTriggerConfig(String projects, BlockingBehaviour 
block, List<AbstractBuildParameters> configs) {
+    public BlockableBuildTriggerConfig(String projects, BlockingBehaviour 
block, boolean buildScm, List<AbstractBuildParameters> configs) {
         super(projects, ResultCondition.ALWAYS, false, configs);
         this.block = block;
+        this.buildScm = buildScm;
     }
 
     @DataBoundConstructor
-    public BlockableBuildTriggerConfig(String projects, BlockingBehaviour 
block, List<AbstractBuildParameterFactory> 
configFactories,List<AbstractBuildParameters> configs) {
+    public BlockableBuildTriggerConfig(String projects, BlockingBehaviour 
block, boolean buildScm, List<AbstractBuildParameterFactory> 
configFactories,List<AbstractBuildParameters> configs) {
         super(projects, ResultCondition.ALWAYS, false, configFactories, 
configs);
         this.block = block;
+        this.buildScm = buildScm;
     }
 
     public BlockingBehaviour getBlock() {
         return block;
     }
+    
+    public boolean getBuildScm() {
+        return buildScm;
+    }
+    
+    @Override
+    public boolean needRebuild(AbstractProject project)
+       {          
+        if (getBuildScm() == false)
+            return true;       
+       
+        SCM scm = project.getScm();
+
+        if (scm != null)
+        {
+            // Check that we don't have change in SCM
+            PollingResult res = project.poll(LogTaskListener.NULL);
+
+            if (res == NO_CHANGES)
+            {
+                // Check that we have a sucessfull build
+                Run success = project.getLastSuccessfulBuild();
+                
+                if (success != null)
+                    return false;
+            }
+        }
+        
+        return true;
+       }
 
     @Override
     public List<Future<AbstractBuild>> perform(AbstractBuild<?, ?> build, 
Launcher launcher, BuildListener listener) throws InterruptedException, 
IOException {
diff --git 
a/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java 
b/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
index d5144a7..c6f52be 100644
--- a/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
+++ b/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
@@ -31,6 +31,8 @@ import 
hudson.plugins.parameterizedtrigger.AbstractBuildParameters.DontTriggerEx
 import hudson.tasks.Messages;
 import hudson.util.FormValidation;
 
+import hudson.console.HyperlinkNote;
+
 import jenkins.model.Jenkins;
 import org.apache.commons.lang.StringUtils;
 import org.kohsuke.stapler.AncestorInPath;
@@ -201,6 +203,11 @@ public class BuildTriggerConfig implements 
Describable<BuildTriggerConfig> {
                }
                return actions;
        }
+       
+       public boolean needRebuild(AbstractProject project)
+       {
+        return true;
+       }
 
        /**
      * Note that with Hudson 1.341, trigger should be using
@@ -222,7 +229,10 @@ public class BuildTriggerConfig implements 
Describable<BuildTriggerConfig> {
                     for (AbstractProject project : 
getProjectList(build.getProject().getParent(),env)) {
                         List<Action> list = getBuildActions(actions, project);
 
-                        futures.add(schedule(build, project, list));
+                        if (needRebuild(project))
+                            futures.add(schedule(build, project, list));
+                        else
+                            listener.getLogger().println("Skipping " + 
HyperlinkNote.encodeTo('/'+ project.getUrl(), project.getFullDisplayName()) + 
". Don't need to rebuild.");
                     }
                 }
 
@@ -247,7 +257,10 @@ public class BuildTriggerConfig implements 
Describable<BuildTriggerConfig> {
                     for (AbstractProject project : 
getProjectList(build.getProject().getParent(),env)) {
                         List<Action> list = getBuildActions(actions, project);
                         
-                        futures.put(project, schedule(build, project, list));
+                        if (needRebuild(project))
+                            futures.put(project, schedule(build, project, 
list));
+                        else
+                            listener.getLogger().println("Skipping " + 
HyperlinkNote.encodeTo('/'+ project.getUrl(), project.getFullDisplayName()) + 
". Don't need to rebuild.");
                     }
                 }
                 return futures;
diff --git 
a/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java 
b/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
index b5b4262..fb6b100 100644
--- a/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
+++ b/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
@@ -99,7 +99,7 @@ public class TriggerBuilder extends Builder implements 
DependecyDeclarer {
                 if(!projectList.isEmpty()){
                     //handle non-blocking configs
                     if(futures.isEmpty()){
-                        listener.getLogger().println("Triggering projects: " + 
getProjectListAsString(projectList));
+                        listener.getLogger().println("Triggering or skipped 
projects: " + getProjectListAsString(projectList));
                         continue;
                     }
                     //handle blocking configs
diff --git 
a/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
 
b/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
index 1c49bbd..a279ef5 100644
--- 
a/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
+++ 
b/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
@@ -22,9 +22,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN
 THE SOFTWARE.
 -->
 <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" 
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
+
   <f:entry title="${%Projects to build}" field="projects">
     <f:textbox />
   </f:entry>
+  
+  <f:block>
+    <f:checkbox title="${%Build triggered projects only if there is SCM 
changes}" field="buildScm" checked="${instance.buildScm==true}" />
+  </f:block>
+
   <!-- TODO: replace with <f:optionalProperty> -->
   <f:optionalBlock field="block" title="${%Block until the triggered projects 
finish their builds}" checked="${instance.block!=null}">
     <j:set var="descriptor" 
value="${app.getDescriptorOrDie(descriptor.getPropertyType(field).clazz)}" />
{code}
                
> Add 'poll SCM' option to build step
> -----------------------------------
>
>                 Key: JENKINS-10147
>                 URL: https://issues.jenkins-ci.org/browse/JENKINS-10147
>             Project: Jenkins
>          Issue Type: New Feature
>          Components: parameterized-trigger
>            Reporter: G. Ann Campbell
>            Assignee: huybrechts
>            Priority: Minor
>
> It would be nice, in at least the 'build step' part of the 
> parameterized-trigger plugin, to have the option to build conditionally based 
> on SCM polling. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.jenkins-ci.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to