From 3e6ef0ce653addc7db470716916f2841d3e84ad1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 2 Nov 2014 17:55:59 +0100 Subject: [PATCH] return changeset count for bundle and unbundle command --- ...stractBundleOrUnbundleCommandResponse.java | 121 ++++++++++++++++++ .../scm/repository/api/BundleResponse.java | 18 ++- .../scm/repository/api/UnbundleResponse.java | 17 ++- .../scm/repository/spi/SvnBundleCommand.java | 5 +- .../repository/spi/SvnUnbundleCommand.java | 6 +- .../repository/spi/SvnBundleCommandTest.java | 3 +- .../spi/SvnUnbundleCommandTest.java | 3 +- 7 files changed, 165 insertions(+), 8 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java diff --git a/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java new file mode 100644 index 0000000000..36ae6f89ad --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java @@ -0,0 +1,121 @@ +/** + * Copyright (c) 2014, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository.api; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.common.base.Objects; + +/** + * Abstract class for bundle or unbundle command. + * + * @author Sebastian Sdorra + * @since 1.43 + */ +public abstract class AbstractBundleOrUnbundleCommandResponse +{ + + /** + * Constructs a new bundle/unbundle response. + * + * + * @param changesetCount count of bundled/unbundled changesets + */ + protected AbstractBundleOrUnbundleCommandResponse(long changesetCount) + { + this.changesetCount = changesetCount; + } + + //~--- methods -------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + + if (getClass() != obj.getClass()) + { + return false; + } + + final AbstractBundleOrUnbundleCommandResponse other = + (AbstractBundleOrUnbundleCommandResponse) obj; + + return Objects.equal(changesetCount, other.changesetCount); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return Objects.hashCode(changesetCount); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + //J- + return Objects.toStringHelper(this) + .add("changesetCount", changesetCount) + .toString(); + //J+ + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Returns the count of bundled/unbundled changesets. + * + * + * @return count of bundled/unbundled changesets + */ + public long getChangesetCount() + { + return changesetCount; + } + + //~--- fields --------------------------------------------------------------- + + /** count of bundled/unbundled changesets */ + private final long changesetCount; +} diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BundleResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/BundleResponse.java index 0ad17ce700..8cad1edc65 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BundleResponse.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BundleResponse.java @@ -34,9 +34,23 @@ package sonia.scm.repository.api; /** - * Response of {@link BundleCommandBuilder}. + * Response of bundle command. * * @author Sebastian Sdorra * @since 1.43 */ -public class BundleResponse {} +public final class BundleResponse + extends AbstractBundleOrUnbundleCommandResponse +{ + + /** + * Constructs a new bundle response. + * + * + * @param changesetCount count of bundled changesets + */ + public BundleResponse(long changesetCount) + { + super(changesetCount); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/api/UnbundleResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/UnbundleResponse.java index bc2a897fd9..0c177ba699 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/UnbundleResponse.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/UnbundleResponse.java @@ -34,9 +34,22 @@ package sonia.scm.repository.api; /** - * Response of {@link UnbundleCommandBuilder}. + * Response of unbundle command. * * @author Sebastian Sdorra * @since 1.43 */ -public class UnbundleResponse {} +public class UnbundleResponse extends AbstractBundleOrUnbundleCommandResponse +{ + + /** + * Constructs a new unbundle response. + * + * + * @param changesetCount count of unbundled changesets + */ + public UnbundleResponse(long changesetCount) + { + super(changesetCount); + } +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java index bf02cc7d0e..af9dbe5fda 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java @@ -125,6 +125,8 @@ public class SvnBundleCommand extends AbstractSvnCommand ByteSink archive = checkNotNull(request.getArchive(), "archive is required"); + BundleResponse response; + SVNClientManager clientManager = null; try @@ -134,6 +136,7 @@ public class SvnBundleCommand extends AbstractSvnCommand SVNAdminClient adminClient = clientManager.getAdminClient(); dump(adminClient, context.getDirectory(), archive); + response = new BundleResponse(context.open().getLatestRevision()); } catch (SVNException ex) { @@ -144,6 +147,6 @@ public class SvnBundleCommand extends AbstractSvnCommand SvnUtil.dispose(clientManager); } - return new BundleResponse(); + return response; } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnUnbundleCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnUnbundleCommand.java index f7479caeaa..f8ebfc765a 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnUnbundleCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnUnbundleCommand.java @@ -105,6 +105,8 @@ public class SvnUnbundleCommand extends AbstractSvnCommand logger.debug("archive repository {} to {}", context.getDirectory(), archive); + UnbundleResponse response; + SVNClientManager clientManager = null; try @@ -114,6 +116,8 @@ public class SvnUnbundleCommand extends AbstractSvnCommand SVNAdminClient adminClient = clientManager.getAdminClient(); restore(adminClient, archive, context.getDirectory()); + + response = new UnbundleResponse(context.open().getLatestRevision()); } catch (SVNException ex) { @@ -124,7 +128,7 @@ public class SvnUnbundleCommand extends AbstractSvnCommand SvnUtil.dispose(clientManager); } - return new UnbundleResponse(); + return response; } /** diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java index a7b5a17687..57fde186cf 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java @@ -77,7 +77,8 @@ public class SvnBundleCommandTest extends AbstractSvnCommandTestBase BundleResponse res = new SvnBundleCommand(createContext(), repository).bundle(req); - assertNotNull(res); + assertThat(res, notNullValue()); + assertThat(res.getChangesetCount(), is(5l)); assertTrue("file does not exists", file.exists()); assertThat(file.length(), greaterThan(0l)); } diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java index 18d784ade2..2c59797296 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java @@ -86,7 +86,8 @@ public class SvnUnbundleCommandTest extends AbstractSvnCommandTestBase ); //J+ - assertNotNull(res); + assertThat(res, notNullValue()); + assertThat(res.getChangesetCount(), is(5l)); SVNRepository repo = ctx.open();