提交 480dd989 编写于 作者: M mindless

Make validator for new job name warn about invalid characters (instead of not

getting this error until you click Ok).
Make ComputerSet store the trimmed name when adding a new slave.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@21332 71c3de6d-444a-0410-be80-ed276b4c234a
上级 88857a6f
......@@ -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;
}
/**
......
......@@ -2388,23 +2388,16 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, 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<TopLevelItem>, 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<name.length(); i++ ) {
......@@ -2928,21 +2934,22 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, 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());
}
}
/**
......
......@@ -32,7 +32,7 @@ THE SOFTWARE.
<l:main-panel>
<j:getStatic var="jobs" className="hudson.model.Items" field="LIST" />
<n:form nameTitle="${%Job name}" copyTitle="${%Copy existing job}" copyNames="${app.topLevelItemNames}"
descriptors="${jobs}" checkUrl="itemExistsCheck" xmlns:n="/lib/hudson/newFromList" />
descriptors="${jobs}" checkUrl="checkJobName" xmlns:n="/lib/hudson/newFromList" />
</l:main-panel>
</l:layout>
</j:jelly>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册