diff --git a/pom.xml b/pom.xml
index 7a7596ad..af2ac261 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,8 +11,8 @@
- 1.554.1
- 1.554.1
+ 1.580
+ 1.580
false
@@ -60,6 +60,11 @@
org.apache.maven.plugins
maven-checkstyle-plugin
+
+ org.apache.maven.plugins
+ maven-surefire-report-plugin
+ 2.20
+
@@ -130,7 +135,7 @@
org.jenkins-ci.plugins
git
- 2.3.4
+ 2.4.1
test
@@ -162,6 +167,13 @@
test
+
+ org.jenkins-ci.plugins
+ matrix-project
+ 1.4.1
+ test
+
+
org.jenkins-ci.plugins
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintAction.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintAction.java
index 28244c19..95f00210 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintAction.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintAction.java
@@ -5,45 +5,19 @@
import hudson.model.Node;
import hudson.model.RootAction;
import jenkins.model.Jenkins;
-import org.jenkins.ci.plugins.jenkinslint.check.ArtifactChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.CleanupWorkspaceChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GitRefChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GitShallowChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GradleWrapperChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GroovySystemExitChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.HardcodedScriptChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JavadocChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobAssignedLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobDescriptionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobLogRotatorChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobNameChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.TimerTriggerChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MasterLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MavenJobTypeChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MultibranchJobTypeChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.NullSCMChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.PollingSCMTriggerChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveDescriptionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveVersionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.TimeoutChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.WindowsSlaveLaunchChecker;
import org.jenkins.ci.plugins.jenkinslint.model.AbstractAction;
import org.jenkins.ci.plugins.jenkinslint.model.InterfaceCheck;
import org.jenkins.ci.plugins.jenkinslint.model.InterfaceSlaveCheck;
import org.jenkins.ci.plugins.jenkinslint.model.Job;
import org.jenkins.ci.plugins.jenkinslint.model.Lint;
import org.jenkins.ci.plugins.jenkinslint.model.Slave;
-import org.jenkins.ci.plugins.jenkinslint.model.AbstractCheck;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;
-import hudson.model.Api;
@ExportedBean
@Extension
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleChecker.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleChecker.java
new file mode 100644
index 00000000..b7aa2a55
--- /dev/null
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleChecker.java
@@ -0,0 +1,64 @@
+package org.jenkins.ci.plugins.jenkinslint.check;
+
+import hudson.PluginWrapper;
+import hudson.model.Item;
+import hudson.model.Project;
+import jenkins.model.Jenkins;
+import org.jenkins.ci.plugins.jenkinslint.model.AbstractCheck;
+
+import java.lang.reflect.Method;
+import java.util.AbstractList;
+import java.util.logging.Level;
+
+/**
+ * @author Victor Martinez
+ */
+public class GitRefSubmoduleChecker extends AbstractCheck {
+
+ public GitRefSubmoduleChecker() {
+ super();
+ this.setDescription(Messages.GitRefSubmoduleCheckerDesc());
+ this.setSeverity(Messages.GitRefSubmoduleCheckerSeverity());
+ }
+
+ public boolean executeCheck(Item item) {
+ if (item instanceof Project) {
+ PluginWrapper plugin = Jenkins.getInstance().pluginManager.getPlugin("git");
+ if (plugin!=null && plugin.getVersionNumber().isNewerThan(new hudson.util.VersionNumber("2.4.0"))) {
+ if (Jenkins.getInstance().pluginManager.getPlugin("git") != null) {
+ if (((Project) item).getScm().getClass().getName().endsWith("GitSCM")) {
+ boolean status = true;
+ try {
+ Method method = ((Project) item).getScm().getClass().getMethod("getExtensions",null);
+ Object extensionsList = method.invoke(((Project) item).getScm());
+ if (extensionsList instanceof AbstractList) {
+ for (Object extension : ((AbstractList) extensionsList)) {
+ if (extension.getClass().getName().endsWith("SubmoduleOption")) {
+ Object reference = extension.getClass().getMethod("getReference",null).invoke(extension);
+ if (reference instanceof String) {
+ LOG.log(Level.WARNING, "foundXXX " + reference);
+ status = ((String) reference).isEmpty();
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
+ status = false;
+ } finally {
+ return status;
+ }
+ }
+ } else {
+ LOG.log(Level.FINE, "Plugin GIT hasn't been configured in this project");
+ return false;
+ }
+ } else {
+ LOG.log(Level.FINE, "Plugin GIT doesn't exist");
+ return false;
+ }
+
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GradleWrapperChecker.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GradleWrapperChecker.java
index e93ae6f6..f4a82923 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GradleWrapperChecker.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GradleWrapperChecker.java
@@ -1,6 +1,5 @@
package org.jenkins.ci.plugins.jenkinslint.check;
-import hudson.matrix.MatrixProject;
import hudson.model.Item;
import hudson.model.Project;
import hudson.tasks.Builder;
@@ -37,10 +36,16 @@ public boolean executeCheck(Item item) {
if (item instanceof Project) {
found = isGradlew(((Project) item).getBuilders());
}
- if (item instanceof MatrixProject) {
- found = isGradlew(((MatrixProject) item).getBuilders());
+ if (item.getClass().getSimpleName().equals("MatrixProject")) {
+ try {
+ Object getBuilders = item.getClass().getMethod("getBuilders", null).invoke(item);
+ if (getBuilders instanceof List) {
+ found = isGradlew((List) getBuilders);
+ }
+ }catch (Exception e) {
+ LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
+ }
}
-
}
return found;
}
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GroovySystemExitChecker.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GroovySystemExitChecker.java
index fab7ad46..ac4f2219 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GroovySystemExitChecker.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/GroovySystemExitChecker.java
@@ -1,6 +1,5 @@
package org.jenkins.ci.plugins.jenkinslint.check;
-import hudson.matrix.MatrixProject;
import hudson.model.Item;
import hudson.model.Project;
import hudson.tasks.Builder;
@@ -38,10 +37,16 @@ public boolean executeCheck(Item item) {
if (item instanceof Project) {
found = isSystemExit(((Project) item).getBuilders());
}
- if (item instanceof MatrixProject) {
- found = isSystemExit(((MatrixProject) item).getBuilders());
+ if (item.getClass().getSimpleName().equals("MatrixProject")) {
+ try {
+ Object getBuilders = item.getClass().getMethod("getBuilders", null).invoke(item);
+ if (getBuilders instanceof List) {
+ found = isSystemExit((List) getBuilders);
+ }
+ }catch (Exception e) {
+ LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
+ }
}
-
} else {
LOG.log(Level.INFO, "Groovy is not installed");
}
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/HardcodedScriptChecker.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/HardcodedScriptChecker.java
index c07fbd2e..3fb964a0 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/HardcodedScriptChecker.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/HardcodedScriptChecker.java
@@ -1,11 +1,9 @@
package org.jenkins.ci.plugins.jenkinslint.check;
-import hudson.matrix.MatrixProject;
import hudson.model.Item;
import hudson.model.Project;
import hudson.tasks.Builder;
import hudson.tasks.CommandInterpreter;
-import jenkins.model.Jenkins;
import org.jenkins.ci.plugins.jenkinslint.model.AbstractCheck;
import java.util.List;
@@ -41,8 +39,15 @@ public boolean executeCheck(Item item) {
if (item instanceof Project) {
found = isBuilderHarcoded (((Project)item).getBuilders());
}
- if (item instanceof MatrixProject) {
- found = isBuilderHarcoded (((MatrixProject)item).getBuilders());
+ if (item.getClass().getSimpleName().equals("MatrixProject")) {
+ try {
+ Object getBuilders = item.getClass().getMethod("getBuilders", null).invoke(item);
+ if (getBuilders instanceof List) {
+ found = isBuilderHarcoded((List) getBuilders);
+ }
+ }catch (Exception e) {
+ LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
+ }
}
return found;
}
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/TimeoutChecker.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/TimeoutChecker.java
index a7b247b8..d014ce40 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/TimeoutChecker.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/check/TimeoutChecker.java
@@ -1,6 +1,5 @@
package org.jenkins.ci.plugins.jenkinslint.check;
-import hudson.matrix.MatrixProject;
import hudson.model.Descriptor;
import hudson.model.Item;
import hudson.model.Project;
@@ -8,7 +7,6 @@
import hudson.util.DescribableList;
import jenkins.model.Jenkins;
import org.jenkins.ci.plugins.jenkinslint.model.AbstractCheck;
-
import java.lang.reflect.Method;
import java.util.List;
import java.util.logging.Level;
@@ -40,8 +38,15 @@ public boolean executeCheck(Item item) {
if (item instanceof Project) {
notfound = !isTimeout(((Project) item).getBuildWrappersList());
}
- if (item instanceof MatrixProject) {
- notfound = !isTimeout(((MatrixProject) item).getBuildWrappersList());
+ if (item.getClass().getSimpleName().equals("MatrixProject")) {
+ try {
+ Object getBuildWrappersList = item.getClass().getMethod("getBuildWrappersList", null).invoke(item);
+ if (getBuildWrappersList instanceof List) {
+ notfound = !isTimeout((List) getBuildWrappersList);
+ }
+ }catch (Exception e) {
+ LOG.log(Level.WARNING, "Exception " + e.getMessage(), e.getCause());
+ }
}
}
return notfound;
diff --git a/src/main/java/org/jenkins/ci/plugins/jenkinslint/model/AbstractAction.java b/src/main/java/org/jenkins/ci/plugins/jenkinslint/model/AbstractAction.java
index b96b7c43..175d1d9e 100644
--- a/src/main/java/org/jenkins/ci/plugins/jenkinslint/model/AbstractAction.java
+++ b/src/main/java/org/jenkins/ci/plugins/jenkinslint/model/AbstractAction.java
@@ -2,29 +2,7 @@
import hudson.model.Api;
import org.jenkins.ci.plugins.jenkinslint.Messages;
-import org.jenkins.ci.plugins.jenkinslint.check.ArtifactChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.CleanupWorkspaceChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GitRefChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GitShallowChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GradleWrapperChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.GroovySystemExitChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.HardcodedScriptChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JavadocChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobAssignedLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobDescriptionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobLogRotatorChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.JobNameChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MasterLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MavenJobTypeChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.MultibranchJobTypeChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.NullSCMChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.PollingSCMTriggerChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveDescriptionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveLabelChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.SlaveVersionChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.TimeoutChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.TimerTriggerChecker;
-import org.jenkins.ci.plugins.jenkinslint.check.WindowsSlaveLaunchChecker;
+import org.jenkins.ci.plugins.jenkinslint.check.*;
import java.io.IOException;
import java.util.ArrayList;
@@ -97,6 +75,7 @@ protected void reloadCheckList() {
checkList.add(new GroovySystemExitChecker());
checkList.add(new GitRefChecker());
checkList.add(new TimerTriggerChecker());
+ checkList.add(new GitRefSubmoduleChecker());
}
protected void reloadSlaveCheckList() {
diff --git a/src/main/resources/org/jenkins/ci/plugins/jenkinslint/check/Messages.properties b/src/main/resources/org/jenkins/ci/plugins/jenkinslint/check/Messages.properties
index 0cbf4480..2d7b105a 100644
--- a/src/main/resources/org/jenkins/ci/plugins/jenkinslint/check/Messages.properties
+++ b/src/main/resources/org/jenkins/ci/plugins/jenkinslint/check/Messages.properties
@@ -18,6 +18,12 @@ GitRefCheckerDesc=\
GitRefCheckerSeverity=Low
+GitRefSubmoduleCheckerDesc=\
+ When setting Jenkins Jobs with Git SCM you might speed up the cloning time if \
+ you use git ref repos when cloning submodules.\
+
+GitRefSubmoduleCheckerSeverity=Low
+
GitShallowCheckerDesc=\
When setting Jenkins Jobs with Git SCM Artifact you might speed up the \
cloning time if you use shallow cloning.\
diff --git a/src/test/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintActionTestCase.java b/src/test/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintActionTestCase.java
index 4ae60fb5..df784aa2 100644
--- a/src/test/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintActionTestCase.java
+++ b/src/test/java/org/jenkins/ci/plugins/jenkinslint/JenkinsLintActionTestCase.java
@@ -83,6 +83,7 @@ public void testUITable() throws Exception {
assertTrue(content.contains(htmlLint("GroovySystemExitChecker", "JL-17")));
assertTrue(content.contains(htmlLint("GitRefChecker", "JL-18")));
assertTrue(content.contains(htmlLint("TimerTriggerChecker", "JL-19")));
+ assertTrue(content.contains(htmlLint("GitRefSubmoduleChecker", "JL-20")));
}
private String htmlLint (String name, String id) {
diff --git a/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleCheckerTestCase.java b/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleCheckerTestCase.java
new file mode 100644
index 00000000..8c32d63f
--- /dev/null
+++ b/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/GitRefSubmoduleCheckerTestCase.java
@@ -0,0 +1,72 @@
+package org.jenkins.ci.plugins.jenkinslint.check;
+
+import hudson.model.FreeStyleProject;
+import hudson.plugins.git.extensions.GitSCMExtension;
+import hudson.plugins.git.extensions.impl.CleanCheckout;
+import hudson.plugins.git.extensions.impl.SubmoduleOption;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * GitRefSubmoduleChecker Test Case.
+ *
+ * @author Victor Martinez
+ */
+public class GitRefSubmoduleCheckerTestCase extends AbstractCheckerTestCase {
+ private GitRefSubmoduleChecker checker = new GitRefSubmoduleChecker();
+
+ @Test public void testEmptyJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ assertFalse(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ project.setScm(new hudson.plugins.git.GitSCM(""));
+ assertTrue(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMWithFurtherValuesJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ project.setScm(new hudson.plugins.git.GitSCM(null, null, false, null, null, "", null));
+ assertTrue(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMWithEmptyExtensionJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ ArrayList extensions = new ArrayList();
+ project.setScm(new hudson.plugins.git.GitSCM(null,null,false,null,null,"", extensions));
+ assertTrue(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMWithSomeExtensionJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ ArrayList extensions = new ArrayList();
+ extensions.add(new CleanCheckout());
+ project.setScm(new hudson.plugins.git.GitSCM(null,null,false,null,null,"", extensions));
+ assertTrue(checker.executeCheck(project));
+ extensions.add(new SubmoduleOption(false,false,false,null,1));
+ project.setScm(new hudson.plugins.git.GitSCM(null,null,false,null,null, "", extensions));
+ assertTrue(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMWithCloneOptionExtensionNoRefJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ ArrayList extensions = new ArrayList();
+ extensions.add(new SubmoduleOption(false, false,false,null,1));
+ project.setScm(new hudson.plugins.git.GitSCM(null,null,false,null,null,"", extensions));
+ assertTrue(checker.executeCheck(project));
+ }
+ @Test public void testGitSCMWithCloneOptionExtensionRefJob() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ ArrayList extensions = new ArrayList();
+ extensions.add(new SubmoduleOption(false,false,false,"/path/.git-cache",1));
+ project.setScm(new hudson.plugins.git.GitSCM(null,null,false,null,null,"", extensions));
+ assertFalse(checker.executeCheck(project));
+ }
+ @Test public void testControlComment() throws Exception {
+ FreeStyleProject project = j.createFreeStyleProject();
+ assertFalse(checker.isIgnored(project.getDescription()));
+ project.setDescription("#lint:ignore:" + checker.getClass().getSimpleName());
+ assertTrue(checker.isIgnored(project.getDescription()));
+ }
+}
diff --git a/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/MasterLabelCheckerTestCase.java b/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/MasterLabelCheckerTestCase.java
index 7162e29b..3fad460c 100644
--- a/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/MasterLabelCheckerTestCase.java
+++ b/src/test/java/org/jenkins/ci/plugins/jenkinslint/check/MasterLabelCheckerTestCase.java
@@ -16,7 +16,7 @@ public class MasterLabelCheckerTestCase extends AbstractCheckerTestCase {
@Test public void testDefaultJob() throws Exception {
FreeStyleProject project = j.createFreeStyleProject();
- assertTrue(checker.executeCheck(project));
+ assertFalse(checker.executeCheck(project));
}
@Test public void testNonDefaultJob() throws Exception {
FreeStyleProject project = j.createFreeStyleProject();