diff --git a/cli/pom.xml b/cli/pom.xml
index c9af59becfb0..bdd3b3faa50a 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -27,7 +27,6 @@
org.kohsukeaccess-modifier-annotation
- 1.7commons-codec
diff --git a/core/move-l10n.groovy b/core/move-l10n.groovy
index d774ec50d481..c52e66ae53ae 100644
--- a/core/move-l10n.groovy
+++ b/core/move-l10n.groovy
@@ -13,6 +13,7 @@ for (p in new File(resDir, oldview).parentFile.listFiles()) {
def n = p.name;
if (n == "${basename}.properties" || n.startsWith("${basename}_") && n.endsWith(".properties")) {
def lines = p.readLines('ISO-8859-1');
+ // TODO does not handle multiline values correctly
def matches = lines.findAll({it.startsWith("${key}=")});
if (!matches.isEmpty()) {
lines.removeAll(matches);
@@ -24,6 +25,7 @@ for (p in new File(resDir, oldview).parentFile.listFiles()) {
} else {
def nue = new File(resDir, newview + n.substring(basename.length()));
println("moving ${matches.size()} matches from ${n} to ${nue.name}");
+ // TODO if the original lacked a trailing newline, this will corrupt previously final key
nue.withWriterAppend('ISO-8859-1') {out ->
matches.each {line -> out.writeLine(line)}
}
diff --git a/core/pom.xml b/core/pom.xml
index 5f4ce6eef8aa..62e4a1663ac6 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -575,7 +575,6 @@ THE SOFTWARE.
org.kohsukeaccess-modifier-annotation
- 1.4
@@ -704,7 +703,6 @@ THE SOFTWARE.
org.kohsukeaccess-modifier-checker
-
diff --git a/core/src/main/java/hudson/cli/BuildCommand.java b/core/src/main/java/hudson/cli/BuildCommand.java
index 9fb72d74cc4d..d02ea9afcc5e 100644
--- a/core/src/main/java/hudson/cli/BuildCommand.java
+++ b/core/src/main/java/hudson/cli/BuildCommand.java
@@ -158,7 +158,7 @@ protected int run() throws Exception {
if (!job.isBuildable()) {
String msg = Messages.BuildCommand_CLICause_CannotBuildUnknownReasons(job.getFullDisplayName());
- if (job instanceof AbstractProject, ?> && ((AbstractProject, ?>)job).isDisabled()) {
+ if (job instanceof ParameterizedJobMixIn.ParameterizedJob && ((ParameterizedJobMixIn.ParameterizedJob) job).isDisabled()) {
msg = Messages.BuildCommand_CLICause_CannotBuildDisabled(job.getFullDisplayName());
} else if (job.isHoldOffBuildUntilSave()){
msg = Messages.BuildCommand_CLICause_CannotBuildConfigNotSaved(job.getFullDisplayName());
diff --git a/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java b/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java
index 2d17d1b29b15..5868d62b9ad6 100644
--- a/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java
+++ b/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java
@@ -58,6 +58,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Locale;
+import java.util.MissingResourceException;
import java.util.Stack;
import static java.util.logging.Level.SEVERE;
@@ -279,7 +280,7 @@ protected int run() throws Exception {
throw new UnsupportedOperationException();
}
}));
- } catch (ClassNotFoundException e) {
+ } catch (ClassNotFoundException | MissingResourceException e) {
LOGGER.log(SEVERE,"Failed to process @CLIMethod: "+m,e);
}
}
diff --git a/core/src/main/java/hudson/cli/handlers/ParameterizedJobOptionHandler.java b/core/src/main/java/hudson/cli/handlers/ParameterizedJobOptionHandler.java
new file mode 100644
index 000000000000..5776c221433e
--- /dev/null
+++ b/core/src/main/java/hudson/cli/handlers/ParameterizedJobOptionHandler.java
@@ -0,0 +1,58 @@
+/*
+ * The MIT License
+ *
+ * Copyright 2017 CloudBees, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package hudson.cli.handlers;
+
+import jenkins.model.ParameterizedJobMixIn;
+import org.kohsuke.MetaInfServices;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.DoNotUse;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.OptionDef;
+import org.kohsuke.args4j.spi.OptionHandler;
+import org.kohsuke.args4j.spi.Setter;
+
+/**
+ * Refer to {@link jenkins.model.ParameterizedJobMixIn.ParameterizedJob} by its name.
+ */
+@Restricted(DoNotUse.class)
+@MetaInfServices(OptionHandler.class)
+@SuppressWarnings("rawtypes")
+public class ParameterizedJobOptionHandler extends GenericItemOptionHandler {
+
+ public ParameterizedJobOptionHandler(CmdLineParser parser, OptionDef option, Setter setter) {
+ super(parser, option, setter);
+ }
+
+ @Override
+ protected Class type() {
+ return ParameterizedJobMixIn.ParameterizedJob.class;
+ }
+
+ @Override
+ public String getDefaultMetaVariable() {
+ return "JOB";
+ }
+
+}
diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java
index dde9b636122a..33468f3b68c3 100644
--- a/core/src/main/java/hudson/model/AbstractItem.java
+++ b/core/src/main/java/hudson/model/AbstractItem.java
@@ -854,7 +854,7 @@ public static AbstractItem resolveForCLI(
// TODO can this (and its pseudo-override in AbstractProject) share code with GenericItemOptionHandler, used for explicit CLICommand’s rather than CLIMethod’s?
AbstractItem item = Jenkins.getInstance().getItemByFullName(name, AbstractItem.class);
if (item==null) {
- AbstractProject project = AbstractProject.findNearest(name);
+ AbstractProject project = AbstractProject.findNearest(name); // TODO should be Items.findNearest
throw new CmdLineException(null, project == null ? Messages.AbstractItem_NoSuchJobExistsWithoutSuggestion(name)
: Messages.AbstractItem_NoSuchJobExists(name, project.getFullName()));
}
diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java
index 032715acd9fb..f4de0577bef3 100644
--- a/core/src/main/java/hudson/model/AbstractProject.java
+++ b/core/src/main/java/hudson/model/AbstractProject.java
@@ -38,7 +38,6 @@
import hudson.Functions;
import hudson.Launcher;
import hudson.Util;
-import hudson.cli.declarative.CLIMethod;
import hudson.cli.declarative.CLIResolver;
import hudson.model.Cause.LegacyCodeCause;
import hudson.model.Descriptor.FormException;
@@ -48,7 +47,6 @@
import hudson.model.Queue.Task;
import hudson.model.labels.LabelAtom;
import hudson.model.labels.LabelExpression;
-import hudson.model.listeners.ItemListener;
import hudson.model.listeners.SCMPollListener;
import hudson.model.queue.CauseOfBlockage;
import hudson.model.queue.QueueTaskFuture;
@@ -110,6 +108,7 @@
import jenkins.scm.SCMCheckoutStrategy;
import jenkins.scm.SCMCheckoutStrategyDescriptor;
import jenkins.scm.SCMDecisionHandler;
+import jenkins.triggers.SCMTriggerItem;
import jenkins.util.TimeDuration;
import net.sf.json.JSONObject;
import org.acegisecurity.Authentication;
@@ -640,7 +639,7 @@ public boolean hasCustomScmCheckoutRetryCount(){
@Override
public boolean isBuildable() {
- return !isDisabled() && !isHoldOffBuildUntilSave();
+ return ParameterizedJobMixIn.ParameterizedJob.super.isBuildable();
}
/**
@@ -669,10 +668,17 @@ public void setBlockBuildWhenUpstreamBuilding(boolean b) throws IOException {
save();
}
+ @Override
public boolean isDisabled() {
return disabled;
}
+ @Restricted(DoNotUse.class)
+ @Override
+ public void setDisabled(boolean disabled) {
+ this.disabled = disabled;
+ }
+
/**
* Validates the retry count Regex
*/
@@ -687,38 +693,22 @@ public FormValidation doCheckRetryCount(@QueryParameter String value)throws IOEx
}
/**
- * Marks the build as disabled.
- * The method will ignore the disable command if {@link #supportsMakeDisabled()}
- * returns false. The enable command will be executed in any case.
- * @param b true - disable, false - enable
- * @since 1.585 Do not disable projects if {@link #supportsMakeDisabled()} returns false
- */
- public void makeDisabled(boolean b) throws IOException {
- if(disabled==b) return; // noop
- if (b && !supportsMakeDisabled()) return; // do nothing if the disabling is unsupported
- this.disabled = b;
- if(b)
- Jenkins.getInstance().getQueue().cancel(this);
-
- save();
- ItemListener.fireOnUpdated(this);
- }
-
- /**
- * Specifies whether this project may be disabled by the user.
+ * {@inheritDoc}
* By default, it can be only if this is a {@link TopLevelItem};
* would be false for matrix configurations, etc.
- * @return true if the GUI should allow {@link #doDisable} and the like
* @since 1.475
*/
+ @Override
public boolean supportsMakeDisabled() {
return this instanceof TopLevelItem;
}
+ // Seems to be used only by tests; do not bother pulling up.
public void disable() throws IOException {
makeDisabled(true);
}
+ // Ditto.
public void enable() throws IOException {
makeDisabled(false);
}
@@ -866,6 +856,7 @@ public QueueTaskFuture scheduleBuild2(int quietPeriod, Action... actions) {
/**
* Schedules a polling of this project.
+ * @see SCMTriggerItem#schedulePolling
*/
public boolean schedulePolling() {
if(isDisabled()) return false;
@@ -1173,6 +1164,7 @@ public List getSubTasks() {
return r;
}
+ @Override // same as ParameterizedJob version except calls possibly overridden newBuild
public @CheckForNull R createExecutable() throws IOException {
if(isDisabled()) return null;
return newBuild();
@@ -1742,9 +1734,7 @@ public void doBuildWithParameters(StaplerRequest req, StaplerResponse rsp) throw
doBuildWithParameters(req, rsp, TimeDuration.fromString(req.getParameter("delay")));
}
- /**
- * Schedules a new SCM polling command.
- */
+ @Override // in case schedulePolling was overridden
public void doPolling( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException {
BuildAuthorizationToken.checkPermission((Job) this, authToken, req, rsp);
schedulePolling();
@@ -1888,23 +1878,6 @@ public HttpResponse doDoWipeOutWorkspace() throws IOException, ServletException,
}
}
- @CLIMethod(name="disable-job")
- @RequirePOST
- public HttpResponse doDisable() throws IOException, ServletException {
- checkPermission(CONFIGURE);
- makeDisabled(true);
- return new HttpRedirect(".");
- }
-
- @CLIMethod(name="enable-job")
- @RequirePOST
- public HttpResponse doEnable() throws IOException, ServletException {
- checkPermission(CONFIGURE);
- makeDisabled(false);
- return new HttpRedirect(".");
- }
-
-
/**
* {@link AbstractProject} subtypes should implement this base class as a descriptor.
*
diff --git a/core/src/main/java/hudson/model/ListView.java b/core/src/main/java/hudson/model/ListView.java
index be1483df66ba..1fc889c519e3 100644
--- a/core/src/main/java/hudson/model/ListView.java
+++ b/core/src/main/java/hudson/model/ListView.java
@@ -48,6 +48,7 @@
import javax.annotation.concurrent.GuardedBy;
import javax.servlet.ServletException;
import jenkins.model.Jenkins;
+import jenkins.model.ParameterizedJobMixIn;
import net.sf.json.JSONObject;
import org.jenkinsci.Symbol;
@@ -197,8 +198,8 @@ public List getItems() {
for (TopLevelItem item : candidates) {
if (!names.contains(item.getRelativeNameFrom(getOwnerItemGroup()))) continue;
// Add if no status filter or filter matches enabled/disabled status:
- if(statusFilter == null || !(item instanceof AbstractProject)
- || ((AbstractProject)item).isDisabled() ^ statusFilter)
+ if(statusFilter == null || !(item instanceof ParameterizedJobMixIn.ParameterizedJob) // TODO or better to call the more generic Job.isBuildable?
+ || ((ParameterizedJobMixIn.ParameterizedJob)item).isDisabled() ^ statusFilter)
items.add(item);
}
diff --git a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
index 75f195367a23..b0b9677690b9 100644
--- a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
+++ b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
@@ -25,11 +25,15 @@
package jenkins.model;
import hudson.Util;
+import hudson.cli.declarative.CLIMethod;
+import hudson.cli.declarative.CLIResolver;
import hudson.model.Action;
import hudson.model.BuildableItem;
import hudson.model.Cause;
import hudson.model.CauseAction;
import hudson.model.Item;
+import static hudson.model.Item.CONFIGURE;
+import hudson.model.Items;
import hudson.model.Job;
import hudson.model.ParameterDefinition;
import hudson.model.ParameterValue;
@@ -37,6 +41,7 @@
import hudson.model.ParametersDefinitionProperty;
import hudson.model.Queue;
import hudson.model.Run;
+import hudson.model.listeners.ItemListener;
import hudson.model.queue.QueueTaskFuture;
import hudson.search.SearchIndexBuilder;
import hudson.triggers.Trigger;
@@ -53,10 +58,17 @@
import javax.servlet.ServletException;
import static javax.servlet.http.HttpServletResponse.SC_CREATED;
import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
+import jenkins.model.lazy.LazyBuildMixIn;
import jenkins.triggers.SCMTriggerItem;
import jenkins.util.TimeDuration;
import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.DoNotUse;
import org.kohsuke.accmod.restrictions.NoExternalUse;
+import org.kohsuke.accmod.restrictions.ProtectedExternally;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.stapler.HttpRedirect;
+import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.HttpResponses;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
@@ -66,7 +78,14 @@
/**
* Allows a {@link Job} to make use of {@link ParametersDefinitionProperty} and be scheduled in various ways.
* Stateless so there is no need to keep an instance of it in a field.
- * Besides implementing {@link ParameterizedJob}, you should override {@link Job#makeSearchIndex} to call {@link #extendSearchIndex}.
+ * Besides implementing {@link ParameterizedJob}, you should
+ *
+ *
override {@link Job#makeSearchIndex} to call {@link #extendSearchIndex}
+ *
override {@link Job#performDelete} to call {@link ParameterizedJob#makeDisabled}
+ *
override {@link Job#getIconColor} to call {@link ParameterizedJob#isDisabled}
+ *
use {@code }
+ *
use {@code }
+ *
* @since 1.556
*/
@SuppressWarnings("unchecked") // AbstractItem.getParent does not correctly override; scheduleBuild2 inherently untypable
@@ -300,6 +319,23 @@ public final String getBuildNowText() {
*/
public interface ParameterizedJob & ParameterizedJobMixIn.ParameterizedJob & Queue.Task, RunT extends Run & Queue.Executable> extends BuildableItem {
+ /**
+ * Used for CLI binding.
+ */
+ @Restricted(DoNotUse.class)
+ @SuppressWarnings("rawtypes")
+ @CLIResolver
+ static ParameterizedJob resolveForCLI(@Argument(required=true, metaVar="NAME", usage="Job name") String name) throws CmdLineException {
+ ParameterizedJob item = Jenkins.getInstance().getItemByFullName(name, ParameterizedJob.class);
+ if (item == null) {
+ ParameterizedJob project = Items.findNearest(ParameterizedJob.class, name, Jenkins.getInstance());
+ throw new CmdLineException(null, project == null ?
+ hudson.model.Messages.AbstractItem_NoSuchJobExistsWithoutSuggestion(name) :
+ hudson.model.Messages.AbstractItem_NoSuchJobExists(name, project.getFullName()));
+ }
+ return item;
+ }
+
/**
* Creates a helper object.
* (Would have been done entirely as an interface with default methods had this been designed for Java 8.)
@@ -407,6 +443,20 @@ default void doCancelQueue(StaplerRequest req, StaplerResponse rsp ) throws IOEx
getParameterizedJobMixIn().doCancelQueue(req, rsp);
}
+ /**
+ * Schedules a new SCM polling command.
+ */
+ @SuppressWarnings("deprecation")
+ default void doPolling(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
+ if (!(this instanceof SCMTriggerItem)) {
+ rsp.sendError(404);
+ return;
+ }
+ hudson.model.BuildAuthorizationToken.checkPermission((Job) this, getAuthToken(), req, rsp);
+ ((SCMTriggerItem) this).schedulePolling();
+ rsp.sendRedirect(".");
+ }
+
/**
* For use from {@link BuildButtonColumn}.
* @see ParameterizedJobMixIn#isParameterized
@@ -415,6 +465,75 @@ default boolean isParameterized() {
return getParameterizedJobMixIn().isParameterized();
}
+ default boolean isDisabled() {
+ return false;
+ }
+
+ @Restricted(ProtectedExternally.class)
+ default void setDisabled(boolean disabled) {
+ throw new UnsupportedOperationException("must be implemented if supportsMakeDisabled is overridden");
+ }
+
+ /**
+ * Specifies whether this project may be disabled by the user.
+ * @return true if the GUI should allow {@link #doDisable} and the like
+ */
+ default boolean supportsMakeDisabled() {
+ return false;
+ }
+
+ /**
+ * Marks the build as disabled.
+ * The method will ignore the disable command if {@link #supportsMakeDisabled()}
+ * returns false. The enable command will be executed in any case.
+ * @param b true - disable, false - enable
+ */
+ default void makeDisabled(boolean b) throws IOException {
+ if (isDisabled() == b) {
+ return; // noop
+ }
+ if (b && !supportsMakeDisabled()) {
+ return; // do nothing if the disabling is unsupported
+ }
+ setDisabled(b);
+ if (b) {
+ Jenkins.getInstance().getQueue().cancel(this);
+ }
+ save();
+ ItemListener.fireOnUpdated(this);
+ }
+
+ @CLIMethod(name="disable-job")
+ @RequirePOST
+ default HttpResponse doDisable() throws IOException, ServletException {
+ checkPermission(CONFIGURE);
+ makeDisabled(true);
+ return new HttpRedirect(".");
+ }
+
+ @CLIMethod(name="enable-job")
+ @RequirePOST
+ default HttpResponse doEnable() throws IOException, ServletException {
+ checkPermission(CONFIGURE);
+ makeDisabled(false);
+ return new HttpRedirect(".");
+ }
+
+ @Override
+ default RunT createExecutable() throws IOException {
+ if (isDisabled()) {
+ return null;
+ }
+ if (this instanceof LazyBuildMixIn.LazyLoadingJob) {
+ return (RunT) ((LazyBuildMixIn.LazyLoadingJob) this).getLazyBuildMixIn().newBuild();
+ }
+ return null;
+ }
+
+ default boolean isBuildable() {
+ return !isDisabled() && !((Job) this).isHoldOffBuildUntilSave();
+ }
+
}
}
diff --git a/core/src/main/java/jenkins/model/lazy/LazyBuildMixIn.java b/core/src/main/java/jenkins/model/lazy/LazyBuildMixIn.java
index 547735f52422..b01c4a24315b 100644
--- a/core/src/main/java/jenkins/model/lazy/LazyBuildMixIn.java
+++ b/core/src/main/java/jenkins/model/lazy/LazyBuildMixIn.java
@@ -272,7 +272,7 @@ public final HistoryWidget createHistoryWidget() {
public interface LazyLoadingJob & Queue.Task & LazyBuildMixIn.LazyLoadingJob, RunT extends Run & LazyLoadingRun> {
LazyBuildMixIn getLazyBuildMixIn();
// not offering default implementation for _getRuns(), removeRun(R), getBuild(String), getBuildByNumber(int), getFirstBuild(), getLastBuild(), getNearestBuild(int), getNearestOldBuild(int), or createHistoryWidget() since they are defined in Job
- // nor for createExecutable() since that typically calls isDisabled() first
+ // (could allow implementations to call LazyLoadingJob.super.theMethod())
}
/**
@@ -281,7 +281,9 @@ public interface LazyLoadingJob & Queue.Task & LazyB
public interface LazyLoadingRun & Queue.Task & LazyBuildMixIn.LazyLoadingJob, RunT extends Run & LazyLoadingRun> {
RunMixIn getRunMixIn();
// not offering default implementations for createReference() or dropLinks() since they are protected
+ // (though could use @Restricted(ProtectedExternally.class))
// nor for getPreviousBuild() or getNextBuild() since they are defined in Run
+ // (though could allow implementations to call LazyLoadingRun.super.theMethod())
}
/**
diff --git a/core/src/main/java/jenkins/triggers/SCMTriggerItem.java b/core/src/main/java/jenkins/triggers/SCMTriggerItem.java
index a06e6fb7f031..d9b04d38cc6c 100644
--- a/core/src/main/java/jenkins/triggers/SCMTriggerItem.java
+++ b/core/src/main/java/jenkins/triggers/SCMTriggerItem.java
@@ -81,6 +81,21 @@ public interface SCMTriggerItem {
*/
@Nonnull Collection extends SCM> getSCMs();
+ /**
+ * Schedules a polling of this project.
+ */
+ default boolean schedulePolling() {
+ if (this instanceof ParameterizedJobMixIn.ParameterizedJob && ((ParameterizedJobMixIn.ParameterizedJob) this).isDisabled()) {
+ return false;
+ }
+ SCMTrigger scmt = getSCMTrigger();
+ if (scmt == null) {
+ return false;
+ }
+ scmt.run();
+ return true;
+ }
+
/**
* Utilities.
*/
diff --git a/core/src/main/resources/hudson/model/AbstractProject/main.jelly b/core/src/main/resources/hudson/model/AbstractProject/main.jelly
index b62984982f17..7d6d6fb4f802 100644
--- a/core/src/main/resources/hudson/model/AbstractProject/main.jelly
+++ b/core/src/main/resources/hudson/model/AbstractProject/main.jelly
@@ -26,9 +26,7 @@ THE SOFTWARE.
-
-
-
+
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled.jelly b/core/src/main/resources/hudson/model/AbstractProject/makeDisabled.jelly
index 63d8388e42ac..3d0eac266ac2 100644
--- a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled.jelly
+++ b/core/src/main/resources/hudson/model/AbstractProject/makeDisabled.jelly
@@ -1,48 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties
index 05e8e94ebc35..92812110fd48 100644
--- a/core/src/main/resources/hudson/model/Messages.properties
+++ b/core/src/main/resources/hudson/model/Messages.properties
@@ -96,8 +96,6 @@ BallColor.Unstable=Unstable
Build.post_build_steps_failed=Post-build steps failed
CLI.clear-queue.shortDescription=Clears the build queue.
-CLI.disable-job.shortDescription=Disables a job.
-CLI.enable-job.shortDescription=Enables a job.
CLI.online-node.shortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
Computer.Caption=Agent {0}
diff --git a/core/src/main/resources/hudson/model/Messages_bg.properties b/core/src/main/resources/hudson/model/Messages_bg.properties
index 89710bfcfc57..dc4ad6d81c8d 100644
--- a/core/src/main/resources/hudson/model/Messages_bg.properties
+++ b/core/src/main/resources/hudson/model/Messages_bg.properties
@@ -133,10 +133,6 @@ CLI.reload-job.shortDescription=\
\u041f\u0440\u0435\u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0442\u0430 \u043e\u0442 \u0434\u0438\u0441\u043a\u0430.
CLI.clear-queue.shortDescription=\
\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0430\u0448\u043a\u0430\u0442\u0430 \u0441\u044a\u0441 \u0437\u0430\u0434\u0430\u0447\u0438.
-CLI.disable-job.shortDescription=\
- \u0418\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
-CLI.enable-job.shortDescription=\
- \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
CLI.delete-node.shortDescription=\
\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430.
CLI.online-node.shortDescription=\
diff --git a/core/src/main/resources/hudson/model/Messages_da.properties b/core/src/main/resources/hudson/model/Messages_da.properties
index 270283577f87..32e1ecbe2c4e 100644
--- a/core/src/main/resources/hudson/model/Messages_da.properties
+++ b/core/src/main/resources/hudson/model/Messages_da.properties
@@ -86,7 +86,6 @@ ComputerSet.SlaveAlreadyExists=En slave ved navn ''{0}'' eksisterer allerede
Executor.NotAvailable=N/A
Item.Permissions.Title=Job
AbstractProject.NoWorkspace=Intet arbejdsomr\u00e5de tilg\u00e6ngeligt, kan ikke checke for opdateringer.
-CLI.disable-job.shortDescription=Sl\u00e5r et job fra
UpdateCenter.PluginCategory.trigger=Byggestartere
Slave.Remote.Director.Mandatory=Fjerndirektorie er obligatorisk
BallColor.Disabled=Sl\u00e5et fra
@@ -202,7 +201,6 @@ UpdateCenter.PluginCategory.maven=Maven
BallColor.Success=Succes
UpdateCenter.PluginCategory.upload=Artifaktsendere
Permalink.LastUnstableBuild=Seneste ustabile byg
-CLI.enable-job.shortDescription=Sl\u00e5r et job til
Run.Summary.Unknown=?
AbstractProject.BuildPermission.Description=\
Denne rettighed giver mulighed for at starte et nyt byg.
diff --git a/core/src/main/resources/hudson/model/Messages_de.properties b/core/src/main/resources/hudson/model/Messages_de.properties
index 70d26031ad11..721322c837d3 100644
--- a/core/src/main/resources/hudson/model/Messages_de.properties
+++ b/core/src/main/resources/hudson/model/Messages_de.properties
@@ -90,8 +90,6 @@ BuildAuthorizationToken.InvalidTokenProvided=Ung\u00FCltiges Token angegeben.
CLI.restart.shortDescription=Jenkins neu starten.
CLI.keep-build.shortDescription=Build f\u00FCr immer aufbewahren.
CLI.clear-queue.shortDescription=Build-Warteschlange leeren.
-CLI.disable-job.shortDescription=Projekt deaktivieren.
-CLI.enable-job.shortDescription=Projekt aktivieren.
CLI.safe-restart.shortDescription=Startet Jenkins neu.
Queue.init=Build-Warteschlange neu initialisieren
diff --git a/core/src/main/resources/hudson/model/Messages_es.properties b/core/src/main/resources/hudson/model/Messages_es.properties
index a8090bf4c30c..8d581e01e4f3 100644
--- a/core/src/main/resources/hudson/model/Messages_es.properties
+++ b/core/src/main/resources/hudson/model/Messages_es.properties
@@ -56,8 +56,6 @@ BallColor.Pending=Pendiente
BallColor.Success=Correcto
BallColor.Unstable=Inestable
-CLI.disable-job.shortDescription=Desactivar una tarea
-CLI.enable-job.shortDescription=Activar una tarea
CLI.online-node.shortDescription=Continuar usando un nodo y candelar el comando "offline-node" mas reciente.
Computer.Caption=Remoto {0}
diff --git a/core/src/main/resources/hudson/model/Messages_it.properties b/core/src/main/resources/hudson/model/Messages_it.properties
index 9d9050a8d16d..0d2478da2273 100644
--- a/core/src/main/resources/hudson/model/Messages_it.properties
+++ b/core/src/main/resources/hudson/model/Messages_it.properties
@@ -45,8 +45,6 @@ BallColor.Pending=In attesa
BallColor.Success=Successo
BallColor.Unstable=Instabile
-CLI.disable-job.shortDescription=Disabilita un job
-CLI.enable-job.shortDescription=Abilita un job
Executor.NotAvailable=N/A
diff --git a/core/src/main/resources/hudson/model/Messages_ja.properties b/core/src/main/resources/hudson/model/Messages_ja.properties
index 98e610f5c9c2..5f98501187eb 100644
--- a/core/src/main/resources/hudson/model/Messages_ja.properties
+++ b/core/src/main/resources/hudson/model/Messages_ja.properties
@@ -292,8 +292,6 @@ CLI.safe-restart.shortDescription=Jenkins\u3092\u5b89\u5168\u306b\u518d\u8d77\u5
CLI.keep-build.shortDescription=\u30d3\u30eb\u30c9\u3092\u4fdd\u5b58\u3059\u308b\u3088\u3046\u306b\u30de\u30fc\u30af\u3057\u307e\u3059\u3002
CLI.reload-configuration.shortDescription=\u30e1\u30e2\u30ea\u306b\u3042\u308b\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u3092\u7834\u68c4\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u518d\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u4fee\u6b63\u3057\u305f\u5834\u5408\u306b\u5f79\u306b\u7acb\u3061\u307e\u3059\u3002
CLI.clear-queue.shortDescription=\u30d3\u30eb\u30c9\u30ad\u30e5\u30fc\u3092\u30af\u30ea\u30a2\u3057\u307e\u3059\u3002
-CLI.disable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u7121\u52b9\u5316\u3057\u307e\u3059\u3002
-CLI.enable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002
CLI.online-node.shortDescription=\u76f4\u524d\u306b\u5b9f\u884c\u3057\u305f"online-node"\u30b3\u30de\u30f3\u30c9\u3092\u53d6\u308a\u6d88\u3057\u3001\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3059\u308b\u30ce\u30fc\u30c9\u306e\u4f7f\u7528\u3092\u518d\u958b\u3057\u307e\u3059\u3002
BuildAuthorizationToken.InvalidTokenProvided=\u8a8d\u8a3c\u30c8\u30fc\u30af\u30f3\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002
diff --git a/core/src/main/resources/hudson/model/Messages_lt.properties b/core/src/main/resources/hudson/model/Messages_lt.properties
index 506b794386ea..48956866e576 100644
--- a/core/src/main/resources/hudson/model/Messages_lt.properties
+++ b/core/src/main/resources/hudson/model/Messages_lt.properties
@@ -67,8 +67,6 @@ BallColor.Unstable=Nestabilus
Build.post_build_steps_failed=\u017dingsniai po k\u016brimo nepavyko
CLI.clear-queue.shortDescription=I\u0161valo vykdymo eil\u0119.
-CLI.disable-job.shortDescription=I\u0161jungia darb\u0105.
-CLI.enable-job.shortDescription=\u012ejungia darb\u0105.
CLI.disconnect-node.shortDescription=Atsijungia nuo mazgo.
Computer.Caption=Agentas {0}
diff --git a/core/src/main/resources/hudson/model/Messages_pt_BR.properties b/core/src/main/resources/hudson/model/Messages_pt_BR.properties
index f3519390d1ca..4dbe5bf0862e 100644
--- a/core/src/main/resources/hudson/model/Messages_pt_BR.properties
+++ b/core/src/main/resources/hudson/model/Messages_pt_BR.properties
@@ -141,7 +141,7 @@ ComputerSet.DisplayName=N\u00f3s
# This permission allows users to manually delete specific builds from the build history.
Run.DeletePermission.Description=Apagar builds espec\u00edficos do hist\u00f3rio de builds
# broken for a long time
-Run.Summary.BrokenForALongTime=Quebrado há muito tempo
+Run.Summary.BrokenForALongTime=Quebrado h\u00e1 muito tempo
# Safely restart Jenkins
CLI.safe-restart.shortDescription=Seguro reiniciar o Jenkins
# Include a global view
@@ -178,8 +178,6 @@ Indicado quando voc\u00ea modificou os arquivos diretamente no disco.
ComputerSet.SlaveAlreadyExists=Slave ''{0}'' j\u00e1 existe
# No such slave: {0}
ComputerSet.NoSuchSlave=Nenhum slave: {0}
-# Disables a job
-CLI.disable-job.shortDescription=Desabilitar uma job
# Build Triggers
UpdateCenter.PluginCategory.trigger=Triggers de builds
# Remote directory is mandatory
@@ -324,8 +322,6 @@ UpdateCenter.PluginCategory.maven=Maven
UpdateCenter.PluginCategory.upload=Carregadores de artefatos
# Last unstable build
Permalink.LastUnstableBuild=\u00daltimo build inst\u00e1vel
-# Enables a job
-CLI.enable-job.shortDescription=Habilita um job
# ?
Run.Summary.Unknown=?
# Parameters
@@ -452,4 +448,4 @@ Item.CONFIGURE.description=Mudar a configura\u00e7\u00e3o de um job.
Item.DELETE.description=Excuir um job.
HealthReport.EmptyString=
MultiStageTimeSeries.EMPTY_STRING=
-ParametersDefinitionProperty.DisplayName=Este build \u00E9 parametrizado
+ParametersDefinitionProperty.DisplayName=Este build \u00e9 parametrizado
diff --git a/core/src/main/resources/hudson/model/Messages_sr.properties b/core/src/main/resources/hudson/model/Messages_sr.properties
index b12b0d1ee52d..d45e895c842d 100644
--- a/core/src/main/resources/hudson/model/Messages_sr.properties
+++ b/core/src/main/resources/hudson/model/Messages_sr.properties
@@ -72,8 +72,6 @@ BallColor.Success=\u0423\u0441\u043F\u0435\u0448\u043D\u043E
BallColor.Unstable=\u041D\u0435\u0441\u0442\u0430\u0431\u0438\u043B\u043D\u043E
Build.post_build_steps_failed=\u041A\u043E\u0440\u0430\u0446\u0438 \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435 \u043D\u0438\u0441\u0443 \u0443\u0441\u043F\u0435\u043B\u0435
CLI.clear-queue.shortDescription=\u0418\u0437\u045B\u0438\u0441\u0442\u0438 \u0440\u0435\u0434 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0430
-CLI.disable-job.shortDescription=\u041F\u043E\u043D\u0438\u0448\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A
-CLI.enable-job.shortDescription=\u0423\u043A\u0459\u0443\u0447\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043A
CLI.online-node.shortDescription=\u041D\u0430\u0441\u0442\u0430\u0432\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0435\u045B\u0438 \u043C\u0430\u0448\u0438\u043D\u0435 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443 \u0434\u0430 \u0431\u0438 \u0441\u0442\u0435 \u043F\u043E\u043D\u0438\u0448\u0442\u0438\u043B\u0438 \u043F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u0443\
"offline-node".
Computer.Permissions.Title=\u0410\u0433\u0435\u043D\u0442
@@ -288,4 +286,4 @@ CLI.delete-node.shortDescription=\u0423\u043A\u043B\u043E\u043D\u0438 \u0437\u04
CLI.disconnect-node.shortDescription=\u041F\u0440\u0435\u043A\u0438\u043D\u0438 \u0432\u0435\u0437\u0443 \u0441\u0430 \u043C\u0430\u0448\u0438\u043D\u043E\u043C
CLI.connect-node.shortDescription=\u041F\u043E\u0432\u0435\u0436\u0438 \u0441\u0430 \u043C\u0430\u0448\u0438\u043D\u043E\u043C
CLI.offline-node.shortDescription=
-Hudson.NotADirectory={0} \u043D\u0438\u0458\u0435 \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0458\u0443\u043C
\ No newline at end of file
+Hudson.NotADirectory={0} \u043D\u0438\u0458\u0435 \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0458\u0443\u043C
diff --git a/core/src/main/resources/hudson/model/Messages_zh_TW.properties b/core/src/main/resources/hudson/model/Messages_zh_TW.properties
index 9fb229cc07ad..c2b09dfa8f2c 100644
--- a/core/src/main/resources/hudson/model/Messages_zh_TW.properties
+++ b/core/src/main/resources/hudson/model/Messages_zh_TW.properties
@@ -76,8 +76,6 @@ BallColor.Pending=\u64f1\u7f6e
BallColor.Success=\u6210\u529f
BallColor.Unstable=\u4e0d\u7a69\u5b9a
-CLI.disable-job.shortDescription=\u505c\u7528\u4f5c\u696d\u3002
-CLI.enable-job.shortDescription=\u555f\u7528\u4f5c\u696d\u3002
CLI.disconnect-node.shortDescription=\u4e2d\u65b7\u8207\u6307\u5b9a\u7bc0\u9ede\u7684\u9023\u7dda\u3002
CLI.online-node.shortDescription=\u7e7c\u7e8c\u4f7f\u7528\u6307\u5b9a\u7bc0\u9ede\u4f86\u5efa\u7f6e\uff0c\u53d6\u6d88\u5148\u524d\u7684 "offline-node" \u6307\u4ee4\u3002
diff --git a/core/src/main/resources/jenkins/model/Messages.properties b/core/src/main/resources/jenkins/model/Messages.properties
index 1b5a2455d167..1ad84bd9a918 100644
--- a/core/src/main/resources/jenkins/model/Messages.properties
+++ b/core/src/main/resources/jenkins/model/Messages.properties
@@ -69,3 +69,5 @@ BuildDiscarderProperty.displayName=Discard old builds
DownloadSettings.Warning.DisplayName=Browser-based metadata download
EnforceSlaveAgentPortAdministrativeMonitor.displayName=Enforce JNLP Slave Agent Port
+CLI.disable-job.shortDescription=Disables a job.
+CLI.enable-job.shortDescription=Enables a job.
diff --git a/core/src/main/resources/jenkins/model/Messages_bg.properties b/core/src/main/resources/jenkins/model/Messages_bg.properties
index db1dee5ce7d1..3079bce9c2fc 100644
--- a/core/src/main/resources/jenkins/model/Messages_bg.properties
+++ b/core/src/main/resources/jenkins/model/Messages_bg.properties
@@ -107,3 +107,7 @@ BuildDiscarderProperty.displayName=\
# No Parameters are specified for this parameterized build
Hudson.NoParamsSpecified=\
\u041b\u0438\u043f\u0441\u0432\u0430\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437\u0430 \u0442\u043e\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
+CLI.disable-job.shortDescription=\
+ \u0418\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
+CLI.enable-job.shortDescription=\
+ \u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.
diff --git a/core/src/main/resources/jenkins/model/Messages_da.properties b/core/src/main/resources/jenkins/model/Messages_da.properties
index 99dd56ee8631..ff3e3356ac95 100644
--- a/core/src/main/resources/jenkins/model/Messages_da.properties
+++ b/core/src/main/resources/jenkins/model/Messages_da.properties
@@ -52,3 +52,5 @@ ParameterizedJobMixIn.build_now=Byg nu
BlockedBecauseOfBuildInProgress.shortDescription=Byg #{0} er allerede i gang {1}
BlockedBecauseOfBuildInProgress.ETA=(ETA:{0})
BuildDiscarderProperty.displayName=Fjern Gamle Byg
+CLI.disable-job.shortDescription=Sl\u00e5r et job fra
+CLI.enable-job.shortDescription=Sl\u00e5r et job til
diff --git a/core/src/main/resources/jenkins/model/Messages_de.properties b/core/src/main/resources/jenkins/model/Messages_de.properties
index 353b4b8727e7..78c5fa1fc8ed 100644
--- a/core/src/main/resources/jenkins/model/Messages_de.properties
+++ b/core/src/main/resources/jenkins/model/Messages_de.properties
@@ -65,3 +65,5 @@ CauseOfInterruption.ShortDescription=Abgebrochen von {0}
CLI.safe-shutdown.shortDescription=Aktiviert die Ruheperiode, wartet auf Beendigung laufender Builds, und f\u00E4hrt Jenkins dann herunter.
IdStrategy.CaseInsensitive.DisplayName=Gro\u00DF- und Kleinschreibung missachtend
IdStrategy.CaseSensitiveEmailAddress.DisplayName=Gro\u00DF- und Kleinschreibung beachtend (E-Mailadresse)
+CLI.disable-job.shortDescription=Projekt deaktivieren.
+CLI.enable-job.shortDescription=Projekt aktivieren.
diff --git a/core/src/main/resources/jenkins/model/Messages_es.properties b/core/src/main/resources/jenkins/model/Messages_es.properties
index b4aae441fff4..9df1bffcb58f 100644
--- a/core/src/main/resources/jenkins/model/Messages_es.properties
+++ b/core/src/main/resources/jenkins/model/Messages_es.properties
@@ -62,3 +62,5 @@ ParameterizedJobMixIn.build_now=Construir ahora
BlockedBecauseOfBuildInProgress.shortDescription=La ejecuci\u00f3n #{0} ya est\u00e1 en progreso {1}
BlockedBecauseOfBuildInProgress.ETA= (ETA:{0})
BuildDiscarderProperty.displayName=Desechar ejecuciones antiguas
+CLI.disable-job.shortDescription=Desactivar una tarea
+CLI.enable-job.shortDescription=Activar una tarea
diff --git a/core/src/main/resources/jenkins/model/Messages_it.properties b/core/src/main/resources/jenkins/model/Messages_it.properties
index 2267c9beb9d2..66dce258ff0d 100644
--- a/core/src/main/resources/jenkins/model/Messages_it.properties
+++ b/core/src/main/resources/jenkins/model/Messages_it.properties
@@ -2,3 +2,5 @@ ParameterizedJobMixIn.build_now=Effettua build
BlockedBecauseOfBuildInProgress.shortDescription=Build #{0} is already in progress{1}
BlockedBecauseOfBuildInProgress.ETA=\ (ETA:{0})
BuildDiscarderProperty.displayName=Elimina Build Precedenti
+CLI.disable-job.shortDescription=Disabilita un job
+CLI.enable-job.shortDescription=Abilita un job
diff --git a/core/src/main/resources/jenkins/model/Messages_ja.properties b/core/src/main/resources/jenkins/model/Messages_ja.properties
index 436746143625..46da45fc183f 100644
--- a/core/src/main/resources/jenkins/model/Messages_ja.properties
+++ b/core/src/main/resources/jenkins/model/Messages_ja.properties
@@ -63,3 +63,5 @@ ParameterizedJobMixIn.build_now=\u30d3\u30eb\u30c9\u5b9f\u884c
BlockedBecauseOfBuildInProgress.shortDescription=\u30d3\u30eb\u30c9 #{0} \u306f\u65e2\u306b\u5b9f\u884c\u4e2d\u3067\u3059\u3002{1}
BlockedBecauseOfBuildInProgress.ETA=\ (\u4e88\u5b9a\u6642\u9593:{0})
BuildDiscarderProperty.displayName=\u53e4\u3044\u30d3\u30eb\u30c9\u306e\u7834\u68c4
+CLI.disable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u7121\u52b9\u5316\u3057\u307e\u3059\u3002
+CLI.enable-job.shortDescription=\u30b8\u30e7\u30d6\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002
diff --git a/core/src/main/resources/jenkins/model/Messages_lt.properties b/core/src/main/resources/jenkins/model/Messages_lt.properties
index adb1ad95bf63..7385705308f8 100644
--- a/core/src/main/resources/jenkins/model/Messages_lt.properties
+++ b/core/src/main/resources/jenkins/model/Messages_lt.properties
@@ -44,3 +44,5 @@ PatternProjectNamingStrategy.DisplayName=\u0160ablonas
PatternProjectNamingStrategy.NamePatternInvalidSyntax=netinkama reguliariosios i\u0161rai\u0161kos sintaks\u0117.
PatternProjectNamingStrategy.NamePatternRequired=Reikia pavadinim\u0173 \u0161ablono
+CLI.disable-job.shortDescription=I\u0161jungia darb\u0105.
+CLI.enable-job.shortDescription=\u012ejungia darb\u0105.
diff --git a/core/src/main/resources/jenkins/model/Messages_pt_BR.properties b/core/src/main/resources/jenkins/model/Messages_pt_BR.properties
index 5bfa928c5f82..9b2eea491523 100644
--- a/core/src/main/resources/jenkins/model/Messages_pt_BR.properties
+++ b/core/src/main/resources/jenkins/model/Messages_pt_BR.properties
@@ -70,3 +70,5 @@ ParameterizedJobMixIn.build_now=Construir agora
BlockedBecauseOfBuildInProgress.shortDescription=A builds #{0} j\u00e1 est\u00e1 em progresso{1}
BlockedBecauseOfBuildInProgress.ETA=\ (ETA:{0})
BuildDiscarderProperty.displayName=Descartar builds antigos
+CLI.disable-job.shortDescription=Desabilitar uma job
+CLI.enable-job.shortDescription=Habilita um job
diff --git a/core/src/main/resources/jenkins/model/Messages_sr.properties b/core/src/main/resources/jenkins/model/Messages_sr.properties
index ce97ae2691b5..be52dc9aca37 100644
--- a/core/src/main/resources/jenkins/model/Messages_sr.properties
+++ b/core/src/main/resources/jenkins/model/Messages_sr.properties
@@ -1,42 +1,44 @@
# This file is under the MIT License by authors
-Hudson.BadPortNumber=\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043D \u0431\u0440\u043E\u0458 \u043F\u043E\u0440\u0442\u0430: {0}
-Hudson.Computer.Caption=\u041C\u0430\u0441\u0442\u0435\u0440
-Hudson.ControlCodeNotAllowed=\u041A\u043E\u043D\u0442\u0440\u043E\u043B\u0438 \u043A\u043E\u0434 \u043D\u0438\u0458\u0435 \u0434\u043E\u0437\u0432\u043E\u0459\u0435\u043D: {0}
-Hudson.Computer.DisplayName=\u043C\u0430\u0441\u0442\u0435\u0440
+Hudson.BadPortNumber=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043d \u0431\u0440\u043e\u0458 \u043f\u043e\u0440\u0442\u0430: {0}
+Hudson.Computer.Caption=\u041c\u0430\u0441\u0442\u0435\u0440
+Hudson.ControlCodeNotAllowed=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438 \u043a\u043e\u0434 \u043d\u0438\u0458\u0435 \u0434\u043e\u0437\u0432\u043e\u0459\u0435\u043d: {0}
+Hudson.Computer.DisplayName=\u043c\u0430\u0441\u0442\u0435\u0440
Hudson.DisplayName=Jenkins
-Hudson.NoJavaInPath=java \u043A\u043E\u043C\u0430\u043D\u0434\u0430 \u0441\u0435 \u043D\u0435 \u043D\u0430\u043B\u0430\u0437\u0438 \u0443 \u0432\u0430\u0448\u043E\u0458 PATH \u043F\u0440\u043E\u043C\u0435\u043D\u0459\u0438\u0432\u0438. \u041C\u043E\u0436\u0434\u0430 \u0442\u0440\u0435\u0431\u0430\u0442\u0435 \u0434\u0430 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u0435 JDK-\u043E\u0432\u0435?
-Hudson.NoName=\u0418\u043C\u0435 \u043D\u0438\u0458\u0435 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u043E
-Hudson.NodeBeingRemoved=\u0423\u043A\u043B\u0430\u045A\u0430\u045A\u0435 \u043C\u0430\u0448\u0438\u043D\u0435 \u0458\u0435 \u0443 \u0442\u043E\u043A\u0443
-Hudson.UnsafeChar=\u041E\u043F\u0430\u0441\u043D\u043E \u0458\u0435 \u043A\u043E\u0440\u0438\u0441\u0438\u0442\u0438 \u0437\u043D\u0430\u043A\u043E\u0432\u0435 \u043A\u0430\u043E ''{0}''
-Hudson.JobNameConventionNotApplyed=\u2018{0}\u2019 \u043D\u0435 \u043E\u0434\u0433\u043E\u0432\u0430\u0440\u0430 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 \u0437\u0430 \u0437\u0430\u0434\u0430\u0442\u043A\u0435 {1}
-Hudson.ViewAlreadyExists=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0441\u0430 \u0438\u043C\u0435\u043D\u043E\u043C \u2018{0}\u2019 \u0432\u0435\u045B \u043F\u043E\u0441\u0442\u043E\u0458\u0438
-Hudson.JobAlreadyExists=\u0417\u0430\u0434\u0430\u0442\u0430\u043A \u0441\u0430 \u0438\u043C\u0435\u043D\u043E\u043C \u2018{0}\u2019 \u0432\u0435\u045B \u043F\u043E\u0441\u0442\u043E\u0458\u0438
+Hudson.NoJavaInPath=java \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0435 \u043d\u0435 \u043d\u0430\u043b\u0430\u0437\u0438 \u0443 \u0432\u0430\u0448\u043e\u0458 PATH \u043f\u0440\u043e\u043c\u0435\u043d\u0459\u0438\u0432\u0438. \u041c\u043e\u0436\u0434\u0430 \u0442\u0440\u0435\u0431\u0430\u0442\u0435 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 JDK-\u043e\u0432\u0435?
+Hudson.NoName=\u0418\u043c\u0435 \u043d\u0438\u0458\u0435 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043e
+Hudson.NodeBeingRemoved=\u0423\u043a\u043b\u0430\u045a\u0430\u045a\u0435 \u043c\u0430\u0448\u0438\u043d\u0435 \u0458\u0435 \u0443 \u0442\u043e\u043a\u0443
+Hudson.UnsafeChar=\u041e\u043f\u0430\u0441\u043d\u043e \u0458\u0435 \u043a\u043e\u0440\u0438\u0441\u0438\u0442\u0438 \u0437\u043d\u0430\u043a\u043e\u0432\u0435 \u043a\u0430\u043e ''{0}''
+Hudson.JobNameConventionNotApplyed=\u2018{0}\u2019 \u043d\u0435 \u043e\u0434\u0433\u043e\u0432\u0430\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0437\u0430 \u0437\u0430\u0434\u0430\u0442\u043a\u0435 {1}
+Hudson.ViewAlreadyExists=\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u0441\u0430 \u0438\u043c\u0435\u043d\u043e\u043c \u2018{0}\u2019 \u0432\u0435\u045b \u043f\u043e\u0441\u0442\u043e\u0458\u0438
+Hudson.JobAlreadyExists=\u0417\u0430\u0434\u0430\u0442\u0430\u043a \u0441\u0430 \u0438\u043c\u0435\u043d\u043e\u043c \u2018{0}\u2019 \u0432\u0435\u045b \u043f\u043e\u0441\u0442\u043e\u0458\u0438
Hudson.ViewName=\u0421\u0432\u0435
-Hudson.NotUsesUTF8ToDecodeURL=\u0412\u0430\u0448 \u043A\u043E\u043D\u0442\u0435\u0458\u043D\u0435\u0440 \u043D\u0435 \u043A\u043E\u0440\u0438\u0441\u0442 UTF-8 \u0437\u0430 \u0434\u0435\u043A\u043E\u0434\u0438\u0440\u0430\u045A\u0435 URL-\u0430\u0434\u0440\u0435\u0441\u0435. \u0410\u043A\u043E \u043A\u043E\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u043A\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0435 \u0432\u0430\u043D ASCII \u043D\u0438\u0437\u0430 \u0443 \u0438\u043C\u0435\u043D\u0443 \u0437\u0430\u0434\u0430\u0442\u0430\u043A\u0430, \u0438\u0442\u0434, \u043C\u043E\u0436\u0435 \u0438\u0437\u0430\u0437\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0435. \u041E\u0442\u0438\u0452\u0438 \u0442\u0435 \u043D\u0430 \u041A\u043E\u043D\u0442\u0435\u0458\u043D\u0435\u0440\u0438 \u0438 \
- Tomcat i18n \u0437\u0430 \u0458\u043E\u0448 \u0434\u0435\u0442\u0430\u0459\u0430.
-Hudson.NodeDescription=\u0433\u043B\u0430\u0432\u043D\u0430 Jenkins \u043C\u0430\u0448\u0438\u043D\u0430
-Hudson.NoParamsSpecified=\u041D\u0438\u0441\u0443 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 \u0437\u0430 \u043E\u0432\u0430\u0458 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u043E \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0435
-CLI.restart.shortDescription=\u041F\u043E\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u043D\u0438 Jenkins
-CLI.safe-restart.shortDescription=\u0411\u0435\u0437\u0432\u0435\u0434\u043D\u043E \u043F\u043E\u043D\u043E\u0432\u043E \u043F\u043E\u043A\u0440\u0435\u043D\u0438 Jenkins-\u0430
-CLI.keep-build.shortDescription=\u0417\u0430\u0434\u0440\u0436\u0438 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0443 \u0437\u0430\u0443\u0432\u0435\u043A
-CauseOfInterruption.ShortDescription=\u041E\u0434\u0443\u0441\u0442\u0430\u0432\u0459\u0435\u043D\u043E \u043E\u0434 \u0441\u0442\u0440\u0430\u043D\u0435 {0}
-CLI.shutdown.shortDescription=\u041E\u0434\u043C\u0430\u0445 \u0437\u0430\u0443\u0441\u0442\u0430\u0432\u0438 Jenkins \u0441\u0435\u0440\u0432\u0435\u0440
-DefaultProjectNamingStrategy.DisplayName=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0434\u043D\u043E
+Hudson.NotUsesUTF8ToDecodeURL=\u0412\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440 \u043d\u0435 \u043a\u043e\u0440\u0438\u0441\u0442 UTF-8 \u0437\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0430\u045a\u0435 URL-\u0430\u0434\u0440\u0435\u0441\u0435. \u0410\u043a\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435 \u0432\u0430\u043d ASCII \u043d\u0438\u0437\u0430 \u0443 \u0438\u043c\u0435\u043d\u0443 \u0437\u0430\u0434\u0430\u0442\u0430\u043a\u0430, \u0438\u0442\u0434, \u043c\u043e\u0436\u0435 \u0438\u0437\u0430\u0437\u0432\u0430\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435. \u041e\u0442\u0438\u0452\u0438 \u0442\u0435 \u043d\u0430 \u041a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440\u0438 \u0438 \
+ Tomcat i18n \u0437\u0430 \u0458\u043e\u0448 \u0434\u0435\u0442\u0430\u0459\u0430.
+Hudson.NodeDescription=\u0433\u043b\u0430\u0432\u043d\u0430 Jenkins \u043c\u0430\u0448\u0438\u043d\u0430
+Hudson.NoParamsSpecified=\u041d\u0438\u0441\u0443 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0434\u045a\u0435
+CLI.restart.shortDescription=\u041f\u043e\u043d\u043e\u0432\u043e \u043f\u043e\u043a\u0440\u0435\u043d\u0438 Jenkins
+CLI.safe-restart.shortDescription=\u0411\u0435\u0437\u0432\u0435\u0434\u043d\u043e \u043f\u043e\u043d\u043e\u0432\u043e \u043f\u043e\u043a\u0440\u0435\u043d\u0438 Jenkins-\u0430
+CLI.keep-build.shortDescription=\u0417\u0430\u0434\u0440\u0436\u0438 \u0438\u0437\u0433\u0440\u0430\u0434\u045a\u0443 \u0437\u0430\u0443\u0432\u0435\u043a
+CauseOfInterruption.ShortDescription=\u041e\u0434\u0443\u0441\u0442\u0430\u0432\u0459\u0435\u043d\u043e \u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0435 {0}
+CLI.shutdown.shortDescription=\u041e\u0434\u043c\u0430\u0445 \u0437\u0430\u0443\u0441\u0442\u0430\u0432\u0438 Jenkins \u0441\u0435\u0440\u0432\u0435\u0440
+DefaultProjectNamingStrategy.DisplayName=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0434\u043d\u043e
CLI.safe-shutdown.shortDescription=\
-\u041F\u0440\u0435\u0431\u0430\u0446\u0438 Jenkins \u0443 \u0442\u0438\u0445\u0438 \u0440\u0435\u0436\u0438\u043C, \u0447\u0435\u043A\u0430\u045B\u0435 \u0437\u0430\u0432\u0440\u0448\u045A\u0435\u0442\u0430\u043A \u0442\u0440\u0435\u043D\u0443\u0442\u043D\u0438\u0445 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0430 \u0430 \u043E\u043D\u0434\u0430 \u045B\u0435 \u0443\u0433\u0430\u0441\u0438\u0442\u0438 Jenkins.
-IdStrategy.CaseInsensitive.DisplayName=\u0411\u0435\u0437 \u0440\u0430\u0437\u043B\u0438\u043A\u0435 \u0438\u0437\u043C\u0435\u045B\u0443 \u0432\u0435\u043B\u0438\u043A\u0438\u043C \u0438 \u043C\u0430\u043B\u0438\u043C \u0441\u043B\u043E\u0432\u0438\u043C\u0430
-IdStrategy.CaseSensitive.DisplayName=\u0421\u0430 \u0440\u0430\u0437\u043B\u0438\u043A\u043E\u043C \u0438\u0437\u043C\u0435\u045B\u0443 \u0432\u0435\u043B\u0438\u043A\u0438\u043C \u0438 \u043C\u0430\u043B\u0438\u043C \u0441\u043B\u043E\u0432\u0438\u043C\u0430
-IdStrategy.CaseSensitiveEmailAddress.DisplayName=\u0421\u0430 \u0440\u0430\u0437\u043B\u0438\u043A\u043E\u043C \u0438\u0437\u043C\u0435\u045B\u0443 \u0432\u0435\u043B\u0438\u043A\u0438\u043C \u0438 \u043C\u0430\u043B\u0438\u043C \u0441\u043B\u043E\u0432\u0438\u043C\u0430 (\u0430\u0434\u0440\u0435\u0441\u0430 \u0435-\u043F\u043E\u0448\u0442\u0435)
-Mailer.Address.Not.Configured=\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0438\u0458\u0435 \u0458\u043E\u0448 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0430
-Mailer.Localhost.Error=\u041D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043E \u0438\u043C\u0435 \u0437\u0430 \u0445\u043E\u0441\u0442, \u0430 \u043D\u0435 "localhost"
-PatternProjectNamingStrategy.DisplayName=\u0428\u0430\u0431\u043B\u043E\u043D
-PatternProjectNamingStrategy.NamePatternRequired=\u041D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0430\u0431\u043B\u043E\u043D \u0438\u043C\u0435\u043D\u0443
-PatternProjectNamingStrategy.NamePatternInvalidSyntax=\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043D \u0440\u0435\u0433\u0443\u043B\u0430\u0440\u043D\u0438 \u0438\u0437\u0440\u0430\u0437
-ParameterizedJobMixIn.build_with_parameters=\u0418\u0437\u0433\u0440\u0430\u0434\u0438 \u0441\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438\u043C\u0430
+\u041f\u0440\u0435\u0431\u0430\u0446\u0438 Jenkins \u0443 \u0442\u0438\u0445\u0438 \u0440\u0435\u0436\u0438\u043c, \u0447\u0435\u043a\u0430\u045b\u0435 \u0437\u0430\u0432\u0440\u0448\u045a\u0435\u0442\u0430\u043a \u0442\u0440\u0435\u043d\u0443\u0442\u043d\u0438\u0445 \u0438\u0437\u0433\u0440\u0430\u0434\u045a\u0430 \u0430 \u043e\u043d\u0434\u0430 \u045b\u0435 \u0443\u0433\u0430\u0441\u0438\u0442\u0438 Jenkins.
+IdStrategy.CaseInsensitive.DisplayName=\u0411\u0435\u0437 \u0440\u0430\u0437\u043b\u0438\u043a\u0435 \u0438\u0437\u043c\u0435\u045b\u0443 \u0432\u0435\u043b\u0438\u043a\u0438\u043c \u0438 \u043c\u0430\u043b\u0438\u043c \u0441\u043b\u043e\u0432\u0438\u043c\u0430
+IdStrategy.CaseSensitive.DisplayName=\u0421\u0430 \u0440\u0430\u0437\u043b\u0438\u043a\u043e\u043c \u0438\u0437\u043c\u0435\u045b\u0443 \u0432\u0435\u043b\u0438\u043a\u0438\u043c \u0438 \u043c\u0430\u043b\u0438\u043c \u0441\u043b\u043e\u0432\u0438\u043c\u0430
+IdStrategy.CaseSensitiveEmailAddress.DisplayName=\u0421\u0430 \u0440\u0430\u0437\u043b\u0438\u043a\u043e\u043c \u0438\u0437\u043c\u0435\u045b\u0443 \u0432\u0435\u043b\u0438\u043a\u0438\u043c \u0438 \u043c\u0430\u043b\u0438\u043c \u0441\u043b\u043e\u0432\u0438\u043c\u0430 (\u0430\u0434\u0440\u0435\u0441\u0430 \u0435-\u043f\u043e\u0448\u0442\u0435)
+Mailer.Address.Not.Configured=\u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0438\u0458\u0435 \u0458\u043e\u0448 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0430
+Mailer.Localhost.Error=\u041d\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e \u0438\u043c\u0435 \u0437\u0430 \u0445\u043e\u0441\u0442, \u0430 \u043d\u0435 "localhost"
+PatternProjectNamingStrategy.DisplayName=\u0428\u0430\u0431\u043b\u043e\u043d
+PatternProjectNamingStrategy.NamePatternRequired=\u041d\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u043c\u0435\u043d\u0443
+PatternProjectNamingStrategy.NamePatternInvalidSyntax=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043d \u0440\u0435\u0433\u0443\u043b\u0430\u0440\u043d\u0438 \u0438\u0437\u0440\u0430\u0437
+ParameterizedJobMixIn.build_with_parameters=\u0418\u0437\u0433\u0440\u0430\u0434\u0438 \u0441\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u043c\u0430
ParameterizedJobMixIn.build_now=\u0418\u0437\u0433\u0440\u0430\u0434\u0438 \u0441\u0430\u0434\u0430
-BlockedBecauseOfBuildInProgress.shortDescription=\u0418\u0437\u0433\u0440\u0430\u0434\u045A\u0430 #{0} \u0458\u0435 \u0432\u0435\u045B \u0443 \u0442\u043E\u043A\u0443 {1}
-BlockedBecauseOfBuildInProgress.ETA=\ (\u043E\u0441\u0442\u0430\u043B\u043E:{0})
-BuildDiscarderProperty.displayName=\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0441\u0442\u0430\u0440\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045A\u0430
+BlockedBecauseOfBuildInProgress.shortDescription=\u0418\u0437\u0433\u0440\u0430\u0434\u045a\u0430 #{0} \u0458\u0435 \u0432\u0435\u045b \u0443 \u0442\u043e\u043a\u0443 {1}
+BlockedBecauseOfBuildInProgress.ETA=\ (\u043e\u0441\u0442\u0430\u043b\u043e:{0})
+BuildDiscarderProperty.displayName=\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0441\u0442\u0430\u0440\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045a\u0430
Din=
-vil=
\ No newline at end of file
+vil=
+CLI.disable-job.shortDescription=\u041f\u043e\u043d\u0438\u0448\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043a
+CLI.enable-job.shortDescription=\u0423\u043a\u0459\u0443\u0447\u0438 \u0437\u0430\u0434\u0430\u0442\u0430\u043a
diff --git a/core/src/main/resources/jenkins/model/Messages_zh_TW.properties b/core/src/main/resources/jenkins/model/Messages_zh_TW.properties
index d67098e7cd01..09a7308cf155 100644
--- a/core/src/main/resources/jenkins/model/Messages_zh_TW.properties
+++ b/core/src/main/resources/jenkins/model/Messages_zh_TW.properties
@@ -63,3 +63,5 @@ ParameterizedJobMixIn.build_now=\u99ac\u4e0a\u5efa\u7f6e
BlockedBecauseOfBuildInProgress.shortDescription=\u5efa\u7f6e #{0} \u57f7\u884c\u4e2d{1}
BlockedBecauseOfBuildInProgress.ETA=\ (\u9810\u4f30\u6642\u9593:{0})
BuildDiscarderProperty.displayName=\u5FFD\u7565\u820ABuilds
+CLI.disable-job.shortDescription=\u505c\u7528\u4f5c\u696d\u3002
+CLI.enable-job.shortDescription=\u555f\u7528\u4f5c\u696d\u3002
diff --git a/core/src/main/resources/lib/hudson/project/config-disableBuild.jelly b/core/src/main/resources/lib/hudson/project/config-disableBuild.jelly
index 024974a087d9..03e1ed259a1d 100644
--- a/core/src/main/resources/lib/hudson/project/config-disableBuild.jelly
+++ b/core/src/main/resources/lib/hudson/project/config-disableBuild.jelly
@@ -23,7 +23,7 @@ THE SOFTWARE.
-->
diff --git a/core/src/main/resources/lib/hudson/project/makeDisabled.jelly b/core/src/main/resources/lib/hudson/project/makeDisabled.jelly
new file mode 100644
index 000000000000..e236fa1882cc
--- /dev/null
+++ b/core/src/main/resources/lib/hudson/project/makeDisabled.jelly
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ar.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ar.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ar.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ar.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_bg.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_bg.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_bg.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_bg.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ca.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ca.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ca.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ca.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_cs.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_cs.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_cs.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_cs.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_da.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_da.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_da.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_da.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_de.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_de.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_de.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_de.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_es.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_es.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_es.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_es.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_et.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_et.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_et.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_et.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_fi.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_fi.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_fi.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_fi.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_fr.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_fr.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_fr.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_fr.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_he.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_he.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_he.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_he.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_hu.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_hu.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_hu.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_hu.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_it.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_it.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_it.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_it.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ja.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ja.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ja.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ja.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ko.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ko.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ko.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ko.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_lt.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_lt.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_lt.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_lt.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_lv.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_lv.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_lv.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_lv.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_nb_NO.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_nb_NO.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_nb_NO.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_nb_NO.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_nl.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_nl.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_nl.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_nl.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pl.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_pl.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pl.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_pl.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pt_BR.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_pt_BR.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pt_BR.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_pt_BR.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pt_PT.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_pt_PT.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_pt_PT.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_pt_PT.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ro.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ro.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ro.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ro.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ru.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_ru.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_ru.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_ru.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sk.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_sk.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sk.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_sk.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sl.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_sl.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sl.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_sl.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sr.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_sr.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sr.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_sr.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sv_SE.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_sv_SE.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_sv_SE.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_sv_SE.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_tr.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_tr.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_tr.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_tr.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_uk.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_uk.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_uk.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_uk.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_zh_CN.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_zh_CN.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_zh_CN.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_zh_CN.properties
diff --git a/core/src/main/resources/hudson/model/AbstractProject/makeDisabled_zh_TW.properties b/core/src/main/resources/lib/hudson/project/makeDisabled_zh_TW.properties
similarity index 100%
rename from core/src/main/resources/hudson/model/AbstractProject/makeDisabled_zh_TW.properties
rename to core/src/main/resources/lib/hudson/project/makeDisabled_zh_TW.properties
diff --git a/pom.xml b/pom.xml
index b355b659ff0c..89ff5b075d50 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,9 @@ THE SOFTWARE.
3.0.4true1.2
+ 1.11
+ ${access-modifier.version}
+ ${access-modifier.version}8
@@ -223,6 +226,11 @@ THE SOFTWARE.
jcifs1.3.17-kohsuke-1
+
+ org.kohsuke
+ access-modifier-annotation
+ ${access-modifier-annotation.version}
+
@@ -432,7 +440,7 @@ THE SOFTWARE.
org.kohsukeaccess-modifier-checker
- 1.4
+ ${access-modifier-checker.version}com.cloudbees
diff --git a/test/src/test/groovy/hudson/cli/EnableJobCommandTest.groovy b/test/src/test/java/hudson/cli/EnableJobCommandTest.java
similarity index 65%
rename from test/src/test/groovy/hudson/cli/EnableJobCommandTest.groovy
rename to test/src/test/java/hudson/cli/EnableJobCommandTest.java
index a9ccca92c8bc..a02e63781f9d 100644
--- a/test/src/test/groovy/hudson/cli/EnableJobCommandTest.groovy
+++ b/test/src/test/java/hudson/cli/EnableJobCommandTest.java
@@ -21,36 +21,27 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-package hudson.cli
-import static org.junit.Assert.assertFalse
-import static org.junit.Assert.assertTrue
+package hudson.cli;
-import org.junit.Rule
-import org.junit.Test
-import org.jvnet.hudson.test.JenkinsRule
+import hudson.model.FreeStyleProject;
+import static org.junit.Assert.*;
+import org.junit.Rule;
+import org.junit.Test;
+import org.jvnet.hudson.test.JenkinsRule;
-/**
- * @author Kohsuke Kawaguchi
- */
public class EnableJobCommandTest {
@Rule
- public JenkinsRule j = new JenkinsRule()
+ public JenkinsRule r = new JenkinsRule();
@Test
- void test() {
- def p = j.createFreeStyleProject()
-
- def cli = new CLI(j.getURL())
-
- try {
- cli.execute(["disable-job",p.name])
- assertTrue(p.disabled)
- cli.execute(["enable-job",p.name])
- assertFalse(p.disabled)
- } finally {
- cli.close()
- }
+ public void smokes() throws Exception {
+ FreeStyleProject p = r.createFreeStyleProject("p");
+ assertThat(new CLICommandInvoker(r, "disable-job").invokeWithArgs("p"), CLICommandInvoker.Matcher.succeededSilently());
+ assertTrue(p.isDisabled());
+ assertThat(new CLICommandInvoker(r, "enable-job").invokeWithArgs("p"), CLICommandInvoker.Matcher.succeededSilently());
+ assertFalse(p.isDisabled());
}
+
}