]> source.dussan.org Git - jgit.git/commitdiff
Fix fast forward rebase with rebase.autostash=true 49/20649/1
authorStefan Lay <stefan.lay@sap.com>
Wed, 15 Jan 2014 12:23:49 +0000 (13:23 +0100)
committerStefan Lay <stefan.lay@sap.com>
Wed, 15 Jan 2014 12:23:49 +0000 (13:23 +0100)
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

org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java

index a728cd24610b8c89ee7bc10f8b1149b54cf2e399..40eb494045ffe57dd11999acb6c4a3ddc76a2521 100644 (file)
@@ -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}");
index ac6f5487a19639832d87669a1a56fcedef8bc10c..e930c535e6e2bfd2edf05af8c02fae2827082adf 100644 (file)
@@ -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;
                                }
                        }