diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java index a8e585915e..c0ae0b51b5 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java @@ -33,8 +33,7 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - +import com.aragost.javahg.commands.ExecutionException; import com.google.common.io.ByteStreams; import com.google.common.io.Closeables; import sonia.scm.repository.Repository; @@ -45,50 +44,18 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -//~--- JDK imports ------------------------------------------------------------ +public class HgCatCommand extends AbstractCommand implements CatCommand { -/** - * - * @author Sebastian Sdorra - */ -public class HgCatCommand extends AbstractCommand implements CatCommand -{ - - /** - * Constructs ... - * - * - * @param context - * @param repository - */ - HgCatCommand(HgCommandContext context, Repository repository) - { + HgCatCommand(HgCommandContext context, Repository repository) { super(context, repository); } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * @param output - * - * @throws IOException - * @throws RepositoryException - */ @Override - public void getCatResult(CatCommandRequest request, OutputStream output) - throws IOException, RepositoryException - { + public void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, RepositoryException { InputStream input = getCatResultStream(request); - try - { + try { ByteStreams.copy(input, output); - } - finally - { + } finally { Closeables.close(input, true); } } @@ -100,6 +67,10 @@ public class HgCatCommand extends AbstractCommand implements CatCommand cmd.rev(HgUtil.getRevision(request.getRevision())); - return cmd.execute(request.getPath()); + try { + return cmd.execute(request.getPath()); + } catch (ExecutionException e) { + throw new RepositoryException(e); + } } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java index 49ef283c1a..c297182b82 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java @@ -33,36 +33,21 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - import org.junit.Test; - import sonia.scm.repository.RepositoryException; -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; -/** - * - * @author Sebastian Sdorra - */ -public class HgCatCommandTest extends AbstractHgCommandTestBase -{ +import static org.junit.Assert.assertEquals; + +//~--- JDK imports ------------------------------------------------------------ + +public class HgCatCommandTest extends AbstractHgCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testCat() throws IOException, RepositoryException - { + public void testCat() throws IOException, RepositoryException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -70,48 +55,39 @@ public class HgCatCommandTest extends AbstractHgCommandTestBase assertEquals("a", execute(request)); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testSimpleCat() throws IOException, RepositoryException - { + public void testSimpleCat() throws IOException, RepositoryException { CatCommandRequest request = new CatCommandRequest(); request.setPath("b.txt"); assertEquals("b", execute(request)); } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - private String execute(CatCommandRequest request) - throws IOException, RepositoryException - { - String content = null; + @Test(expected = RepositoryException.class) + public void testUnknownFile() throws IOException, RepositoryException { + CatCommandRequest request = new CatCommandRequest(); + + request.setPath("unknown"); + execute(request); + } + + @Test + public void testSimpleStream() throws IOException, RepositoryException { + CatCommandRequest request = new CatCommandRequest(); + request.setPath("b.txt"); + + InputStream catResultStream = new HgCatCommand(cmdContext, repository).getCatResultStream(request); + + assertEquals('b', catResultStream.read()); + assertEquals('\n', catResultStream.read()); + assertEquals(-1, catResultStream.read()); + + catResultStream.close(); + } + + private String execute(CatCommandRequest request) throws IOException, RepositoryException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - try - { - new HgCatCommand(cmdContext, repository).getCatResult(request, baos); - } - finally - { - content = baos.toString().trim(); - } - - return content; + new HgCatCommand(cmdContext, repository).getCatResult(request, baos); + return baos.toString().trim(); } }