Browse Source

Fix FIXUP error for blank lines in interactive rebase

Empty lines of discarded commit messages were added to the commit
message because they were not commented out properly.

Bug: 422246
Change-Id: I263e8a6b30a3392d8b4f09c0695505068a0a485d
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
stable-3.3
Stefan Lay 11 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
8339a07e83
  1. 38
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java

38
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java

@ -2250,6 +2250,44 @@ public class RebaseCommandTest extends RepositoryTestCase {
head1Commit.getFullMessage()); head1Commit.getFullMessage());
} }
@Test
public void testRebaseInteractiveFixupWithBlankLines() throws Exception {
// create file1 on master
writeTrashFile(FILE1, FILE1);
git.add().addFilepattern(FILE1).call();
git.commit().setMessage("Add file1\nnew line").call();
assertTrue(new File(db.getWorkTree(), FILE1).exists());
// create file2 on master
writeTrashFile("file2", "file2");
git.add().addFilepattern("file2").call();
git.commit().setMessage("Add file2").call();
assertTrue(new File(db.getWorkTree(), "file2").exists());
// update FILE1 on master
writeTrashFile(FILE1, "blah");
git.add().addFilepattern(FILE1).call();
git.commit().setMessage("updated file1 on master\n\nsome text").call();
git.rebase().setUpstream("HEAD~2")
.runInteractively(new InteractiveHandler() {
public void prepareSteps(List<RebaseTodoLine> steps) {
steps.get(1).setAction(Action.FIXUP);
}
public String modifyCommitMessage(String commit) {
fail("No callback to modify commit message expected for single fixup");
return commit;
}
}).call();
RevWalk walk = new RevWalk(db);
ObjectId headId = db.resolve(Constants.HEAD);
RevCommit headCommit = walk.parseCommit(headId);
assertEquals("Add file2",
headCommit.getFullMessage());
}
@Test(expected = InvalidRebaseStepException.class) @Test(expected = InvalidRebaseStepException.class)
public void testRebaseInteractiveFixupFirstCommitShouldFail() public void testRebaseInteractiveFixupFirstCommitShouldFail()

2
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java

@ -550,7 +550,7 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
} else { } else {
sb.append("# The ").append(count).append(ordinal) sb.append("# The ").append(count).append(ordinal)
.append(" commit message will be skipped:\n# "); .append(" commit message will be skipped:\n# ");
sb.append(commitToPick.getFullMessage().replaceAll("([\n\r]+)", sb.append(commitToPick.getFullMessage().replaceAll("([\n\r])",
"$1# ")); "$1# "));
} }
// Add the previous message without header (i.e first line) // Add the previous message without header (i.e first line)

Loading…
Cancel
Save