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 cf2dead5a..4a7a45e8f 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 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 645c9ff1f..374db4c9a 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 loadSteps() throws IOException { + List 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 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;