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
This commit is contained in:
parent
50a830f7d4
commit
3db6e05e52
|
@ -1737,6 +1737,45 @@ public void testRebaseWithAutoStashConflictOnApply() throws Exception {
|
||||||
assertEquals("file1", diffs.get(0).getOldPath());
|
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,
|
private List<DiffEntry> getStashedDiff() throws AmbiguousObjectException,
|
||||||
IncorrectObjectTypeException, IOException, MissingObjectException {
|
IncorrectObjectTypeException, IOException, MissingObjectException {
|
||||||
ObjectId stashId = db.resolve("stash@{0}");
|
ObjectId stashId = db.resolve("stash@{0}");
|
||||||
|
|
|
@ -281,6 +281,9 @@ public RebaseResult call() throws GitAPIException, NoHeadException,
|
||||||
return RebaseResult.INTERACTIVE_PREPARED_RESULT;
|
return RebaseResult.INTERACTIVE_PREPARED_RESULT;
|
||||||
if (res != null) {
|
if (res != null) {
|
||||||
autoStashApply();
|
autoStashApply();
|
||||||
|
if (rebaseState.getDir().exists())
|
||||||
|
FileUtils.delete(rebaseState.getDir(),
|
||||||
|
FileUtils.RECURSIVE);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue