提交 8a2849b4 编写于 作者: J Jesse Glick

[FIXED JENKINS-31518] Translate Job.logRotator to BuildDiscarderProperty more seamlessly.

上级 2200711b
...@@ -430,7 +430,7 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R ...@@ -430,7 +430,7 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
* Returns the configured build discarder for this job, via {@link BuildDiscarderProperty}, or null if none. * Returns the configured build discarder for this job, via {@link BuildDiscarderProperty}, or null if none.
*/ */
public synchronized BuildDiscarder getBuildDiscarder() { public synchronized BuildDiscarder getBuildDiscarder() {
BuildDiscarderProperty prop = getProperty(BuildDiscarderProperty.class); BuildDiscarderProperty prop = _getProperty(BuildDiscarderProperty.class);
return prop != null ? prop.getStrategy() : /* settings compatibility */ logRotator; return prop != null ? prop.getStrategy() : /* settings compatibility */ logRotator;
} }
...@@ -553,9 +553,13 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R ...@@ -553,9 +553,13 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
/** /**
* Gets all the job properties configured for this job. * Gets all the job properties configured for this job.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings({"unchecked", "rawtypes"})
public Map<JobPropertyDescriptor, JobProperty<? super JobT>> getProperties() { public Map<JobPropertyDescriptor, JobProperty<? super JobT>> getProperties() {
return Descriptor.toMap((Iterable) properties); Map result = Descriptor.toMap((Iterable) properties);
if (logRotator != null) {
result.put(Jenkins.getActiveInstance().getDescriptorByType(BuildDiscarderProperty.DescriptorImpl.class), new BuildDiscarderProperty(logRotator));
}
return result;
} }
/** /**
...@@ -572,6 +576,13 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R ...@@ -572,6 +576,13 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
* this job. * this job.
*/ */
public <T extends JobProperty> T getProperty(Class<T> clazz) { public <T extends JobProperty> T getProperty(Class<T> clazz) {
if (clazz == BuildDiscarderProperty.class && logRotator != null) {
return clazz.cast(new BuildDiscarderProperty(logRotator));
}
return _getProperty(clazz);
}
private <T extends JobProperty> T _getProperty(Class<T> clazz) {
for (JobProperty p : properties) { for (JobProperty p : properties) {
if (clazz.isInstance(p)) if (clazz.isInstance(p))
return clazz.cast(p); return clazz.cast(p);
...@@ -1196,6 +1207,8 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R ...@@ -1196,6 +1207,8 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
try { try {
setDisplayName(json.optString("displayNameOrNull")); setDisplayName(json.optString("displayNameOrNull"));
logRotator = null;
DescribableList<JobProperty<?>, JobPropertyDescriptor> t = new DescribableList<JobProperty<?>, JobPropertyDescriptor>(NOOP,getAllProperties()); DescribableList<JobProperty<?>, JobPropertyDescriptor> t = new DescribableList<JobProperty<?>, JobPropertyDescriptor>(NOOP,getAllProperties());
JSONObject jsonProperties = json.optJSONObject("properties"); JSONObject jsonProperties = json.optJSONObject("properties");
if (jsonProperties != null) { if (jsonProperties != null) {
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
package jenkins.model; package jenkins.model;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.model.FreeStyleProject;
import hudson.tasks.LogRotator; import hudson.tasks.LogRotator;
import java.io.StringReader; import java.io.StringReader;
import javax.xml.transform.Source; import javax.xml.transform.Source;
...@@ -41,6 +42,29 @@ public class BuildDiscarderPropertyTest { ...@@ -41,6 +42,29 @@ public class BuildDiscarderPropertyTest {
@Rule @Rule
public JenkinsRule r = new JenkinsRule(); public JenkinsRule r = new JenkinsRule();
@Issue("JENKINS-31518")
@LocalData
@Test
public void buildDiscarderField() throws Exception {
FreeStyleProject p = r.jenkins.getItemByFullName("p", FreeStyleProject.class);
verifyBuildDiscarder(p);
r.configRoundtrip(p);
verifyBuildDiscarder(p);
String xml = p.getConfigFile().asString();
assertFalse(xml, xml.contains("<logRotator class="));
assertTrue(xml, xml.contains("<" + BuildDiscarderProperty.class.getName() + ">"));
}
private void verifyBuildDiscarder(FreeStyleProject p) {
BuildDiscarder bd = p.getBuildDiscarder();
assertNotNull(bd);
LogRotator lr = (LogRotator) bd;
assertEquals(7, lr.getDaysToKeep());
assertEquals(10, lr.getNumToKeep());
assertNotNull(p.getProperty(BuildDiscarderProperty.class));
assertEquals(1, p.getProperties().size());
}
@Issue("JENKINS-16979") @Issue("JENKINS-16979")
@LocalData @LocalData
@Test @Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册