|
|
|
@ -502,6 +502,55 @@ public class RebaseCommandTest extends RepositoryTestCase {
|
|
|
|
|
.getFullMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testStopOnConflictAndContinueWithNoDeltaToMaster() |
|
|
|
|
throws Exception { |
|
|
|
|
// create file1 on master
|
|
|
|
|
RevCommit firstInMaster = writeFileAndCommit(FILE1, "Add file1", "1", |
|
|
|
|
"2", "3"); |
|
|
|
|
// change in master
|
|
|
|
|
writeFileAndCommit(FILE1, "change file1 in master", "1master", "2", "3"); |
|
|
|
|
|
|
|
|
|
checkFile(FILE1, "1master", "2", "3"); |
|
|
|
|
// create a topic branch based on the first commit
|
|
|
|
|
createBranch(firstInMaster, "refs/heads/topic"); |
|
|
|
|
checkoutBranch("refs/heads/topic"); |
|
|
|
|
// we have the old content again
|
|
|
|
|
checkFile(FILE1, "1", "2", "3"); |
|
|
|
|
|
|
|
|
|
// change first line (conflicting)
|
|
|
|
|
writeFileAndCommit(FILE1, |
|
|
|
|
"change file1 in topic\n\nThis is conflicting", "1topic", "2", |
|
|
|
|
"3", "4topic"); |
|
|
|
|
|
|
|
|
|
RebaseResult res = git.rebase().setUpstream("refs/heads/master").call(); |
|
|
|
|
assertEquals(Status.STOPPED, res.getStatus()); |
|
|
|
|
|
|
|
|
|
// continue should throw a meaningful exception
|
|
|
|
|
try { |
|
|
|
|
res = git.rebase().setOperation(Operation.CONTINUE).call(); |
|
|
|
|
fail("Expected Exception not thrown"); |
|
|
|
|
} catch (UnmergedPathsException e) { |
|
|
|
|
// expected
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// merge the file; the second topic commit should go through
|
|
|
|
|
writeFileAndAdd(FILE1, "1master", "2", "3"); |
|
|
|
|
|
|
|
|
|
res = git.rebase().setOperation(Operation.CONTINUE).call(); |
|
|
|
|
assertNotNull(res); |
|
|
|
|
assertEquals(Status.NOTHING_TO_COMMIT, res.getStatus()); |
|
|
|
|
assertEquals(RepositoryState.REBASING_INTERACTIVE, |
|
|
|
|
db.getRepositoryState()); |
|
|
|
|
|
|
|
|
|
git.rebase().setOperation(Operation.SKIP).call(); |
|
|
|
|
|
|
|
|
|
ObjectId headId = db.resolve(Constants.HEAD); |
|
|
|
|
RevWalk rw = new RevWalk(db); |
|
|
|
|
RevCommit rc = rw.parseCommit(headId); |
|
|
|
|
assertEquals("change file1 in master", rc.getFullMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testStopOnConflictAndFailContinueIfFileIsDirty() |
|
|
|
|
throws Exception { |
|
|
|
@ -775,8 +824,15 @@ public class RebaseCommandTest extends RepositoryTestCase {
|
|
|
|
|
|
|
|
|
|
res = git.rebase().setOperation(Operation.CONTINUE).call(); |
|
|
|
|
assertNotNull(res); |
|
|
|
|
assertEquals(Status.OK, res.getStatus()); |
|
|
|
|
assertEquals(RepositoryState.SAFE, db.getRepositoryState()); |
|
|
|
|
|
|
|
|
|
// nothing to commit. this leaves the repo state in rebase, so that the
|
|
|
|
|
// user can decide what to do. if he accidentally committed, reset soft,
|
|
|
|
|
// and continue, if he really has nothing to commit, skip.
|
|
|
|
|
assertEquals(Status.NOTHING_TO_COMMIT, res.getStatus()); |
|
|
|
|
assertEquals(RepositoryState.REBASING_INTERACTIVE, |
|
|
|
|
db.getRepositoryState()); |
|
|
|
|
|
|
|
|
|
git.rebase().setOperation(Operation.SKIP).call(); |
|
|
|
|
|
|
|
|
|
ObjectId headId = db.resolve(Constants.HEAD); |
|
|
|
|
RevWalk rw = new RevWalk(db); |
|
|
|
|