From 8a2849b441226ceaba282906af3fe3820fdfa03d Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 13 Nov 2015 17:53:50 -0500 Subject: [PATCH] [FIXED JENKINS-31518] Translate Job.logRotator to BuildDiscarderProperty more seamlessly. --- core/src/main/java/hudson/model/Job.java | 19 +++++++++++--- .../model/BuildDiscarderPropertyTest.java | 24 ++++++++++++++++++ .../buildDiscarderField.zip | Bin 0 -> 499 bytes 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 test/src/test/resources/jenkins/model/BuildDiscarderPropertyTest/buildDiscarderField.zip diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index 07684f9e9d..d60f144d55 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -430,7 +430,7 @@ public abstract class Job, RunT extends Run, RunT extends Run> 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, RunT extends Run T getProperty(Class clazz) { + if (clazz == BuildDiscarderProperty.class && logRotator != null) { + return clazz.cast(new BuildDiscarderProperty(logRotator)); + } + return _getProperty(clazz); + } + + private T _getProperty(Class clazz) { for (JobProperty p : properties) { if (clazz.isInstance(p)) return clazz.cast(p); @@ -1196,6 +1207,8 @@ public abstract class Job, RunT extends Run, JobPropertyDescriptor> t = new DescribableList, JobPropertyDescriptor>(NOOP,getAllProperties()); JSONObject jsonProperties = json.optJSONObject("properties"); if (jsonProperties != null) { diff --git a/test/src/test/java/jenkins/model/BuildDiscarderPropertyTest.java b/test/src/test/java/jenkins/model/BuildDiscarderPropertyTest.java index 90c8bf71bd..c137c8bc20 100644 --- a/test/src/test/java/jenkins/model/BuildDiscarderPropertyTest.java +++ b/test/src/test/java/jenkins/model/BuildDiscarderPropertyTest.java @@ -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("")); + } + + 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 diff --git a/test/src/test/resources/jenkins/model/BuildDiscarderPropertyTest/buildDiscarderField.zip b/test/src/test/resources/jenkins/model/BuildDiscarderPropertyTest/buildDiscarderField.zip new file mode 100644 index 0000000000000000000000000000000000000000..fd32a7328236234990664ab48f6f64f5b34f6b54 GIT binary patch literal 499 zcmWIWW@Zs#U|`^2n9!B$o_SNn+?tVr;RX`}gCK(pLsouLv3`Mma(-S~X1ZQQZcb*FVL>%#k1 zZ2ZN$L)$&lO|tx8k4huggy=-2;Gm+uMOvkMFZEgG8tX|us;T)PniXo%=B_iZx>Dw? zVPEaTD0{{kpVW@<@KX^O+zQ)`5O7wkG}U^X-G6ZhZC``;9wdwcqGiC5cd zl^UKyOgt;JuBbAcww=r|CFbKrnOnvJNe@G$K0RC1e?Y`r|LN<)r+0iUSQa+Rbm?Zh zBV`()dK2ENgxsBG+xN&Xt8UMCr?A`1D_Z{rywKU87Wgo5_d@&H>xt5z=daKX=P3%i zQu-rh`RdH0d$%r#F)Fp3USj1K^R@Zd`y~gQ`zP<(dS=G7MN57!zaQYu$Rx*%D;^|( n@x#CXj24D1jUX15SYd_43R;W=c(byBG%x~TIFN1wnZW=6)E&Zl literal 0 HcmV?d00001 -- GitLab