diff options
author | Bernard Leach <leachbj@bouncycastle.org> | 2011-05-23 00:20:32 +1000 |
---|---|---|
committer | Chris Aniszczyk <caniszczyk@gmail.com> | 2011-05-23 08:24:30 -0500 |
commit | cf846cfb0b2ceb65749561a0ea1cbbc0904a2ee9 (patch) | |
tree | 28221210aa51fd3b27953ca1af86a53fca0cc554 /org.eclipse.jgit.test | |
parent | 40fa75feb4536218a59b4cb6ea71e3579c8000dd (diff) | |
download | jgit-cf846cfb0b2ceb65749561a0ea1cbbc0904a2ee9.tar.gz jgit-cf846cfb0b2ceb65749561a0ea1cbbc0904a2ee9.zip |
Remove rebase temporary files on checkout failure
A checkout conflict during rebase setup should leave the repository
in SAFE state which means ensuring that the rebase temporary files
need to be removed.
Bug: 346813
Change-Id: If8b758fde73ed5a452a99a195a844825a03bae1a
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java | 41 |
1 files changed, 39 insertions, 2 deletions
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 9197ac9983..672f4d86aa 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 @@ -164,7 +164,7 @@ public class RebaseCommandTest extends RepositoryTestCase { * Create the following commits and then attempt to rebase topic onto * master. This will fail as the cherry-pick list C, D, E an F contains * a merge commit (F). - * + * * <pre> * A - B (master) * \ @@ -1053,7 +1053,7 @@ public class RebaseCommandTest extends RepositoryTestCase { // checkout topic branch / modify file2 and add checkoutBranch("refs/heads/topic"); - writeTrashFile("file2", "uncommitted file2"); + File uncommittedFile = writeTrashFile("file2", "uncommitted file2"); git.add().addFilepattern("file2").call(); // do not commit @@ -1067,6 +1067,9 @@ public class RebaseCommandTest extends RepositoryTestCase { assertNotNull(exception); assertEquals("Checkout conflict with files: \nfile2", exception.getMessage()); + + checkFile(uncommittedFile, "uncommitted file2"); + assertEquals(RepositoryState.SAFE, git.getRepository().getRepositoryState()); } @Test @@ -1375,4 +1378,38 @@ public class RebaseCommandTest extends RepositoryTestCase { checkFile(new File(db.getWorkTree(), "file2"), "more change"); assertEquals(Status.FAST_FORWARD, res.getStatus()); } + + @Test + public void testRebaseShouldLeaveWorkspaceUntouchedWithUnstagedChangesConflict() + throws Exception { + writeTrashFile(FILE1, "initial file"); + git.add().addFilepattern(FILE1).call(); + RevCommit initial = git.commit().setMessage("initial commit").call(); + createBranch(initial, "refs/heads/side"); + + writeTrashFile(FILE1, "updated file"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage("updated FILE1 on master").call(); + + // switch to side, modify the file + checkoutBranch("refs/heads/side"); + writeTrashFile(FILE1, "side update"); + git.add().addFilepattern(FILE1).call(); + git.commit().setMessage("updated FILE1 on side").call(); + + File theFile = writeTrashFile(FILE1, "dirty the file"); + + // and attempt to rebase + try { + RebaseResult rebaseResult = git.rebase() + .setUpstream("refs/heads/master").call(); + fail("Checkout with conflict should have occured, not " + + rebaseResult.getStatus()); + } catch (JGitInternalException e) { + checkFile(theFile, "dirty the file"); + } + + assertEquals(RepositoryState.SAFE, git.getRepository() + .getRepositoryState()); + } } |