Browse Source

Fix fast forward rebase with rebase.autostash=true

The folder .git/rebase-merge was not removed in this case. The
repository was then still in rebase state, but neither abort nor
continue worked.

Bug: 425742
Change-Id: I43cea6c9e5f3cef9d6b15643722fddecb40632d9
stable-3.3
Stefan Lay 11 years ago
parent
commit
3db6e05e52
  1. 39
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
  2. 3
      org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java

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

@ -1737,6 +1737,45 @@ public class RebaseCommandTest extends RepositoryTestCase {
assertEquals("file1", diffs.get(0).getOldPath());
}
@Test
public void testFastForwardRebaseWithAutoStash() throws Exception {
// create file0, add and commit
db.getConfig().setBoolean(ConfigConstants.CONFIG_REBASE_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOSTASH, true);
writeTrashFile("file0", "file0");
git.add().addFilepattern("file0").call();
git.commit().setMessage("commit0").call();
// create file1, add and commit
writeTrashFile(FILE1, "file1");
git.add().addFilepattern(FILE1).call();
RevCommit commit = git.commit().setMessage("commit1").call();
// create topic branch
createBranch(commit, "refs/heads/topic");
// checkout master branch / modify file1, add and commit
checkoutBranch("refs/heads/master");
writeTrashFile(FILE1, "modified file1");
git.add().addFilepattern(FILE1).call();
git.commit().setMessage("commit3").call();
// checkout topic branch / modify file0
checkoutBranch("refs/heads/topic");
writeTrashFile("file0", "unstaged modified file0");
// rebase
assertEquals(Status.FAST_FORWARD,
git.rebase().setUpstream("refs/heads/master")
.call().getStatus());
checkFile(new File(db.getWorkTree(), "file0"),
"unstaged modified file0");
checkFile(new File(db.getWorkTree(), FILE1), "modified file1");
assertEquals("[file0, mode:100644, content:file0]"
+ "[file1, mode:100644, content:modified file1]",
indexState(CONTENT));
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
}
private List<DiffEntry> getStashedDiff() throws AmbiguousObjectException,
IncorrectObjectTypeException, IOException, MissingObjectException {
ObjectId stashId = db.resolve("stash@{0}");

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

@ -281,6 +281,9 @@ public class RebaseCommand extends GitCommand<RebaseResult> {
return RebaseResult.INTERACTIVE_PREPARED_RESULT;
if (res != null) {
autoStashApply();
if (rebaseState.getDir().exists())
FileUtils.delete(rebaseState.getDir(),
FileUtils.RECURSIVE);
return res;
}
}

Loading…
Cancel
Save