diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java index 4b86b6014..a98dd1cf9 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java @@ -71,6 +71,23 @@ import org.junit.Test; public class CheckoutTest extends CLIRepositoryTestCase { + /** + * Executes specified git command (with arguments), captures exception and + * returns its message as an array of lines. Throws an AssertionError if no + * exception is thrown. + * + * @param command + * a valid git command line, e.g. "git branch -h" + * @return message contained within the exception + */ + private String[] executeExpectingException(String command) { + try { + execute(command); + throw new AssertionError("Expected Die"); + } catch (Exception e) { + return e.getMessage().split(System.lineSeparator()); + } + } @Test public void testCheckoutSelf() throws Exception { @@ -107,7 +124,7 @@ public void testCheckoutNewBranch() throws Exception { public void testCheckoutNonExistingBranch() throws Exception { assertStringArrayEquals( "error: pathspec 'side' did not match any file(s) known to git.", - execute("git checkout side")); + executeExpectingException("git checkout side")); } @Test @@ -131,7 +148,7 @@ public void testCheckoutNewBranchOnBranchToBeBorn() throws Exception { public void testCheckoutUnresolvedHead() throws Exception { assertStringArrayEquals( "error: pathspec 'HEAD' did not match any file(s) known to git.", - execute("git checkout HEAD")); + executeExpectingException("git checkout HEAD")); } @Test @@ -159,7 +176,8 @@ public void testCheckoutExistingBranchWithConflict() throws Exception { writeTrashFile("a", "New Hello world a"); git.add().addFilepattern(".").call(); - String[] execute = execute("git checkout branch_1"); + String[] execute = executeExpectingException( + "git checkout branch_1"); assertEquals( "error: Your local changes to the following files would be overwritten by checkout:", execute[0]); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java index b5cf56e93..2af1eca80 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java @@ -122,17 +122,21 @@ protected void run() throws Exception { CLIText.get().switchedToBranch, Repository.shortenRefName(ref.getName()))); } catch (RefNotFoundException e) { - outw.println(MessageFormat.format( - CLIText.get().pathspecDidNotMatch, - name)); + throw die(MessageFormat + .format(CLIText.get().pathspecDidNotMatch, name), e); } catch (RefAlreadyExistsException e) { - throw die(MessageFormat.format(CLIText.get().branchAlreadyExists, - name)); + throw die(MessageFormat + .format(CLIText.get().branchAlreadyExists, name)); } catch (CheckoutConflictException e) { - outw.println(CLIText.get().checkoutConflict); - for (String path : e.getConflictingPaths()) - outw.println(MessageFormat.format( + StringBuilder builder = new StringBuilder(); + builder.append(CLIText.get().checkoutConflict); + builder.append(System.lineSeparator()); + for (String path : e.getConflictingPaths()) { + builder.append(MessageFormat.format( CLIText.get().checkoutConflictPathLine, path)); + builder.append(System.lineSeparator()); + } + throw die(builder.toString(), e); } } }