提交 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
* Returns the configured build discarder for this job, via {@link BuildDiscarderProperty}, or null if none.
*/
public synchronized BuildDiscarder getBuildDiscarder() {
BuildDiscarderProperty prop = getProperty(BuildDiscarderProperty.class);
BuildDiscarderProperty prop = _getProperty(BuildDiscarderProperty.class);
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
/**
* Gets all the job properties configured for this job.
*/
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "rawtypes"})
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
* this job.
*/
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) {
if (clazz.isInstance(p))
return clazz.cast(p);
......@@ -1196,6 +1207,8 @@ public abstract class Job<JobT extends Job<JobT, RunT>, RunT extends Run<JobT, R
try {
setDisplayName(json.optString("displayNameOrNull"));
logRotator = null;
DescribableList<JobProperty<?>, JobPropertyDescriptor> t = new DescribableList<JobProperty<?>, JobPropertyDescriptor>(NOOP,getAllProperties());
JSONObject jsonProperties = json.optJSONObject("properties");
if (jsonProperties != null) {
......
......@@ -25,6 +25,7 @@
package jenkins.model;
import hudson.model.AbstractProject;
import hudson.model.FreeStyleProject;
import hudson.tasks.LogRotator;
import java.io.StringReader;
import javax.xml.transform.Source;
......@@ -41,6 +42,29 @@ public class BuildDiscarderPropertyTest {
@Rule
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")
@LocalData
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册