|
|
@@ -54,6 +54,7 @@ import static org.junit.Assume.assumeTrue; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.util.Iterator; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
import org.eclipse.jgit.api.MergeCommand.FastForwardMode; |
|
|
|
import org.eclipse.jgit.api.MergeResult.MergeStatus; |
|
|
@@ -1584,36 +1585,77 @@ public class MergeCommandTest extends RepositoryTestCase { |
|
|
|
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus()); |
|
|
|
} |
|
|
|
|
|
|
|
private Ref prepareSuccessfulMerge(Git git) throws Exception { |
|
|
|
writeTrashFile("a", "1\na\n3\n"); |
|
|
|
git.add().addFilepattern("a").call(); |
|
|
|
RevCommit initialCommit = git.commit().setMessage("initial").call(); |
|
|
|
|
|
|
|
createBranch(initialCommit, "refs/heads/side"); |
|
|
|
checkoutBranch("refs/heads/side"); |
|
|
|
|
|
|
|
writeTrashFile("b", "1\nb\n3\n"); |
|
|
|
git.add().addFilepattern("b").call(); |
|
|
|
git.commit().setMessage("side").call(); |
|
|
|
|
|
|
|
checkoutBranch("refs/heads/master"); |
|
|
|
|
|
|
|
writeTrashFile("c", "1\nc\n3\n"); |
|
|
|
git.add().addFilepattern("c").call(); |
|
|
|
git.commit().setMessage("main").call(); |
|
|
|
|
|
|
|
return db.exactRef("refs/heads/side"); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testMergeWithMessageOption() throws Exception { |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
writeTrashFile("a", "1\na\n3\n"); |
|
|
|
git.add().addFilepattern("a").call(); |
|
|
|
RevCommit initialCommit = git.commit().setMessage("initial").call(); |
|
|
|
Ref sideBranch = prepareSuccessfulMerge(git); |
|
|
|
|
|
|
|
createBranch(initialCommit, "refs/heads/side"); |
|
|
|
checkoutBranch("refs/heads/side"); |
|
|
|
git.merge().include(sideBranch).setStrategy(MergeStrategy.RESOLVE) |
|
|
|
.setMessage("user message").call(); |
|
|
|
|
|
|
|
writeTrashFile("b", "1\nb\n3\n"); |
|
|
|
git.add().addFilepattern("b").call(); |
|
|
|
git.commit().setMessage("side").call(); |
|
|
|
assertNull(db.readMergeCommitMsg()); |
|
|
|
|
|
|
|
checkoutBranch("refs/heads/master"); |
|
|
|
Iterator<RevCommit> it = git.log().call().iterator(); |
|
|
|
RevCommit newHead = it.next(); |
|
|
|
assertEquals("user message", newHead.getFullMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
writeTrashFile("c", "1\nc\n3\n"); |
|
|
|
git.add().addFilepattern("c").call(); |
|
|
|
git.commit().setMessage("main").call(); |
|
|
|
@Test |
|
|
|
public void testMergeWithChangeId() throws Exception { |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
Ref sideBranch = prepareSuccessfulMerge(git); |
|
|
|
|
|
|
|
Ref sideBranch = db.exactRef("refs/heads/side"); |
|
|
|
git.merge().include(sideBranch).setStrategy(MergeStrategy.RESOLVE) |
|
|
|
.setInsertChangeId(true).call(); |
|
|
|
|
|
|
|
assertNull(db.readMergeCommitMsg()); |
|
|
|
|
|
|
|
Iterator<RevCommit> it = git.log().call().iterator(); |
|
|
|
RevCommit newHead = it.next(); |
|
|
|
String commitMessage = newHead.getFullMessage(); |
|
|
|
assertTrue(Pattern.compile("\nChange-Id: I[0-9a-fA-F]{40}\n") |
|
|
|
.matcher(commitMessage).find()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testMergeWithMessageAndChangeId() throws Exception { |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
Ref sideBranch = prepareSuccessfulMerge(git); |
|
|
|
|
|
|
|
git.merge().include(sideBranch).setStrategy(MergeStrategy.RESOLVE) |
|
|
|
.setMessage("user message").call(); |
|
|
|
.setMessage("user message").setInsertChangeId(true).call(); |
|
|
|
|
|
|
|
assertNull(db.readMergeCommitMsg()); |
|
|
|
|
|
|
|
Iterator<RevCommit> it = git.log().call().iterator(); |
|
|
|
RevCommit newHead = it.next(); |
|
|
|
assertEquals("user message", newHead.getFullMessage()); |
|
|
|
String commitMessage = newHead.getFullMessage(); |
|
|
|
assertTrue(commitMessage.startsWith("user message\n\n")); |
|
|
|
assertTrue(Pattern.compile("\nChange-Id: I[0-9a-fA-F]{40}\n") |
|
|
|
.matcher(commitMessage).find()); |
|
|
|
} |
|
|
|
} |
|
|
|
|