提交 5587d13f 编写于 作者: S Seiji Sogabe

[FIXED JENKINS-13524] Validate project naming regex immediately

上级 f338e21b
......@@ -64,6 +64,11 @@ Upcoming changes</a>
<li class=rfe>
Convert "Delete this build" buttons into links in the sidepanel.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-13387">issue 13387</a>)
<li class=rfe>
Validate project naming regex immediately.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-13524">issue 13524</a>)
</ul>
</div><!--=TRUNK-END=-->
......
/*
* The MIT License
*
* Copyright (c) 2012, Dominik Bartholdi
* Copyright (c) 2012, Dominik Bartholdi, Seiji Sogabe
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
......@@ -26,15 +26,21 @@ package jenkins.model;
import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionPoint;
import hudson.Util;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Failure;
import hudson.util.FormValidation;
import java.io.IOException;
import java.io.Serializable;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;
/**
* This ExtensionPoint allows to enforce the name of projects/jobs.
......@@ -105,7 +111,7 @@ public abstract class ProjectNamingStrategy implements Describable<ProjectNaming
public static final class DescriptorImpl extends ProjectNamingStrategyDescriptor {
@Override
public String getDisplayName() {
return Messages.ProjectNamingStrategy_DefaultProjectNamingStrategy_DisplayName();
return Messages.DefaultProjectNamingStrategy_DisplayName();
}
@Override
......@@ -158,13 +164,27 @@ public abstract class ProjectNamingStrategy implements Describable<ProjectNaming
@Override
public String getDisplayName() {
return Messages.ProjectNamingStrategy_PatternProjectNamingStrategy_DisplayName();
return Messages.PatternProjectNamingStrategy_DisplayName();
}
@Override
public String getHelpFile() {
return "/help/system-config/patternJobNamingStrategy.html";
}
public FormValidation doCheckNamePattern(@QueryParameter String value)
throws IOException, ServletException {
String pattern = Util.fixEmptyAndTrim(value);
if (pattern == null) {
return FormValidation.error(Messages.PatternProjectNamingStrategy_NamePatternRequired());
}
try {
Pattern.compile(pattern);
} catch (PatternSyntaxException e) {
return FormValidation.error(Messages.PatternProjectNamingStrategy_NamePatternInvalidSyntax());
}
return FormValidation.ok();
}
}
}
......
......@@ -59,5 +59,8 @@ CauseOfInterruption.ShortDescription=Aborted by {0}
CLI.shutdown.shortDescription=Immediately shuts down Jenkins server
CLI.safe-shutdown.shortDescription=Puts Jenkins into the quiet mode, wait for existing builds to be completed, and then shut down Jenkins.
ProjectNamingStrategy.DefaultProjectNamingStrategy.DisplayName=Default
ProjectNamingStrategy.PatternProjectNamingStrategy.DisplayName=Pattern
DefaultProjectNamingStrategy.DisplayName=Default
PatternProjectNamingStrategy.DisplayName=Pattern
PatternProjectNamingStrategy.NamePatternRequired=Name Pattern is required
PatternProjectNamingStrategy.NamePatternInvalidSyntax=regular expression's syntax is invalid.
\ No newline at end of file
......@@ -53,5 +53,8 @@ CLI.shutdown.shortDescription=Jenkins\u30b5\u30fc\u30d0\u30fc\u3092\u76f4\u3061\
CLI.safe-shutdown.shortDescription=\
Jenkins\u3092\u7d42\u4e86\u30e2\u30fc\u30c9\u306b\u5909\u66f4\u3057\u30d3\u30eb\u30c9\u304c\u5b8c\u4e86\u5f8c\u306b\u3001\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3057\u307e\u3059\u3002
ProjectNamingStrategy.DefaultProjectNamingStrategy.DisplayName=\u30c7\u30d5\u30a9\u30eb\u30c8
ProjectNamingStrategy.PatternProjectNamingStrategy.DisplayName=\u30d1\u30bf\u30fc\u30f3
DefaultProjectNamingStrategy.DisplayName=\u30c7\u30d5\u30a9\u30eb\u30c8
PatternProjectNamingStrategy.DisplayName=\u30d1\u30bf\u30fc\u30f3
PatternProjectNamingStrategy.NamePatternRequired=\u30d1\u30bf\u30fc\u30f3\u306f\u5fc5\u9808\u3067\u3059\u3002
PatternProjectNamingStrategy.NamePatternInvalidSyntax=\u6b63\u898f\u8868\u73fe\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002
\ No newline at end of file
......@@ -3,8 +3,8 @@ package jenkins.model.ProjectNamingStrategy.PatternProjectNamingStrategy;
def f=namespace(lib.FormTagLib)
f.entry(title:_("namePattern")) {
f.textbox(name:"namePattern",value:h.defaulted(instance?.namePattern, descriptor.DEFAULT_PATTERN),class:"fixed-width")
f.entry(title:_("namePattern"), field:"namePattern") {
f.textbox(value:h.defaulted(instance?.namePattern, descriptor.DEFAULT_PATTERN),class:"fixed-width")
}
f.entry(title:_("forceExistingJobs"), field:"forceExistingJobs") {
f.checkbox(name:"forceExistingJobs")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册