summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java24
-rw-r--r--org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java20
2 files changed, 33 insertions, 11 deletions
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 4b86b6014e..a98dd1cf98 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.Assume;
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 class CheckoutTest extends CLIRepositoryTestCase {
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 class CheckoutTest extends CLIRepositoryTestCase {
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 class CheckoutTest extends CLIRepositoryTestCase {
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 b5cf56e938..2af1eca807 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 @@ class Checkout extends TextBuiltin {
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);
}
}
}