diff --git a/core/src/main/java/hudson/model/ComputerSet.java b/core/src/main/java/hudson/model/ComputerSet.java index 20218badb806ffd1d50cd90bf7062c404cc2d16b..e167ac3f3866b721ea449dbbd7a07081e4aad370 100644 --- a/core/src/main/java/hudson/model/ComputerSet.java +++ b/core/src/main/java/hudson/model/ComputerSet.java @@ -211,7 +211,7 @@ public final class ComputerSet extends AbstractModelObject { app.checkPermission(Hudson.ADMINISTER); // TODO: new permission? try { - checkName(name); + name = checkName(name); } catch (ParseException e) { rsp.setStatus(SC_BAD_REQUEST); sendError(e,req,rsp); @@ -275,8 +275,9 @@ public final class ComputerSet extends AbstractModelObject { /** * Makes sure that the given name is good as a slave name. + * @return trimmed name if valid; throws ParseException if not */ - private void checkName(String name) throws ParseException { + private String checkName(String name) throws ParseException { if(name==null) throw new ParseException("Query parameter 'name' is required",0); @@ -287,6 +288,7 @@ public final class ComputerSet extends AbstractModelObject { throw new ParseException(Messages.ComputerSet_SlaveAlreadyExists(name),0); // looks good + return name; } /** diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 836388de9e2e476f5b579bdf4e2d4915bc04f48f..0229fc0b64242fe49bce9ac1b2bd5b0b07704b37 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -2388,23 +2388,16 @@ public final class Hudson extends Node implements ItemGroup, Stapl rsp.sendError(HttpServletResponse.SC_BAD_REQUEST,"Query parameter 'name' is required"); return null; } - name = name.trim(); - String mode = req.getParameter("mode"); try { - checkGoodName(name); + name = checkJobName(name); } catch (ParseException e) { rsp.setStatus(SC_BAD_REQUEST); sendError(e,req,rsp); return null; } - if(getItem(name)!=null) { - rsp.setStatus(SC_BAD_REQUEST); - sendError(Messages.Hudson_JobAlreadyExists(name),req,rsp); - return null; - } - + String mode = req.getParameter("mode"); if(mode!=null && mode.equals("copy")) { String from = req.getParameter("from"); TopLevelItem src = getItem(from); @@ -2535,6 +2528,19 @@ public final class Hudson extends Node implements ItemGroup, Stapl // looks good } + /** + * Makes sure that the given name is good as a job name. + * @return trimmed name if valid; throws ParseException if not + */ + private String checkJobName(String name) throws ParseException { + checkGoodName(name); + name = name.trim(); + if(getItem(name)!=null) + throw new ParseException(Messages.Hudson_JobAlreadyExists(name),0); + // looks good + return name; + } + private static String toPrintableName(String name) { StringBuilder printableName = new StringBuilder(); for( int i=0; i, Stapl } /** - * Checks if the top-level item with the given name exists. + * Makes sure that the given name is good as a job name. */ - public FormValidation doItemExistsCheck(@QueryParameter String value) { + public FormValidation doCheckJobName(@QueryParameter String value) { // this method can be used to check if a file exists anywhere in the file system, // so it should be protected. checkPermission(Item.CREATE); - String job = fixEmpty(value); - if(job==null) + if(fixEmpty(value)==null) return FormValidation.ok(); - if(getItem(job)==null) + try { + checkJobName(value); return FormValidation.ok(); - else - return FormValidation.error(Messages.Hudson_JobAlreadyExists(job)); + } catch (ParseException e) { + return FormValidation.error(e.getMessage()); + } } /** diff --git a/core/src/main/resources/hudson/model/View/newJob.jelly b/core/src/main/resources/hudson/model/View/newJob.jelly index de0ba223feb53501d8fc01ae639f927f69764818..a90be1a6898069d4c1c96a62c320b9a74de915a6 100644 --- a/core/src/main/resources/hudson/model/View/newJob.jelly +++ b/core/src/main/resources/hudson/model/View/newJob.jelly @@ -32,7 +32,7 @@ THE SOFTWARE. + descriptors="${jobs}" checkUrl="checkJobName" xmlns:n="/lib/hudson/newFromList" />