diff --git a/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java index dfe874813e..fe57df3d11 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java @@ -110,7 +110,7 @@ public final class DiffCommandBuilder * @throws RepositoryException */ public DiffCommandBuilder retriveContent(OutputStream outputStream) - throws IOException, RepositoryException + throws IOException, RepositoryException { getDiffResult(outputStream); @@ -148,6 +148,26 @@ public final class DiffCommandBuilder //~--- set methods ---------------------------------------------------------- + /** + * Sets the diff format which should be used for the output. + * Note: If the repository provider does not support the + * diff format, it will fallback to its default format. + * + * + * @param format format of the diff output + * + * @return {@code this} + * + * @since 1.34 + */ + public DiffCommandBuilder setFormat(DiffFormat format) + { + Preconditions.checkNotNull(format, "format could not be null"); + request.setFormat(format); + + return this; + } + /** * Show the difference only for the given path. * @@ -191,11 +211,11 @@ public final class DiffCommandBuilder * @throws RepositoryException */ private void getDiffResult(OutputStream outputStream) - throws IOException, RepositoryException + throws IOException, RepositoryException { Preconditions.checkNotNull(outputStream, "OutputStream is required"); Preconditions.checkArgument(request.isValid(), - "path and/or revision is required"); + "path and/or revision is required"); if (logger.isDebugEnabled()) { diff --git a/scm-core/src/main/java/sonia/scm/repository/api/DiffFormat.java b/scm-core/src/main/java/sonia/scm/repository/api/DiffFormat.java new file mode 100644 index 0000000000..516b8db016 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/api/DiffFormat.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2010, 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; + +/** + * Specifies the output format of a diff command. + * + * @author Sebastian Sdorra + * @since 1.34 + */ +public enum DiffFormat +{ + + /** + * default format of the underlying repository provider + */ + NATIVE, + + /** + * git diff format + */ + GIT, + + /** + * traditional unified diff command + */ + UNIFIED; +} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java index 74b73654ea..90b913b97e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java @@ -38,6 +38,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import sonia.scm.Validateable; +import sonia.scm.repository.api.DiffFormat; /** * @@ -92,4 +93,39 @@ public final class DiffCommandRequest extends FileBaseCommandRequest return !Strings.isNullOrEmpty(getPath()) ||!Strings.isNullOrEmpty(getRevision()); } + + //~--- set methods ---------------------------------------------------------- + + /** + * Sets the diff format which should be used for the output. + * + * + * @param format format of the diff output + * + * @since 1.34 + */ + public void setFormat(DiffFormat format) + { + this.format = format; + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Return the output format of the diff command. + * + * + * @return output format + * + * @since 1.34 + */ + DiffFormat getFormat() + { + return format; + } + + //~--- fields --------------------------------------------------------------- + + /** diff format */ + private DiffFormat format = DiffFormat.NATIVE; }