Skip to content

Commit 61bd032

Browse files
committed
[FIXED JENKINS-9971] Fix NPE when validating remote for publish.
Add new validation to GitPublisher that checks the remote name is a valid repository name. Also update validatation in GitSCM to response null repo name and url parameter values.
1 parent 6513580 commit 61bd032

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

src/main/java/hudson/plugins/git/GitPublisher.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@
2828
import java.util.ArrayList;
2929
import java.util.List;
3030

31+
import javax.servlet.ServletException;
32+
3133

3234
import org.apache.commons.lang.StringUtils;
3335

3436
import org.kohsuke.stapler.AncestorInPath;
3537
import org.kohsuke.stapler.QueryParameter;
3638
import org.kohsuke.stapler.DataBoundConstructor;
39+
import org.kohsuke.stapler.StaplerRequest;
3740

3841
import org.eclipse.jgit.transport.RemoteConfig;
3942

@@ -402,6 +405,31 @@ public FormValidation doCheckTagName(@QueryParameter String value) {
402405
public FormValidation doCheckBranchName(@QueryParameter String value) {
403406
return checkFieldNotEmpty(value, "Branch Name");
404407
}
408+
409+
public FormValidation doCheckRemote(
410+
@AncestorInPath AbstractProject project, StaplerRequest req)
411+
throws IOException, ServletException {
412+
String remote = req.getParameter("value");
413+
boolean isMerge = req.getParameter("isMerge") != null;
414+
415+
// Added isMerge because we don't want to allow empty remote names
416+
// for tag/branch pushes.
417+
if (remote.length() == 0 && isMerge)
418+
return FormValidation.ok();
419+
420+
FormValidation validation = checkFieldNotEmpty(remote,
421+
"Remote Name");
422+
if (validation.kind != FormValidation.Kind.OK)
423+
return validation;
424+
425+
GitSCM scm = (GitSCM) project.getScm();
426+
if (scm.getRepositoryByName(remote) == null)
427+
return FormValidation
428+
.error("No remote repository configured with name '"
429+
+ remote + "'");
430+
431+
return FormValidation.ok();
432+
}
405433

406434
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
407435
return true;

src/main/java/hudson/plugins/git/GitSCM.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,14 +1528,10 @@ public FormValidation doGitRemoteNameCheck(StaplerRequest req, StaplerResponse r
15281528

15291529
String[] urls = req.getParameterValues("repo.url");
15301530
String[] names = req.getParameterValues("repo.name");
1531-
1532-
names = GitUtils.fixupNames(names, urls);
1533-
1534-
for (String name : names) {
1535-
if (name.equals(mergeRemoteName)) {
1536-
return FormValidation.ok();
1537-
}
1538-
}
1531+
if (urls != null && names != null)
1532+
for (String name : GitUtils.fixupNames(names, urls))
1533+
if (name.equals(mergeRemoteName))
1534+
return FormValidation.ok();
15391535

15401536
return FormValidation.error("No remote repository configured with name '" + mergeRemoteName + "'");
15411537
}

src/main/resources/hudson/plugins/git/GitPublisher/config.jelly

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@
4141
<f:entry field="targetRepoName"
4242
title="${%Target remote name}">
4343
<f:textbox
44-
checkUrl="'${rootURL}/scm/GitSCM/gitRemoteNameCheck?value='+escape(this.value)
45-
+encodeAllInputs('&amp;', this.form, 'git.repo.name')
46-
+encodeAllInputs('&amp;', this.form, 'git.repo.url')"/>
44+
checkUrl="'descriptorByName/GitPublisher/checkRemote?value='+escape(this.value)"/>
4745
</f:entry>
4846
</table>
4947
<div align="right">
@@ -65,9 +63,7 @@
6563
<f:entry field="targetRepoName"
6664
title="${%Target remote name}">
6765
<f:textbox
68-
checkUrl="'${rootURL}/scm/GitSCM/gitRemoteNameCheck?value='+escape(this.value)
69-
+encodeAllInputs('&amp;', this.form, 'git.repo.name')
70-
+encodeAllInputs('&amp;', this.form, 'git.repo.url')"/>
66+
checkUrl="'descriptorByName/GitPublisher/checkRemote?value='+escape(this.value)" />
7167
</f:entry>
7268
</table>
7369
<div align="right">

0 commit comments

Comments
 (0)