Merge changes I6b2ce96b,I499f518f
* changes:
Fix order of deletion for files/dirs in ResolveMerger
Don't return success on failing paths in ResolveMerger
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
index cf2dead..4a7a45e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
@@ -53,10 +53,12 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.List;
import org.eclipse.jgit.api.MergeResult.MergeStatus;
import org.eclipse.jgit.api.RebaseCommand.Action;
import org.eclipse.jgit.api.RebaseCommand.Operation;
+import org.eclipse.jgit.api.RebaseCommand.Step;
import org.eclipse.jgit.api.RebaseResult.Status;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.api.errors.RefNotFoundException;
@@ -1365,8 +1367,7 @@ public void testRebaseWithUncommittedMasterChangeOtherCommit()
private int countPicks() throws IOException {
int count = 0;
- File todoFile = new File(db.getDirectory(),
- "rebase-merge/git-rebase-todo");
+ File todoFile = getTodoFile();
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(todoFile), "UTF-8"));
try {
@@ -1470,4 +1471,26 @@ public void testRebaseShouldLeaveWorkspaceUntouchedWithUnstagedChangesConflict()
assertEquals(RepositoryState.SAFE, git.getRepository()
.getRepositoryState());
}
+
+ @Test
+ public void testRebaseShouldBeAbleToHandleEmptyLinesInRebaseTodoFile()
+ throws IOException {
+ String emptyLine = "\n";
+ String todo = "pick 1111111 Commit 1\n" + emptyLine
+ + "pick 2222222 Commit 2\n" + emptyLine
+ + "# Comment line at end\n";
+ write(getTodoFile(), todo);
+
+ RebaseCommand rebaseCommand = git.rebase();
+ List<Step> steps = rebaseCommand.loadSteps();
+ assertEquals(2, steps.size());
+ assertEquals("1111111", steps.get(0).commit.name());
+ assertEquals("2222222", steps.get(1).commit.name());
+ }
+
+ private File getTodoFile() {
+ File todoFile = new File(db.getDirectory(),
+ "rebase-merge/git-rebase-todo");
+ return todoFile;
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
index 645c9ff..6f0c3eb 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
@@ -824,7 +824,7 @@ private boolean checkoutCommit(RevCommit commit) throws IOException {
return true;
}
- private List<Step> loadSteps() throws IOException {
+ List<Step> loadSteps() throws IOException {
byte[] buf = IO.readFully(new File(rebaseDir, GIT_REBASE_TODO));
int ptr = 0;
int tokenBegin = 0;
@@ -832,13 +832,12 @@ private List<Step> loadSteps() throws IOException {
while (ptr < buf.length) {
tokenBegin = ptr;
ptr = RawParseUtils.nextLF(buf, ptr);
- int nextSpace = 0;
+ int nextSpace = RawParseUtils.next(buf, tokenBegin, ' ');
int tokenCount = 0;
Step current = null;
while (tokenCount < 3 && nextSpace < ptr) {
switch (tokenCount) {
case 0:
- nextSpace = RawParseUtils.next(buf, tokenBegin, ' ');
String actionToken = new String(buf, tokenBegin, nextSpace
- tokenBegin - 1);
tokenBegin = nextSpace;
@@ -956,6 +955,11 @@ public String toToken() {
return this.token;
}
+ @Override
+ public String toString() {
+ return "Action[" + token + "]";
+ }
+
static Action parse(String token) {
if (token.equals("pick") || token.equals("p"))
return PICK;
@@ -975,6 +979,15 @@ static class Step {
Step(Action action) {
this.action = action;
}
+
+ @Override
+ public String toString() {
+ return "Step[" + action + ", "
+ + ((commit == null) ? "null" : commit)
+ + ", "
+ + ((shortMessage == null) ? "null" : new String(
+ shortMessage)) + "]";
+ }
}
PersonIdent parseAuthor(byte[] raw) {