Clean up svn cat command

This commit is contained in:
René Pfeuffer
2018-08-15 10:32:08 +02:00
parent 78278b0dc8
commit 90316d92ac
2 changed files with 60 additions and 45 deletions

View File

@@ -37,13 +37,16 @@ package sonia.scm.repository.spi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.admin.SVNLookClient;
import sonia.scm.repository.PathNotFoundException;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RevisionNotFoundException;
import sonia.scm.repository.SvnUtil;
import java.io.ByteArrayInputStream;
@@ -157,6 +160,17 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand
}
catch (SVNException ex)
{
handleSvnException(request, ex);
}
}
private void handleSvnException(CatCommandRequest request, SVNException ex) throws RepositoryException {
int svnErrorCode = ex.getErrorMessage().getErrorCode().getCode();
if (SVNErrorCode.FS_NOT_FOUND.getCode() == svnErrorCode) {
throw new PathNotFoundException(request.getPath());
} else if (SVNErrorCode.FS_NO_SUCH_REVISION.getCode() == svnErrorCode) {
throw new RevisionNotFoundException(request.getRevision());
} else {
throw new RepositoryException("could not get content from revision", ex);
}
}

View File

@@ -32,36 +32,23 @@
package sonia.scm.repository.spi;
//~--- non-JDK imports --------------------------------------------------------
import org.junit.Test;
import sonia.scm.repository.PathNotFoundException;
import sonia.scm.repository.RepositoryException;
import static org.junit.Assert.*;
//~--- JDK imports ------------------------------------------------------------
import sonia.scm.repository.RevisionNotFoundException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
*
* @author Sebastian Sdorra
*/
public class SvnCatCommandTest extends AbstractSvnCommandTestBase
{
import static org.junit.Assert.assertEquals;
//~--- JDK imports ------------------------------------------------------------
public class SvnCatCommandTest extends AbstractSvnCommandTestBase {
/**
* 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");
@@ -69,36 +56,50 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase
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("c/d.txt");
assertEquals("d", execute(request));
}
/**
* Method description
*
*
* @param request
*
* @return
*
* @throws IOException
* @throws RepositoryException
*/
private String execute(CatCommandRequest request)
throws IOException, RepositoryException
{
@Test(expected = PathNotFoundException.class)
public void testUnknownFile() throws IOException, RepositoryException {
CatCommandRequest request = new CatCommandRequest();
request.setPath("unknown");
request.setRevision("1");
execute(request);
}
@Test(expected = RevisionNotFoundException.class)
public void testUnknownRevision() throws IOException, RepositoryException {
CatCommandRequest request = new CatCommandRequest();
request.setPath("a.txt");
request.setRevision("42");
execute(request);
}
@Test
public void testSimpleStream() throws IOException, RepositoryException {
CatCommandRequest request = new CatCommandRequest();
request.setPath("a.txt");
request.setRevision("1");
InputStream catResultStream = new SvnCatCommand(createContext(), repository).getCatResultStream(request);
assertEquals('a', catResultStream.read());
assertEquals('\n', catResultStream.read());
assertEquals(-1, catResultStream.read());
catResultStream.close();
}
private String execute(CatCommandRequest request) throws IOException, RepositoryException {
String content = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();