From 05bc3946a3e6270189ea4830fbf5f2297fd20bde Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 24 Jun 2012 19:27:44 +0200 Subject: [PATCH] return a clone of changeset paging result to fix pre processor behavior --- .../sonia/scm/repository/BlameResult.java | 4 +-- .../java/sonia/scm/repository/Changeset.java | 21 +++++++++------ .../scm/repository/ChangesetPagingResult.java | 27 ++++++++++++++++++- .../sonia/scm/repository/Modifications.java | 27 ++++++++++++++++++- .../scm/repository/api/LogCommandBuilder.java | 2 ++ 5 files changed, 69 insertions(+), 12 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/BlameResult.java b/scm-core/src/main/java/sonia/scm/repository/BlameResult.java index 8f3280e5c4..d4581dae84 100644 --- a/scm-core/src/main/java/sonia/scm/repository/BlameResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/BlameResult.java @@ -94,10 +94,10 @@ public class BlameResult implements Cloneable //~--- methods -------------------------------------------------------------- /** - * Create a clone of this {@link blameResult} object. + * Create a clone of this {@link BlameResult} object. * * - * @return clone of this {@link blameResult} + * @return clone of this {@link BlameResult} * * @since 1.17 */ diff --git a/scm-core/src/main/java/sonia/scm/repository/Changeset.java b/scm-core/src/main/java/sonia/scm/repository/Changeset.java index 3fb89a064e..20eadd1ac3 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Changeset.java +++ b/scm-core/src/main/java/sonia/scm/repository/Changeset.java @@ -109,21 +109,26 @@ public class Changeset extends BasicPropertiesAware //~--- methods -------------------------------------------------------------- /** - * {@inheritDoc} + * Create a clone of this {@link Changeset} object. * * - * @return + * @return clone of this {@link Changeset} + * + * @since 1.17 */ @Override public Changeset clone() { - Changeset changeset = new Changeset(id, date, author, description); + Changeset changeset = null; - changeset.setBranches(branches); - changeset.setTags(tags); - changeset.setModifications(modifications); - changeset.setProperties(properties); - changeset.setParents(parents); + try + { + changeset = (Changeset) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(ex); + } return changeset; } diff --git a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java index d4a105d22b..15096e792f 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java @@ -50,7 +50,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlRootElement(name = "changeset-paging") @XmlAccessorType(XmlAccessType.FIELD) -public class ChangesetPagingResult implements Iterable +public class ChangesetPagingResult implements Iterable, Cloneable { /** @@ -74,6 +74,31 @@ public class ChangesetPagingResult implements Iterable //~--- methods -------------------------------------------------------------- + /** + * Create a clone of this {@link ChangesetPagingResult} object. + * + * + * @return clone of this {@link ChangesetPagingResult} + * + * @since 1.17 + */ + @Override + public ChangesetPagingResult clone() + { + ChangesetPagingResult changesetPagingResult = null; + + try + { + changesetPagingResult = (ChangesetPagingResult) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(ex); + } + + return changesetPagingResult; + } + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java index 5ce5779031..33571b28d2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java +++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java @@ -58,7 +58,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "modifications") -public class Modifications implements Serializable +public class Modifications implements Cloneable, Serializable { /** Field description */ @@ -113,6 +113,31 @@ public class Modifications implements Serializable //~--- methods -------------------------------------------------------------- + /** + * Create a clone of this {@link Modifications} object. + * + * + * @return clone of this {@link Modifications} + * + * @since 1.17 + */ + @Override + public Modifications clone() + { + Modifications modifications = null; + + try + { + modifications = (Modifications) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(ex); + } + + return modifications; + } + /** * {@inheritDoc} * diff --git a/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java index bfa337ea6f..951f46763a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java @@ -214,6 +214,7 @@ public final class LogCommandBuilder if (!disablePreProcessors && (changeset != null)) { + changeset = changeset.clone(); preProcessorUtil.prepareForReturn(repository, changeset); } @@ -271,6 +272,7 @@ public final class LogCommandBuilder if (!disablePreProcessors && (cpr != null)) { + cpr = cpr.clone(); preProcessorUtil.prepareForReturn(repository, cpr); }