Skip to content

Commit

Permalink
[FIXED JENKINS-13524] Validate project naming regex immediately
Browse files Browse the repository at this point in the history
  • Loading branch information
ssogabe committed Apr 21, 2012
1 parent f338e21 commit 5587d13
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 9 deletions.
5 changes: 5 additions & 0 deletions changelog.html
Expand Up @@ -64,6 +64,11 @@
<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=-->

Expand Down
26 changes: 23 additions & 3 deletions core/src/main/java/jenkins/model/ProjectNamingStrategy.java
@@ -1,7 +1,7 @@
/*
* 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
Expand All @@ -26,15 +26,21 @@
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.
Expand Down Expand Up @@ -105,7 +111,7 @@ private Object readResolve() {
public static final class DescriptorImpl extends ProjectNamingStrategyDescriptor {
@Override
public String getDisplayName() {
return Messages.ProjectNamingStrategy_DefaultProjectNamingStrategy_DisplayName();
return Messages.DefaultProjectNamingStrategy_DisplayName();
}

@Override
Expand Down Expand Up @@ -158,13 +164,27 @@ public static final class DescriptorImpl extends ProjectNamingStrategyDescriptor

@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();
}
}
}

Expand Down
7 changes: 5 additions & 2 deletions core/src/main/resources/jenkins/model/Messages.properties
Expand Up @@ -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.
7 changes: 5 additions & 2 deletions core/src/main/resources/jenkins/model/Messages_ja.properties
Expand Up @@ -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
Expand Up @@ -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")
Expand Down

0 comments on commit 5587d13

Please sign in to comment.